Merge branch 'Wikidata' of ssh://gerrit.wikimedia.org:29418/mediawiki/core into Wikidata
authordaniel <daniel.kinzler@wikimedia.de>
Mon, 14 May 2012 21:24:38 +0000 (23:24 +0200)
committerdaniel <daniel.kinzler@wikimedia.de>
Mon, 14 May 2012 21:24:38 +0000 (23:24 +0200)
671 files changed:
CREDITS
INSTALL
RELEASE-NOTES-1.19
RELEASE-NOTES-1.20
api.php
includes/Article.php
includes/AutoLoader.php
includes/Block.php
includes/DefaultSettings.php
includes/DeviceDetection.php [new file with mode: 0644]
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HttpFunctions.php
includes/ImageGallery.php
includes/ImagePage.php
includes/ImageQueryPage.php
includes/Init.php
includes/Licenses.php
includes/LinkFilter.php
includes/Linker.php
includes/LinksUpdate.php
includes/LocalisationCache.php
includes/MWFunction.php
includes/MagicWord.php
includes/Message.php
includes/MessageBlobStore.php
includes/Metadata.php
includes/MimeMagic.php
includes/Namespace.php
includes/OutputHandler.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/PageQueryPage.php
includes/Pager.php
includes/PathRouter.php
includes/PoolCounter.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProxyTools.php
includes/QueryPage.php
includes/RecentChange.php
includes/Revision.php
includes/RevisionList.php
includes/Sanitizer.php
includes/ScopedPHPTimeout.php
includes/SeleniumWebSettings.php
includes/Setup.php
includes/SiteConfiguration.php
includes/SiteStats.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/SquidPurgeClient.php
includes/Status.php
includes/StreamFile.php
includes/StringUtils.php
includes/StubObject.php
includes/Title.php
includes/TitleArray.php
includes/User.php
includes/UserArray.php
includes/UserMailer.php
includes/UserRightsProxy.php
includes/WatchedItem.php
includes/WikiCategoryPage.php
includes/WikiFilePage.php
includes/WikiMap.php
includes/WikiPage.php
includes/Xml.php
includes/XmlTypeCheck.php
includes/ZhClient.php
includes/ZhConversion.php
includes/ZipDirectoryReader.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiFeedContributions.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiImport.php
includes/api/ApiMain.php
includes/api/ApiOptions.php [new file with mode: 0644]
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUserrights.php
includes/cache/CacheDependency.php
includes/cache/FileCacheBase.php
includes/cache/GenderCache.php
includes/cache/HTMLCacheUpdate.php
includes/cache/HTMLFileCache.php
includes/cache/LinkBatch.php
includes/cache/LinkCache.php
includes/cache/MemcachedSessions.php
includes/cache/MessageCache.php
includes/cache/ObjectFileCache.php
includes/cache/ResourceFileCache.php
includes/cache/SquidUpdate.php
includes/db/Database.php
includes/db/DatabaseMysql.php
includes/diff/DifferenceEngine.php
includes/filerepo/FSRepo.php
includes/filerepo/FileRepo.php
includes/filerepo/FileRepoStatus.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/NullRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/backend/FSFile.php
includes/filerepo/backend/FSFileBackend.php
includes/filerepo/backend/FileBackend.php
includes/filerepo/backend/FileBackendGroup.php
includes/filerepo/backend/FileBackendMultiWrite.php
includes/filerepo/backend/FileBackendStore.php
includes/filerepo/backend/FileOp.php
includes/filerepo/backend/FileOpBatch.php [new file with mode: 0644]
includes/filerepo/backend/SwiftFileBackend.php
includes/filerepo/backend/TempFSFile.php
includes/filerepo/backend/filejournal/DBFileJournal.php
includes/filerepo/backend/filejournal/FileJournal.php
includes/filerepo/backend/lockmanager/DBLockManager.php
includes/filerepo/backend/lockmanager/FSLockManager.php
includes/filerepo/backend/lockmanager/LSLockManager.php
includes/filerepo/backend/lockmanager/LockManager.php
includes/filerepo/backend/lockmanager/LockManagerGroup.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/installer/CliInstaller.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Ibm_db2Installer.php
includes/installer/Ibm_db2Updater.php
includes/installer/InstallDocFormatter.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/OracleInstaller.php
includes/installer/OracleUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/interwiki/Interwiki.php
includes/job/DoubleRedirectJob.php
includes/job/EmaillingJob.php
includes/job/EnotifNotifyJob.php
includes/job/JobQueue.php
includes/job/RefreshLinksJob.php
includes/job/UploadFromUrlJob.php
includes/json/FormatJson.php
includes/libs/CSSJanus.php
includes/libs/CSSMin.php
includes/libs/HttpStatus.php
includes/libs/IEContentAnalyzer.php
includes/libs/IEUrlExtension.php
includes/libs/JavaScriptMinifier.php
includes/libs/jsminplus.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/PatrolLog.php
includes/media/BMP.php
includes/media/Bitmap.php
includes/media/BitmapMetadataHandler.php
includes/media/Bitmap_ClientOnly.php
includes/media/DjVu.php
includes/media/DjVuImage.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/GIF.php
includes/media/GIFMetadataExtractor.php
includes/media/Generic.php
includes/media/IPTC.php
includes/media/Jpeg.php
includes/media/JpegMetadataExtractor.php
includes/media/MediaTransformOutput.php
includes/media/PNG.php
includes/media/PNGMetadataExtractor.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/Tiff.php
includes/media/XCF.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/media/XMPValidate.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/EhcacheBagOStuff.php
includes/objectcache/EmptyBagOStuff.php
includes/objectcache/HashBagOStuff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/objectcache/XCacheBagOStuff.php
includes/parser/CoreLinkFunctions.php
includes/parser/CoreParserFunctions.php
includes/parser/CoreTagHooks.php
includes/parser/DateFormatter.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Parser_DiffTest.php
includes/parser/Parser_LinkHooks.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/parser/Preprocessor_HipHop.hphp
includes/parser/StripState.php
includes/parser/Tidy.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimple.php
includes/profiler/ProfilerSimpleTrace.php
includes/profiler/ProfilerSimpleUDP.php
includes/profiler/ProfilerStub.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderFilePageModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderNoscriptModule.php
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevisionDelete.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialContributions.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialLockdb.php
includes/specials/SpecialLog.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserlogout.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWatchlist.php
includes/templates/NoLocalSettings.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/tidy.conf
includes/upload/UploadBase.php
includes/zhtable/tradphrases.manual
index.php
languages/Names.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/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/MessagesAvk.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/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBqi.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCv.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesExt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHa.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHil.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJut.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLn.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesLzz.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/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/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesNo.php
languages/messages/MessagesNso.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPam.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.php
languages/messages/MessagesPrg.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRgn.php
languages/messages/MessagesRif.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSat.php [new file with mode: 0644]
languages/messages/MessagesSc.php
languages/messages/MessagesScn.php
languages/messages/MessagesSco.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSimple.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTcy.php
languages/messages/MessagesTe.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTg_latn.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTo.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesTs.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesXal.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
load.php
maintenance/Maintenance.php
maintenance/archives/patch-ipb-parent-block-id-index.sql [new file with mode: 0644]
maintenance/archives/patch-ipb-parent-block-id.sql [new file with mode: 0644]
maintenance/backupTextPass.inc
maintenance/cleanupImages.php
maintenance/cleanupUploadStash.php
maintenance/dumpBackup.php
maintenance/dumpTextPass.php
maintenance/fileOpPerfTest.php [new file with mode: 0644]
maintenance/ibm_db2/tables.sql
maintenance/install.php
maintenance/language/messages.inc
maintenance/mssql/tables.sql
maintenance/oracle/tables.sql
maintenance/postgres/tables.sql
maintenance/tables.sql
maintenance/update.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/i18n/jquery.ui.datepicker-hi.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.ui/themes/vector/jquery.ui.resizable.css
resources/jquery/jquery.suggestions.js
resources/mediawiki/mediawiki.js
skins/Vector.php
skins/chick/main.css
skins/cologneblue/screen.css
skins/common/commonElements.css
skins/common/commonPrint.css
skins/modern/main.css
skins/monobook/main.css
skins/simple/main.css
skins/vector/screen-hd.css
skins/vector/screen.css
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/bootstrap.php
tests/phpunit/includes/CdbTest.php
tests/phpunit/includes/DeviceDetectionTest.php [new file with mode: 0644]
tests/phpunit/includes/LinksUpdateTest.php [new file with mode: 0644]
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/ApiOptionsTest.php [new file with mode: 0644]
tests/phpunit/includes/filerepo/FileBackendTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/backupPrefetchTest.php [new file with mode: 0644]
tests/phpunit/maintenance/backupTextPassTest.php [new file with mode: 0644]
tests/phpunit/maintenance/backup_LogTest.php [new file with mode: 0644]
tests/phpunit/maintenance/backup_PageTest.php [new file with mode: 0644]
tests/phpunit/maintenance/fetchTextTest.php [new file with mode: 0644]
tests/phpunit/maintenance/getSlaveServerTest.php [new file with mode: 0644]
tests/phpunit/phpunit.php
tests/qunit/data/styleTest.css.php
tests/qunit/data/testloader.php [new file with mode: 0644]
tests/qunit/data/testrunner.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.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/selenium/SeleniumConfig.php

diff --git a/CREDITS b/CREDITS
index bac7391..dcd4a43 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -7,6 +7,7 @@ following names for their contribution to the product.
 * Alex Z.
 * Alexandre Emsenhuber
 * Andrew Garrett
+* Arthur Richards
 * Aryeh Gregor
 * Antoine Musso
 * Brian Wolff
@@ -135,6 +136,7 @@ following names for their contribution to the product.
 * Manuel Menal
 * Marcin Cieślak
 * Marcus Buck
+* Mark A. Pelletier
 * Marooned
 * Mathias Ertl
 * Matthew Britton
diff --git a/INSTALL b/INSTALL
index 3a2860f..c4bb8be 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
 "in-place", as long as you have the necessary prerequisites available.
 
 Required software:
-* Web server with PHP 5.2.3 or higher.
+* Web server with PHP 5.3.2 or higher.
 * A SQL server, the following types are supported
 ** MySQL 5.0.2 or higher
 ** PostgreSQL 8.3 or higher
index c15ebff..6c7fa6d 100644 (file)
@@ -5,39 +5,45 @@ setting since version 1.2.0. If you have it on, turn it '''off''' if you can.
 
 == MediaWiki 1.19 ==
 
-THIS IS NOT A RELEASE YET
+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.
 
-This is a beta release of the MediaWiki 1.19 branch. Please test it and let us
-know what you think of it. Beta releases are not recommended for use in
-production.
+Our thanks go to everyone who helped to improve MediaWiki by testing the beta
+release and submitting bug reports.
 
 === Changes since 1.19 beta 2 ===
-* Special:Watchlist no longer sets links to feed when the user is anonymous
-* (bug 35565) Special:Log/patrol doesn't indicate whether patrolling was
-  automatic
+* 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.
+  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".
+  "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 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 35294) jquery.byteLimit shouldn't set element specific variables outside
-  the "return this.each" loop.
 * (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
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
 
 === Configuration changes in 1.19 ===
 * Removed SkinTemplateSetupPageCss hook; use BeforePageDisplay instead.
@@ -52,7 +58,7 @@ production.
 * (bug 32239) Removed $wgEnableTooltipsAndAccesskeys.
 * Removed $wgVectorShowVariantName.
 * Removed $wgExtensionAliasesFiles. Use $wgExtensionMessagesFiles.
-* Removed $wgResourceLoaderInlinePrivateModules, now always enabled.
+* Removed $wgResourceLoaderInlinePrivateModules , now always enabled.
 
 === New features in 1.19 ===
 * (bug 19838) Add ability to get all interwiki prefixes also if the interwiki
@@ -136,8 +142,8 @@ production.
   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.
+* (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.
@@ -154,8 +160,6 @@ production.
 * 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.
-* Now possible to specify separate section title and edit summary when adding
-  a new section to a page via the edit API action.
 
 === Bug fixes in 1.19 ===
 * $wgUploadNavigationUrl should be used for file redlinks if.
@@ -288,10 +292,11 @@ production.
 * (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.
+  array.* (bug 12262) Indents and lists are now aligned
 * (bug 29753) mw.util.tooltipAccessKeyPrefix should be alt-shift for Chrome
    on Windows
-* (bug 12262) Indents and lists are now aligned
+* (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]]
 
@@ -330,8 +335,8 @@ production.
   calling action=purge&forcelinkupdate.
 * (bug 34377) action=watch now parses messages using the correct title instead
   of "API".
-* (bug 35036) ResourceLoaderWikiModule should auto-update when messages (created
-  or overwritten) in the MediaWiki namespace change.
+* (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 ===
 
@@ -384,7 +389,6 @@ changes to languages because of Bugzilla reports.
   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 now requires MySQL 5.0.2 or later when using a MySQL database.
 
 == Compatibility ==
 
index bd8f775..35a3790 100644 (file)
@@ -10,7 +10,13 @@ THIS IS NOT A RELEASE YET
 MediaWiki 1.20 is an alpha-quality branch and is not recommended for use in
 production.
 
+=== PHP 5.3 now required ===
+Since 1.20, the lowest supported version of PHP is now 5.3.2. Please
+upgrade PHP if you have not done so prior to upgrading MediaWiki.
+
 === Configuration changes in 1.20 ===
+* $wgGitRepositoryViewers defines a mapping from Git remote repository to the
+  Gitweb instance URL used in Special:Version
 * `$wgUsePathInfo = true;` is no longer needed to make $wgArticlePath work on servers
   using like nginx, lighttpd, and apache over fastcgi. MediaWiki now always extracts
   path info from REQUEST_URI if it's available.
@@ -46,6 +52,14 @@ production.
   Special:Version
 * Edit notices can now be translated.
 * (bug 22887) Add warning and tracking category for preprocessor errors
+* (bug 31704) Allow selection of associated namespace on the watchlist
+* (bug 5445) Now remove autoblocks when a user is unblocked.
+* Added $wgLogExceptionBacktrace, on by default, to allow logging of exception
+  backtraces.
+* Added device detection for determining device capabilities.
+* QUnit.newMwEnvironment now supports passing a custom setup and/or teardown function.
+  Arguments signature has changed. First arguments is now an options object of which
+  'config' can be a property. Previously 'config' itself was the first and only argument.
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -91,6 +105,8 @@ production.
 * (bug 35572) Blocks appear to succeed even if query fails due to wrong DB structure
 * (bug 31757) Add a word-separator between help-messages in HTMLForm
 * (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
+* (bug 32604) Some messages needs escaping of wikitext inside username
+* (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -101,6 +117,11 @@ production.
 * (bug 32492) API now allows editing using pageid
 * (bug 32497) API now allows changing of protection level using pageid
 * (bug 32498) API now allows comparing pages using pageids
+* (bug 30975) API import of pages with invalid characters in this wiki leads to Fatal Error
+* (bug 30488) API now allows listing of backlinks/embeddedin/imageusage per pageid
+* (bug 34927) Output media_type for list=filearchive
+* (bug 28814) add properties to output of action=parse
+* (bug 33224) add variants of content language to meta=siteinfo
 
 === Languages updated in 1.20 ===
 
@@ -108,9 +129,10 @@ 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.
 
+* Mizo (lus) added.
+* Santali (sat) added.
 * (bug 34192) Namespace gender aliases for Albanian languages (sq & aln).
 * (bug 35541) Namespace gender aliases for Croatian (hr).
-* Mizo (lus) added.
 * (bug 36012) Space in $separatorTransformTable should be non-breaking in
   Portuguese, Esperanto and Udmurt.
 
@@ -124,7 +146,7 @@ changes to languages because of Bugzilla reports.
 
 == Compatibility ==
 
-MediaWiki 1.20 requires PHP 5.2.3. PHP 4 is no longer supported.
+MediaWiki 1.20 requires PHP 5.3.2. PHP 4 is no longer supported.
 
 MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
 support for them is somewhat less mature. There is experimental support for IBM
diff --git a/api.php b/api.php
index 889c5f1..3691ac6 100644 (file)
--- a/api.php
+++ b/api.php
@@ -38,7 +38,7 @@
 define( 'MW_API', true );
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.2.3' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'api.php' );
 }
index c766afa..00b2107 100644 (file)
@@ -198,7 +198,7 @@ class Article extends Page {
         *
         * @deprecated in 1.WD; use getContentObject() instead
         *
-        * @return string The text of this revision
+        * @return string Return the text of this revision
         */
        public function getContent() {
                wfDeprecated( __METHOD__, '1.WD' );
@@ -217,13 +217,12 @@ class Article extends Page {
         * This function has side effects! Do not use this function if you
         * only want the real revision text if any.
         *
-        * @return Content
+        * @return Content Return the content of this revision
         *
         * @since 1.WD
         */
    protected function getContentObject() {
                global $wgUser;
-
                wfProfileIn( __METHOD__ );
 
                if ( $this->mPage->getID() === 0 ) {
@@ -268,11 +267,10 @@ class Article extends Page {
         * @return int The old id for the request
         */
        public function getOldIDFromRequest() {
-               global $wgRequest;
-
                $this->mRedirectUrl = false;
 
-               $oldid = $wgRequest->getIntOrNull( 'oldid' );
+               $request = $this->getContext()->getRequest();
+               $oldid = $request->getIntOrNull( 'oldid' );
 
                if ( $oldid === null ) {
                        return 0;
@@ -295,7 +293,7 @@ class Article extends Page {
                        }
                }
 
-               if ( $wgRequest->getVal( 'direction' ) == 'next' ) {
+               if ( $request->getVal( 'direction' ) == 'next' ) {
                        $nextid = $this->getTitle()->getNextRevisionID( $oldid );
                        if ( $nextid ) {
                                $oldid = $nextid;
@@ -303,7 +301,7 @@ class Article extends Page {
                        } else {
                                $this->mRedirectUrl = $this->getTitle()->getFullURL( 'redirect=no' );
                        }
-               } elseif ( $wgRequest->getVal( 'direction' ) == 'prev' ) {
+               } elseif ( $request->getVal( 'direction' ) == 'prev' ) {
                        $previd = $this->getTitle()->getPreviousRevisionID( $oldid );
                        if ( $previd ) {
                                $oldid = $previd;
@@ -469,8 +467,7 @@ class Article extends Page {
         * page of the given title.
         */
        public function view() {
-               global $wgUser, $wgOut, $wgRequest, $wgParser;
-               global $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
+               global $wgParser, $wgUseFileCache, $wgUseETag, $wgDebugToolbar;
 
                wfProfileIn( __METHOD__ );
 
@@ -480,17 +477,19 @@ class Article extends Page {
                # the first call of this method even if $oldid is used way below.
                $oldid = $this->getOldID();
 
+               $user = $this->getContext()->getUser();
                # Another whitelist check in case getOldID() is altering the title
-               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'read', $wgUser );
+               $permErrors = $this->getTitle()->getUserPermissionsErrors( 'read', $user );
                if ( count( $permErrors ) ) {
                        wfDebug( __METHOD__ . ": denied on secondary read check\n" );
                        wfProfileOut( __METHOD__ );
                        throw new PermissionsError( 'read', $permErrors );
                }
 
+               $outputPage = $this->getContext()->getOutput();
                # getOldID() may as well want us to redirect somewhere else
                if ( $this->mRedirectUrl ) {
-                       $wgOut->redirect( $this->mRedirectUrl );
+                       $outputPage->redirect( $this->mRedirectUrl );
                        wfDebug( __METHOD__ . ": redirecting due to oldid\n" );
                        wfProfileOut( __METHOD__ );
 
@@ -498,7 +497,7 @@ class Article extends Page {
                }
 
                # If we got diff in the query, we want to see a diff page instead of the article.
-               if ( $wgRequest->getCheck( 'diff' ) ) {
+               if ( $this->getContext()->getRequest()->getCheck( 'diff' ) ) {
                        wfDebug( __METHOD__ . ": showing diff page\n" );
                        $this->showDiffPage();
                        wfProfileOut( __METHOD__ );
@@ -507,17 +506,17 @@ class Article extends Page {
                }
 
                # Set page title (may be overridden by DISPLAYTITLE)
-               $wgOut->setPageTitle( $this->getTitle()->getPrefixedText() );
+               $outputPage->setPageTitle( $this->getTitle()->getPrefixedText() );
 
-               $wgOut->setArticleFlag( true );
+               $outputPage->setArticleFlag( true );
                # Allow frames by default
-               $wgOut->allowClickjacking();
+               $outputPage->allowClickjacking();
 
                $parserCache = ParserCache::singleton();
 
                $parserOptions = $this->getParserOptions();
                # Render printable version, use printable version cache
-               if ( $wgOut->isPrintable() ) {
+               if ( $outputPage->isPrintable() ) {
                        $parserOptions->setIsPrintable( true );
                        $parserOptions->setEditSection( false );
                } elseif ( !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit' ) ) {
@@ -527,11 +526,11 @@ class Article extends Page {
                # Try client and file cache
                if ( !$wgDebugToolbar && $oldid === 0 && $this->mPage->checkTouched() ) {
                        if ( $wgUseETag ) {
-                               $wgOut->setETag( $parserCache->getETag( $this, $parserOptions ) );
+                               $outputPage->setETag( $parserCache->getETag( $this, $parserOptions ) );
                        }
 
                        # Is it client cached?
-                       if ( $wgOut->checkLastModified( $this->mPage->getTouched() ) ) {
+                       if ( $outputPage->checkLastModified( $this->mPage->getTouched() ) ) {
                                wfDebug( __METHOD__ . ": done 304\n" );
                                wfProfileOut( __METHOD__ );
 
@@ -540,8 +539,8 @@ class Article extends Page {
                        } elseif ( $wgUseFileCache && $this->tryFileCache() ) {
                                wfDebug( __METHOD__ . ": done file cache\n" );
                                # tell wgOut that output is taken care of
-                               $wgOut->disable();
-                               $this->mPage->doViewUpdates( $wgUser );
+                               $outputPage->disable();
+                               $this->mPage->doViewUpdates( $user );
                                wfProfileOut( __METHOD__ );
 
                                return;
@@ -551,7 +550,7 @@ class Article extends Page {
                # Should the parser cache be used?
                $useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
                wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
-               if ( $wgUser->getStubThreshold() ) {
+               if ( $user->getStubThreshold() ) {
                        wfIncrStats( 'pcache_miss_stub' );
                }
 
@@ -589,14 +588,14 @@ class Article extends Page {
                                                        } else {
                                                                wfDebug( __METHOD__ . ": showing parser cache contents\n" );
                                                        }
-                                                       $wgOut->addParserOutput( $this->mParserOutput );
+                                                       $outputPage->addParserOutput( $this->mParserOutput );
                                                        # Ensure that UI elements requiring revision ID have
                                                        # the correct version information.
-                                                       $wgOut->setRevisionId( $this->mPage->getLatest() );
+                                                       $outputPage->setRevisionId( $this->mPage->getLatest() );
                                                        # Preload timestamp to avoid a DB hit
                                                        $cachedTimestamp = $this->mParserOutput->getTimestamp();
                                                        if ( $cachedTimestamp !== null ) {
-                                                               $wgOut->setRevisionTimestamp( $cachedTimestamp );
+                                                               $outputPage->setRevisionTimestamp( $cachedTimestamp );
                                                                $this->mPage->setTimestamp( $cachedTimestamp );
                                                        }
                                                        $outputDone = true;
@@ -620,9 +619,9 @@ class Article extends Page {
 
                                        # Ensure that UI elements requiring revision ID have
                                        # the correct version information.
-                                       $wgOut->setRevisionId( $this->getRevIdFetched() );
+                                       $outputPage->setRevisionId( $this->getRevIdFetched() );
                                        # Preload timestamp to avoid a DB hit
-                                       $wgOut->setRevisionTimestamp( $this->getTimestamp() );
+                                       $outputPage->setRevisionTimestamp( $this->getTimestamp() );
 
                                        # Pages containing custom CSS or JavaScript get special treatment
                                        if ( $this->getTitle()->isCssOrJsPage() || $this->getTitle()->isCssJsSubpage() ) {
@@ -641,7 +640,7 @@ class Article extends Page {
                                                if ( $rt ) {
                                                        wfDebug( __METHOD__ . ": showing redirect=no page\n" );
                                                        # Viewing a redirect page (e.g. with parameter redirect=no)
-                                                       $wgOut->addHTML( $this->viewRedirect( $rt ) );
+                                                       $outputPage->addHTML( $this->viewRedirect( $rt ) );
                                                        # Parse just to get categories, displaytitle, etc.
                                                        $this->mParserOutput = $content->getParserOutput( $this->getContext(), $oldid, $parserOptions, false );
                                                        $wgOut->addParserOutputNoText( $this->mParserOutput );
@@ -660,12 +659,12 @@ class Article extends Page {
                                        if ( !$poolArticleView->execute() ) {
                                                $error = $poolArticleView->getError();
                                                if ( $error ) {
-                                                       $wgOut->clearHTML(); // for release() errors
-                                                       $wgOut->enableClientCache( false );
-                                                       $wgOut->setRobotPolicy( 'noindex,nofollow' );
+                                                       $outputPage->clearHTML(); // for release() errors
+                                                       $outputPage->enableClientCache( false );
+                                                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
 
                                                        $errortext = $error->getWikiText( false, 'view-pool-error' );
-                                                       $wgOut->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
+                                                       $outputPage->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
                                                }
                                                # Connection or timeout error
                                                wfProfileOut( __METHOD__ );
@@ -673,12 +672,12 @@ class Article extends Page {
                                        }
 
                                        $this->mParserOutput = $poolArticleView->getParserOutput();
-                                       $wgOut->addParserOutput( $this->mParserOutput );
+                                       $outputPage->addParserOutput( $this->mParserOutput );
 
                                        # Don't cache a dirty ParserOutput object
                                        if ( $poolArticleView->getIsDirty() ) {
-                                               $wgOut->setSquidMaxage( 0 );
-                                               $wgOut->addHTML( "<!-- parser cache is expired, sending anyway due to pool overload-->\n" );
+                                               $outputPage->setSquidMaxage( 0 );
+                                               $outputPage->addHTML( "<!-- parser cache is expired, sending anyway due to pool overload-->\n" );
                                        }
 
                                        $outputDone = true;
@@ -707,17 +706,17 @@ class Article extends Page {
                if ( $this->getTitle()->isMainPage() ) {
                        $msg = wfMessage( 'pagetitle-view-mainpage' )->inContentLanguage();
                        if ( !$msg->isDisabled() ) {
-                               $wgOut->setHTMLTitle( $msg->title( $this->getTitle() )->text() );
+                               $outputPage->setHTMLTitle( $msg->title( $this->getTitle() )->text() );
                        }
                }
 
                # Check for any __NOINDEX__ tags on the page using $pOutput
                $policy = $this->getRobotPolicy( 'view', $pOutput );
-               $wgOut->setIndexPolicy( $policy['index'] );
-               $wgOut->setFollowPolicy( $policy['follow'] );
+               $outputPage->setIndexPolicy( $policy['index'] );
+               $outputPage->setFollowPolicy( $policy['follow'] );
 
                $this->showViewFooter();
-               $this->mPage->doViewUpdates( $wgUser );
+               $this->mPage->doViewUpdates( $user );
 
                wfProfileOut( __METHOD__ );
        }
@@ -727,11 +726,10 @@ class Article extends Page {
         * @param $pOutput ParserOutput
         */
        public function adjustDisplayTitle( ParserOutput $pOutput ) {
-               global $wgOut;
                # Adjust the title if it was set by displaytitle, -{T|}- or language conversion
                $titleText = $pOutput->getTitleText();
                if ( strval( $titleText ) !== '' ) {
-                       $wgOut->setPageTitle( $titleText );
+                       $this->getContext()->getOutput()->setPageTitle( $titleText );
                }
        }
 
@@ -740,13 +738,13 @@ class Article extends Page {
         * Article::view() only, other callers should use the DifferenceEngine class.
         */
        public function showDiffPage() {
-               global $wgRequest, $wgUser;
-
-               $diff = $wgRequest->getVal( 'diff' );
-               $rcid = $wgRequest->getVal( 'rcid' );
-               $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) );
-               $purge = $wgRequest->getVal( 'action' ) == 'purge';
-               $unhide = $wgRequest->getInt( 'unhide' ) == 1;
+               $request = $this->getContext()->getRequest();
+               $user = $this->getContext()->getUser();
+               $diff = $request->getVal( 'diff' );
+               $rcid = $request->getVal( 'rcid' );
+               $diffOnly = $request->getBool( 'diffonly', $user->getOption( 'diffonly' ) );
+               $purge = $request->getVal( 'action' ) == 'purge';
+               $unhide = $request->getInt( 'unhide' ) == 1;
                $oldid = $this->getOldID();
 
                $contentHandler = ContentHandler::getForTitle( $this->getTitle() );
@@ -758,7 +756,7 @@ class Article extends Page {
 
                if ( $diff == 0 || $diff == $this->mPage->getLatest() ) {
                        # Run view updates for current revision only
-                       $this->mPage->doViewUpdates( $wgUser );
+                       $this->mPage->doViewUpdates( $user );
                }
        }
 
@@ -795,8 +793,7 @@ class Article extends Page {
         * TODO: actions other than 'view'
         */
        public function getRobotPolicy( $action, $pOutput ) {
-               global $wgOut, $wgArticleRobotPolicies, $wgNamespaceRobotPolicies;
-               global $wgDefaultRobotPolicy, $wgRequest;
+               global $wgArticleRobotPolicies, $wgNamespaceRobotPolicies, $wgDefaultRobotPolicy;
 
                $ns = $this->getTitle()->getNamespace();
 
@@ -818,13 +815,13 @@ class Article extends Page {
                                'index'  => 'noindex',
                                'follow' => 'nofollow'
                        );
-               } elseif ( $wgOut->isPrintable() ) {
+               } elseif ( $this->getContext()->getOutput()->isPrintable() ) {
                        # Discourage indexing of printable versions, but encourage following
                        return array(
                                'index'  => 'noindex',
                                'follow' => 'follow'
                        );
-               } elseif ( $wgRequest->getInt( 'curid' ) ) {
+               } elseif ( $this->getContext()->getRequest()->getInt( 'curid' ) ) {
                        # For ?curid=x urls, disallow indexing
                        return array(
                                'index'  => 'noindex',
@@ -893,15 +890,16 @@ class Article extends Page {
 
        /**
         * If this request is a redirect view, send "redirected from" subtitle to
-        * $wgOut. Returns true if the header was needed, false if this is not a
-        * redirect view. Handles both local and remote redirects.
+        * the output. Returns true if the header was needed, false if this is not
+        * redirect view. Handles both local and remote redirects.
         *
         * @return boolean
         */
        public function showRedirectedFromHeader() {
-               global $wgOut, $wgRequest, $wgRedirectSources;
+               global $wgRedirectSources;
+               $outputPage = $this->getContext()->getOutput();
 
-               $rdfrom = $wgRequest->getVal( 'rdfrom' );
+               $rdfrom = $this->getContext()->getRequest()->getVal( 'rdfrom' );
 
                if ( isset( $this->mRedirectedFrom ) ) {
                        // This is an internally redirected page view.
@@ -914,21 +912,21 @@ class Article extends Page {
                                        array( 'redirect' => 'no' )
                                );
 
-                               $wgOut->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
 
                                // Set the fragment if one was specified in the redirect
                                if ( strval( $this->getTitle()->getFragment() ) != '' ) {
                                        $fragment = Xml::escapeJsString( $this->getTitle()->getFragmentForURL() );
-                                       $wgOut->addInlineScript( "redirectToFragment(\"$fragment\");" );
+                                       $outputPage->addInlineScript( "redirectToFragment(\"$fragment\");" );
                                }
 
                                // Add a <link rel="canonical"> tag
-                               $wgOut->addLink( array( 'rel' => 'canonical',
+                               $outputPage->addLink( array( 'rel' => 'canonical',
                                        'href' => $this->getTitle()->getLocalURL() )
                                );
 
-                               // Tell $wgOut the user arrived at this article through a redirect
-                               $wgOut->setRedirectedFrom( $this->mRedirectedFrom );
+                               // Tell the output object that the user arrived at this article through a redirect
+                               $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
 
                                return true;
                        }
@@ -937,7 +935,7 @@ class Article extends Page {
                        // If it was reported from a trusted site, supply a backlink.
                        if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
-                               $wgOut->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
 
                                return true;
                        }
@@ -951,11 +949,9 @@ class Article extends Page {
         * [[MediaWiki:Talkpagetext]]. For Article::view().
         */
        public function showNamespaceHeader() {
-               global $wgOut;
-
                if ( $this->getTitle()->isTalkPage() ) {
                        if ( !wfMessage( 'talkpageheader' )->isDisabled() ) {
-                               $wgOut->wrapWikiMsg( "<div class=\"mw-talkpageheader\">\n$1\n</div>", array( 'talkpageheader' ) );
+                               $this->getContext()->getOutput()->wrapWikiMsg( "<div class=\"mw-talkpageheader\">\n$1\n</div>", array( 'talkpageheader' ) );
                        }
                }
        }
@@ -964,11 +960,9 @@ class Article extends Page {
         * Show the footer section of an ordinary page view
         */
        public function showViewFooter() {
-               global $wgOut;
-
                # check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
                if ( $this->getTitle()->getNamespace() == NS_USER_TALK && IP::isValid( $this->getTitle()->getText() ) ) {
-                       $wgOut->addWikiMsg( 'anontalkpagetext' );
+                       $this->getContext()->getOutput()->addWikiMsg( 'anontalkpagetext' );
                }
 
                # If we have been passed an &rcid= parameter, we want to give the user a
@@ -985,18 +979,19 @@ class Article extends Page {
         * desired, does nothing.
         */
        public function showPatrolFooter() {
-               global $wgOut, $wgRequest, $wgUser;
-
-               $rcid = $wgRequest->getVal( 'rcid' );
+               $request = $this->getContext()->getRequest();
+               $outputPage = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
+               $rcid = $request->getVal( 'rcid' );
 
                if ( !$rcid || !$this->getTitle()->quickUserCan( 'patrol' ) ) {
                        return;
                }
 
-               $token = $wgUser->getEditToken( $rcid );
-               $wgOut->preventClickjacking();
+               $token = $user->getEditToken( $rcid );
+               $outputPage->preventClickjacking();
 
-               $wgOut->addHTML(
+               $outputPage->addHTML(
                        "<div class='patrollink'>" .
                                wfMsgHtml(
                                        'markaspatrolledlink',
@@ -1021,7 +1016,8 @@ class Article extends Page {
         * namespace, show the default message text. To be called from Article::view().
         */
        public function showMissingArticle() {
-               global $wgOut, $wgRequest, $wgUser, $wgSend404Code;
+               global $wgSend404Code;
+               $outputPage = $this->getContext()->getOutput();
 
                # Show info in user (talk) namespace. Does the user exist? Is he blocked?
                if ( $this->getTitle()->getNamespace() == NS_USER || $this->getTitle()->getNamespace() == NS_USER_TALK ) {
@@ -1031,11 +1027,11 @@ class Article extends Page {
                        $ip = User::isIP( $rootPart );
 
                        if ( !($user && $user->isLoggedIn()) && !$ip ) { # User does not exist
-                               $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
+                               $outputPage->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
                                        array( 'userpage-userdoesnotexist-view', wfEscapeWikiText( $rootPart ) ) );
                        } elseif ( $user->isBlocked() ) { # Show log extract if the user is currently blocked
                                LogEventsList::showLogExtract(
-                                       $wgOut,
+                                       $outputPage,
                                        'block',
                                        $user->getUserPage()->getPrefixedText(),
                                        '',
@@ -1054,7 +1050,7 @@ class Article extends Page {
                wfRunHooks( 'ShowMissingArticle', array( $this ) );
 
                # Show delete and move logs
-               LogEventsList::showLogExtract( $wgOut, array( 'delete', 'move' ), $this->getTitle()->getPrefixedText(), '',
+               LogEventsList::showLogExtract( $outputPage, array( 'delete', 'move' ), $this->getTitle()->getPrefixedText(), '',
                        array(  'lim' => 10,
                                'conds' => array( "log_action != 'revision'" ),
                                'showIfEmpty' => false,
@@ -1064,7 +1060,7 @@ class Article extends Page {
                if ( !$this->mPage->hasViewableContent() && $wgSend404Code ) {
                        // If there's no backing content, send a 404 Not Found
                        // for better machine handling of broken links.
-                       $wgRequest->response()->header( "HTTP/1.1 404 Not Found" );
+                       $this->getContext()->getRequest()->response()->header( "HTTP/1.1 404 Not Found" );
                }
 
                $hookResult = wfRunHooks( 'BeforeDisplayNoArticleText', array( $this ) );
@@ -1083,8 +1079,8 @@ class Article extends Page {
                        // Use the default message text
                        $text = $this->getTitle()->getDefaultMessageText();
                } else {
-                       $createErrors = $this->getTitle()->getUserPermissionsErrors( 'create', $wgUser );
-                       $editErrors = $this->getTitle()->getUserPermissionsErrors( 'edit', $wgUser );
+                       $createErrors = $this->getTitle()->getUserPermissionsErrors( 'create', $this->getContext()->getUser() );
+                       $editErrors = $this->getTitle()->getUserPermissionsErrors( 'edit', $this->getContext()->getUser() );
                        $errors = array_merge( $createErrors, $editErrors );
 
                        if ( !count( $errors ) ) {
@@ -1095,37 +1091,36 @@ class Article extends Page {
                }
                $text = "<div class='noarticletext'>\n$text\n</div>";
 
-               $wgOut->addWikiText( $text );
+               $outputPage->addWikiText( $text );
        }
 
        /**
         * If the revision requested for view is deleted, check permissions.
-        * Send either an error message or a warning header to $wgOut.
+        * Send either an error message or a warning header to the output.
         *
         * @return boolean true if the view is allowed, false if not.
         */
        public function showDeletedRevisionHeader() {
-               global $wgOut, $wgRequest;
-
                if ( !$this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
                        // Not deleted
                        return true;
                }
 
+               $outputPage = $this->getContext()->getOutput();
                // If the user is not allowed to see it...
                if ( !$this->mRevision->userCan( Revision::DELETED_TEXT ) ) {
-                       $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                'rev-deleted-text-permission' );
 
                        return false;
                // If the user needs to confirm that they want to see it...
-               } elseif ( $wgRequest->getInt( 'unhide' ) != 1 ) {
+               } elseif ( $this->getContext()->getRequest()->getInt( 'unhide' ) != 1 ) {
                        # Give explanation and add a link to view the revision...
                        $oldid = intval( $this->getOldID() );
                        $link = $this->getTitle()->getFullUrl( "oldid={$oldid}&unhide=1" );
                        $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
                                'rev-suppressed-text-unhide' : 'rev-deleted-text-unhide';
-                       $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                array( $msg, $link ) );
 
                        return false;
@@ -1133,7 +1128,7 @@ class Article extends Page {
                } else {
                        $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
                                'rev-suppressed-text-view' : 'rev-deleted-text-view';
-                       $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", $msg );
+                       $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", $msg );
 
                        return true;
                }
@@ -1145,16 +1140,14 @@ class Article extends Page {
         *   Revision as of \<date\>; view current revision
         *   \<- Previous version | Next Version -\>
         *
-        * @param $oldid String: revision ID of this article revision
+        * @param $oldid int: revision ID of this article revision
         */
        public function setOldSubtitle( $oldid = 0 ) {
-               global $wgLang, $wgOut, $wgUser, $wgRequest;
-
                if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
                        return;
                }
 
-               $unhide = $wgRequest->getInt( 'unhide' ) == 1;
+               $unhide = $this->getContext()->getRequest()->getInt( 'unhide' ) == 1;
 
                # Cascade unhide param in links for easy deletion browsing
                $extraParams = array();
@@ -1171,9 +1164,10 @@ class Article extends Page {
                $timestamp = $revision->getTimestamp();
 
                $current = ( $oldid == $this->mPage->getLatest() );
-               $td = $wgLang->timeanddate( $timestamp, true );
-               $tddate = $wgLang->date( $timestamp, true );
-               $tdtime = $wgLang->time( $timestamp, true );
+               $language = $this->getContext()->getLanguage();
+               $td = $language->timeanddate( $timestamp, true );
+               $tddate = $language->date( $timestamp, true );
+               $tdtime = $language->time( $timestamp, true );
 
                # Show user links if allowed to see them. If hidden, then show them only if requested...
                $userlinks = Linker::revUserTools( $revision, !$unhide );
@@ -1182,7 +1176,8 @@ class Article extends Page {
                        ? 'revision-info-current'
                        : 'revision-info';
 
-               $wgOut->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
+               $outputPage = $this->getContext()->getOutput();
+               $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
                        $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
                        $tdtime, $revision->getUser() )->parse() . "</div>" );
 
@@ -1257,12 +1252,12 @@ class Article extends Page {
                                array( 'known', 'noclasses' )
                        );
 
-               $cdel = Linker::getRevDeleteLink( $wgUser, $revision, $this->getTitle() );
+               $cdel = Linker::getRevDeleteLink( $this->getContext()->getUser(), $revision, $this->getTitle() );
                if ( $cdel !== '' ) {
                        $cdel .= ' ';
                }
 
-               $wgOut->addSubtitle( "<div id=\"mw-revision-nav\">" . $cdel .
+               $outputPage->addSubtitle( "<div id=\"mw-revision-nav\">" . $cdel .
                        wfMsgExt( 'revision-nav', array( 'escapenoentities', 'parsemag', 'replaceafter' ),
                        $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff ) . "</div>" );
        }
@@ -1276,7 +1271,7 @@ class Article extends Page {
         * @return string containing HMTL with redirect link
         */
        public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
-               global $wgOut, $wgStylePath;
+               global $wgStylePath;
 
                if ( !is_array( $target ) ) {
                        $target = array( $target );
@@ -1286,7 +1281,7 @@ class Article extends Page {
                $imageDir = $lang->getDir();
 
                if ( $appendSubtitle ) {
-                       $wgOut->appendSubtitle( wfMsgHtml( 'redirectpagesub' ) );
+                       $this->getContext()->getOutput()->appendSubtitle( wfMsgHtml( 'redirectpagesub' ) );
                }
 
                // the loop prepends the arrow image before the link, so the first case needs to be outside
@@ -1324,9 +1319,7 @@ class Article extends Page {
         * Handle action=render
         */
        public function render() {
-               global $wgOut;
-
-               $wgOut->setArticleBodyOnly( true );
+               $this->getContext()->getOutput()->setArticleBodyOnly( true );
                $this->view();
        }
 
@@ -1349,8 +1342,6 @@ class Article extends Page {
         * UI entry point for page deletion
         */
        public function delete() {
-               global $wgOut, $wgRequest, $wgLang;
-
                # This code desperately needs to be totally rewritten
 
                $title = $this->getTitle();
@@ -1372,13 +1363,14 @@ class Article extends Page {
                $conds = $title->pageCond();
                $latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
                if ( $latest === false ) {
-                       $wgOut->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
-                       $wgOut->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
+                       $outputPage = $this->getContext()->getOutput();
+                       $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
+                       $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
                                        array( 'cannotdelete', wfEscapeWikiText( $title->getPrefixedText() ) )
                                );
-                       $wgOut->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
+                       $outputPage->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
                        LogEventsList::showLogExtract(
-                               $wgOut,
+                               $outputPage,
                                'delete',
                                $title->getPrefixedText()
                        );
@@ -1386,8 +1378,9 @@ class Article extends Page {
                        return;
                }
 
-               $deleteReasonList = $wgRequest->getText( 'wpDeleteReasonList', 'other' );
-               $deleteReason = $wgRequest->getText( 'wpReason' );
+               $request = $this->getContext()->getRequest();
+               $deleteReasonList = $request->getText( 'wpDeleteReasonList', 'other' );
+               $deleteReason = $request->getText( 'wpReason' );
 
                if ( $deleteReasonList == 'other' ) {
                        $reason = $deleteReason;
@@ -1398,15 +1391,15 @@ class Article extends Page {
                        $reason = $deleteReasonList;
                }
 
-               if ( $wgRequest->wasPosted() && $user->matchEditToken( $wgRequest->getVal( 'wpEditToken' ),
+               if ( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'wpEditToken' ),
                        array( 'delete', $this->getTitle()->getPrefixedText() ) ) )
                {
                        # Flag to hide all contents of the archived revisions
-                       $suppress = $wgRequest->getVal( 'wpSuppress' ) && $user->isAllowed( 'suppressrevision' );
+                       $suppress = $request->getVal( 'wpSuppress' ) && $user->isAllowed( 'suppressrevision' );
 
                        $this->doDelete( $reason, $suppress );
 
-                       if ( $wgRequest->getCheck( 'wpWatch' ) && $user->isLoggedIn() ) {
+                       if ( $request->getCheck( 'wpWatch' ) && $user->isLoggedIn() ) {
                                $this->doWatch();
                        } elseif ( $title->userIsWatching() ) {
                                $this->doUnwatch();
@@ -1431,8 +1424,8 @@ class Article extends Page {
                if ( $hasHistory ) {
                        $revisions = $this->mTitle->estimateRevisionCount();
                        // @todo FIXME: i18n issue/patchwork message
-                       $wgOut->addHTML( '<strong class="mw-delete-warning-revisions">' .
-                               wfMsgExt( 'historywarning', array( 'parseinline' ), $wgLang->formatNum( $revisions ) ) .
+                       $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
+                               wfMsgExt( 'historywarning', array( 'parseinline' ), $this->getContext()->getLanguage()->formatNum( $revisions ) ) .
                                wfMsgHtml( 'word-separator' ) . Linker::link( $title,
                                        wfMsgHtml( 'history' ),
                                        array( 'rel' => 'archives' ),
@@ -1442,8 +1435,8 @@ class Article extends Page {
 
                        if ( $this->mTitle->isBigDeletion() ) {
                                global $wgDeleteRevisionsLimit;
-                               $wgOut->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
-                                       array( 'delete-warning-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ) );
+                               $this->getContext()->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
+                                       array( 'delete-warning-toobig', $this->getContext()->getLanguage()->formatNum( $wgDeleteRevisionsLimit ) ) );
                        }
                }
 
@@ -1456,16 +1449,15 @@ class Article extends Page {
         * @param $reason String: prefilled reason
         */
        public function confirmDelete( $reason ) {
-               global $wgOut;
-
                wfDebug( "Article::confirmDelete\n" );
 
-               $wgOut->setPageTitle( wfMessage( 'delete-confirm', $this->getTitle()->getPrefixedText() ) );
-               $wgOut->addBacklinkSubtitle( $this->getTitle() );
-               $wgOut->setRobotPolicy( 'noindex,nofollow' );
-               $wgOut->addWikiMsg( 'confirmdeletetext' );
+               $outputPage = $this->getContext()->getOutput();
+               $outputPage->setPageTitle( wfMessage( 'delete-confirm', $this->getTitle()->getPrefixedText() ) );
+               $outputPage->addBacklinkSubtitle( $this->getTitle() );
+               $outputPage->setRobotPolicy( 'noindex,nofollow' );
+               $outputPage->addWikiMsg( 'confirmdeletetext' );
 
-               wfRunHooks( 'ArticleConfirmDelete', array( $this, $wgOut, &$reason ) );
+               wfRunHooks( 'ArticleConfirmDelete', array( $this, $outputPage, &$reason ) );
 
                $user = $this->getContext()->getUser();
 
@@ -1549,9 +1541,9 @@ class Article extends Page {
                                $form .= '<p class="mw-delete-editreasons">' . $link . '</p>';
                        }
 
-               $wgOut->addHTML( $form );
-               $wgOut->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
-               LogEventsList::showLogExtract( $wgOut, 'delete',
+               $outputPage->addHTML( $form );
+               $outputPage->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
+               LogEventsList::showLogExtract( $outputPage, 'delete',
                        $this->getTitle()->getPrefixedText()
                );
        }
@@ -1562,34 +1554,33 @@ class Article extends Page {
         * @param $suppress bool
         */
        public function doDelete( $reason, $suppress = false ) {
-               global $wgOut;
-
                $error = '';
+               $outputPage = $this->getContext()->getOutput();
                if ( $this->mPage->doDeleteArticle( $reason, $suppress, 0, true, $error ) ) {
                        $deleted = $this->getTitle()->getPrefixedText();
 
-                       $wgOut->setPageTitle( wfMessage( 'actioncomplete' ) );
-                       $wgOut->setRobotPolicy( 'noindex,nofollow' );
+                       $outputPage->setPageTitle( wfMessage( 'actioncomplete' ) );
+                       $outputPage->setRobotPolicy( 'noindex,nofollow' );
 
                        $loglink = '[[Special:Log/delete|' . wfMsgNoTrans( 'deletionlog' ) . ']]';
 
-                       $wgOut->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
-                       $wgOut->returnToMain( false );
+                       $outputPage->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
+                       $outputPage->returnToMain( false );
                } else {
-                       $wgOut->setPageTitle( wfMessage( 'cannotdelete-title', $this->getTitle()->getPrefixedText() ) );
+                       $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $this->getTitle()->getPrefixedText() ) );
                        if ( $error == '' ) {
-                               $wgOut->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
+                               $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
                                        array( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) )
                                );
-                               $wgOut->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
+                               $outputPage->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
 
                                LogEventsList::showLogExtract(
-                                       $wgOut,
+                                       $outputPage,
                                        'delete',
                                        $this->getTitle()->getPrefixedText()
                                );
                        } else {
-                               $wgOut->addHTML( $error );
+                               $outputPage->addHTML( $error );
                        }
                }
        }
@@ -1662,9 +1653,7 @@ class Article extends Page {
         * @return ParserOutput or false if the given revsion ID is not found
         */
        public function getParserOutput( $oldid = null, User $user = null ) {
-               global $wgUser;
-
-               $user = is_null( $user ) ? $wgUser : $user;
+               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
                $parserOptions = $this->mPage->makeParserOptions( $user );
 
                return $this->mPage->getParserOutput( $parserOptions, $oldid );
@@ -1675,9 +1664,8 @@ class Article extends Page {
         * @return ParserOptions
         */
        public function getParserOptions() {
-               global $wgUser;
                if ( !$this->mParserOptions ) {
-                       $this->mParserOptions = $this->mPage->makeParserOptions( $wgUser );
+                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext()->getUser() );
                }
                // Clone to allow modifications of the return value without affecting cache
                return clone $this->mParserOptions;
@@ -1763,7 +1751,7 @@ class Article extends Page {
        }
 
        /**
-        * Add this page to $wgUser's watchlist
+        * Add this page to the current user's watchlist
         *
         * This is safe to be called multiple times
         *
@@ -1771,9 +1759,8 @@ class Article extends Page {
         * @deprecated since 1.18
         */
        public function doWatch() {
-               global $wgUser;
                wfDeprecated( __METHOD__, '1.18' );
-               return WatchAction::doWatch( $this->getTitle(), $wgUser );
+               return WatchAction::doWatch( $this->getTitle(), $this->getContext()->getUser() );
        }
 
        /**
@@ -1792,24 +1779,21 @@ class Article extends Page {
         * @deprecated since 1.18
         */
        public function doUnwatch() {
-               global $wgUser;
                wfDeprecated( __METHOD__, '1.18' );
-               return WatchAction::doUnwatch( $this->getTitle(), $wgUser );
+               return WatchAction::doUnwatch( $this->getTitle(), $this->getContext()->getUser() );
        }
 
        /**
         * Output a redirect back to the article.
         * This is typically used after an edit.
         *
-        * @deprecated in 1.18; call $wgOut->redirect() directly
+        * @deprecated in 1.18; call OutputPage::redirect() directly
         * @param $noRedir Boolean: add redirect=no
         * @param $sectionAnchor String: section to redirect to, including "#"
         * @param $extraQuery String: extra query params
         */
        public function doRedirect( $noRedir = false, $sectionAnchor = '', $extraQuery = '' ) {
                wfDeprecated( __METHOD__, '1.18' );
-               global $wgOut;
-
                if ( $noRedir ) {
                        $query = 'redirect=no';
                        if ( $extraQuery )
@@ -1818,7 +1802,7 @@ class Article extends Page {
                        $query = $extraQuery;
                }
 
-               $wgOut->redirect( $this->getTitle()->getFullURL( $query ) . $sectionAnchor );
+               $this->getContext()->getOutput()->redirect( $this->getTitle()->getFullURL( $query ) . $sectionAnchor );
        }
 
        /**
@@ -1917,8 +1901,7 @@ class Article extends Page {
         * @return array
         */
        public function doRollback( $fromP, $summary, $token, $bot, &$resultDetails, User $user = null ) {
-               global $wgUser;
-               $user = is_null( $user ) ? $wgUser : $user;
+               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
                return $this->mPage->doRollback( $fromP, $summary, $token, $bot, $resultDetails, $user );
        }
 
@@ -1931,8 +1914,7 @@ class Article extends Page {
         * @return array
         */
        public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser = null ) {
-               global $wgUser;
-               $guser = is_null( $guser ) ? $wgUser : $guser;
+               $guser = is_null( $guser ) ? $this->getContext()->getUser() : $guser;
                return $this->mPage->commitRollback( $fromP, $summary, $bot, $resultDetails, $guser );
        }
 
index 23924b6..d0eaeeb 100644 (file)
@@ -56,6 +56,7 @@ $wgAutoloadLocalClasses = array(
        'DeferredUpdates' => 'includes/DeferredUpdates.php',
        'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
        'DerivativeRequest' => 'includes/WebRequest.php',
+       'DeviceDetection' => 'includes/DeviceDetection.php',
        'DiffHistoryBlob' => 'includes/HistoryBlob.php',
 
        'DoubleReplacer' => 'includes/StringUtils.php',
@@ -332,6 +333,7 @@ $wgAutoloadLocalClasses = array(
        'ApiMain' => 'includes/api/ApiMain.php',
        'ApiMove' => 'includes/api/ApiMove.php',
        'ApiOpenSearch' => 'includes/api/ApiOpenSearch.php',
+       'ApiOptions' => 'includes/api/ApiOptions.php',
        'ApiPageSet' => 'includes/api/ApiPageSet.php',
        'ApiParamInfo' => 'includes/api/ApiParamInfo.php',
        'ApiParse' => 'includes/api/ApiParse.php',
@@ -529,14 +531,17 @@ $wgAutoloadLocalClasses = array(
        'FileBackendStoreShardDirIterator' => 'includes/filerepo/backend/FileBackendStore.php',
        'FileBackendStoreShardFileIterator' => 'includes/filerepo/backend/FileBackendStore.php',
        'FileBackendMultiWrite' => 'includes/filerepo/backend/FileBackendMultiWrite.php',
+       'FileBackendStoreOpHandle' => 'includes/filerepo/backend/FileBackendStore.php',
        'FSFileBackend' => 'includes/filerepo/backend/FSFileBackend.php',
        'FSFileBackendList' => 'includes/filerepo/backend/FSFileBackend.php',
        'FSFileBackendDirList' => 'includes/filerepo/backend/FSFileBackend.php',
        'FSFileBackendFileList' => 'includes/filerepo/backend/FSFileBackend.php',
+       'FSFileOpHandle' => 'includes/filerepo/backend/FSFileBackend.php',
        'SwiftFileBackend' => 'includes/filerepo/backend/SwiftFileBackend.php',
        'SwiftFileBackendList' => 'includes/filerepo/backend/SwiftFileBackend.php',
        'SwiftFileBackendDirList' => 'includes/filerepo/backend/SwiftFileBackend.php',
        'SwiftFileBackendFileList' => 'includes/filerepo/backend/SwiftFileBackend.php',
+       'SwiftFileOpHandle' => 'includes/filerepo/backend/SwiftFileBackend.php',
        'FileJournal' => 'includes/filerepo/backend/filejournal/FileJournal.php',
        'DBFileJournal' => 'includes/filerepo/backend/filejournal/DBFileJournal.php',
        'NullFileJournal' => 'includes/filerepo/backend/filejournal/FileJournal.php',
@@ -549,6 +554,7 @@ $wgAutoloadLocalClasses = array(
        'MySqlLockManager'=> 'includes/filerepo/backend/lockmanager/DBLockManager.php',
        'NullLockManager' => 'includes/filerepo/backend/lockmanager/LockManager.php',
        'FileOp' => 'includes/filerepo/backend/FileOp.php',
+       'FileOpBatch' => 'includes/filerepo/backend/FileOpBatch.php',
        'StoreFileOp' => 'includes/filerepo/backend/FileOp.php',
        'CopyFileOp' => 'includes/filerepo/backend/FileOp.php',
        'MoveFileOp' => 'includes/filerepo/backend/FileOp.php',
index dff1a5d..7cdc756 100644 (file)
@@ -28,7 +28,8 @@ class Block {
 
                $mBlockEmail,
                $mDisableUsertalk,
-               $mCreateAccount;
+               $mCreateAccount,
+               $mParentBlockId;
 
        /// @var User|String
        protected $target;
@@ -368,6 +369,7 @@ class Block {
                $this->mAuto = $row->ipb_auto;
                $this->mHideName = $row->ipb_deleted;
                $this->mId = $row->ipb_id;
+               $this->mParentBlockId = $row->ipb_parent_block_id;
 
                // I wish I didn't have to do this
                $db = wfGetDB( DB_SLAVE );
@@ -411,6 +413,7 @@ class Block {
                }
 
                $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'ipblocks', array( 'ipb_parent_block_id' => $this->getId() ), __METHOD__ );
                $dbw->delete( 'ipblocks', array( 'ipb_id' => $this->getId() ), __METHOD__ );
 
                return $dbw->affectedRows() > 0;
@@ -508,7 +511,8 @@ class Block {
                        'ipb_range_end'        => $this->getRangeEnd(),
                        'ipb_deleted'          => intval( $this->mHideName ), // typecast required for SQLite
                        'ipb_block_email'      => $this->prevents( 'sendemail' ),
-                       'ipb_allow_usertalk'   => !$this->prevents( 'editownusertalk' )
+                       'ipb_allow_usertalk'   => !$this->prevents( 'editownusertalk' ),
+                       'ipb_parent_block_id'            => $this->mParentBlockId
                );
 
                return $a;
@@ -666,6 +670,7 @@ class Block {
                # Continue suppressing the name if needed
                $autoblock->mHideName = $this->mHideName;
                $autoblock->prevents( 'editownusertalk', $this->prevents( 'editownusertalk' ) );
+               $autoblock->mParentBlockId = $this->mId;
 
                if ( $this->mExpiry == 'infinity' ) {
                        # Original block was indefinite, start an autoblock now
@@ -1075,8 +1080,6 @@ class Block {
         * @return array( User|String, Block::TYPE_ constant )
         */
        public static function parseTarget( $target ) {
-               $target = trim( $target );
-
                # We may have been through this before
                if( $target instanceof User ){
                        if( IP::isValid( $target->getName() ) ){
@@ -1088,6 +1091,8 @@ class Block {
                        return array( null, null );
                }
 
+               $target = trim( $target );
+
                if ( IP::isValid( $target ) ) {
                        # We can still create a User if it's an IP address, but we need to turn
                        # off validation checking (which would exclude IP addresses)
index 771d9a4..519e124 100644 (file)
@@ -1907,12 +1907,12 @@ $wgMaxSquidPurgeTitles = 400;
  * Routing configuration for HTCP multicast purging. Add elements here to
  * enable HTCP and determine which purges are sent where. If set to an empty
  * array, HTCP is disabled.
- * 
+ *
  * Each key in this array is a regular expression to match against the purged
  * URL, or an empty string to match all URLs. The purged URL is matched against
  * the regexes in the order specified, and the first rule whose regex matches
  * is used.
- * 
+ *
  * Example configuration to send purges for upload.wikimedia.org to one
  * multicast group and all other purges to another:
  * $wgHTCPMulticastRouting = array(
@@ -1925,7 +1925,7 @@ $wgMaxSquidPurgeTitles = 400;
  *                 'port' => 4827,
  *         ),
  * );
- * 
+ *
  * @see $wgHTCPMulticastTTL
  */
 $wgHTCPMulticastRouting = array();
@@ -1935,12 +1935,12 @@ $wgHTCPMulticastRouting = array();
  *
  * Note that MediaWiki uses the old non-RFC compliant HTCP format, which was
  * present in the earliest Squid implementations of the protocol.
- * 
+ *
  * This setting is DEPRECATED in favor of $wgHTCPMulticastRouting , and kept
  * for backwards compatibility only. If $wgHTCPMulticastRouting is set, this
  * setting is ignored. If $wgHTCPMulticastRouting is not set and this setting
  * is, it is used to populate $wgHTCPMulticastRouting.
- * 
+ *
  * @deprecated in favor of $wgHTCPMulticastRouting
  */
 $wgHTCPMulticastAddress = false;
@@ -4175,6 +4175,11 @@ $wgShowExceptionDetails = false;
  */
 $wgShowDBErrorBacktrace = false;
 
+/**
+ * If true, send the exception backtrace to the error log
+ */
+$wgLogExceptionBacktrace = true;
+
 /**
  * Expose backend server host names through the API and various HTML comments
  */
@@ -4256,6 +4261,14 @@ $wgAggregateStatsID = false;
  */
 $wgDisableCounters = false;
 
+/**
+ * Set this to an integer to only do synchronous site_stats updates
+ * one every *this many* updates. The other requests go into pending
+ * delta values in $wgMemc. Make sure that $wgMemc is a global cache.
+ * If set to -1, updates *only* go to $wgMemc (useful for daemons).
+ */
+$wgSiteStatsAsyncFactor = false;
+
 /**
  * Parser test suite files to be run by parserTests.php when no specific
  * filename is passed to it.
@@ -4596,6 +4609,20 @@ $wgReadOnlyFile = false;
  */
 $wgUpgradeKey = false;
 
+/**
+ * Map GIT repository URLs to viewer URLs to provide links in Special:Version
+ *
+ * Key is a pattern passed to preg_match() and preg_replace(),
+ * without the delimiters (which are #) and must match the whole URL.
+ * 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.
+ */
+$wgGitRepositoryViewers = array(
+    'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+    'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+);
+
 /** @} */ # End of maintenance }
 
 /************************************************************************//**
diff --git a/includes/DeviceDetection.php b/includes/DeviceDetection.php
new file mode 100644 (file)
index 0000000..cc68667
--- /dev/null
@@ -0,0 +1,425 @@
+<?php
+/**
+ * Device detection class
+ *
+ * Copyright © 2011 Patrick Reilly
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Provides abstraction for a device.
+ * A device can select which format a request should receive and
+ * may be extended to provide access to particular device functionality.
+ * @since 1.20
+ */
+class DeviceDetection {
+
+       /**
+        * @return array
+        */
+       public function getAvailableFormats() {
+               $formats = array (
+                       'html' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'default',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'capable' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'default',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'webkit' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'webkit',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'webkit',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => false,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'ie' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'default',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => false,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'android' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'android',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => false,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'iphone' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'webkit',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'iphone',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => false,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'iphone2' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'iphone2',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'native_iphone' => array (
+                               'view_format' => 'html',
+                               'search_bar' => false,
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'default',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => false,
+                               'parser' => 'html',
+                               'disable_links' => false,
+                       ),
+                       'palm_pre' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'palm_pre',
+                               'supports_javascript' => true,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'kindle' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'kindle',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'kindle',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'kindle2' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'kindle',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'kindle',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'blackberry' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'blackberry',
+                               'supports_javascript' => true,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'blackberry-lt5' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'default',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'blackberry',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'netfront' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'simple',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'wap2' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'simple',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'psp' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'psp',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'ps3' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'simple',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'wii' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'wii',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'wii',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'operamini' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'operamini',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'operamobile' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'simple',
+                               'footmenu' => 'simple',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'operamobile',
+                               'supports_javascript' => true,
+                               'supports_jquery' => true,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'nokia' => array (
+                               'view_format' => 'html',
+                               'search_bar' => 'webkit',
+                               'footmenu' => 'default',
+                               'with_layout' => 'application',
+                               'css_file_name' => 'nokia',
+                               'supports_javascript' => true,
+                               'supports_jquery' => false,
+                               'disable_zoom' => true,
+                               'parser' => 'html',
+                               'disable_links' => true,
+                       ),
+                       'wml' => array (
+                               'view_format' => 'wml',
+                               'search_bar' => 'wml',
+                               'supports_javascript' => false,
+                               'supports_jquery' => false,
+                               'parser' => 'wml',
+                       ),
+               );
+               return $formats;
+       }
+
+       /**
+        * @param $userAgent
+        * @param string $acceptHeader
+        * @return array
+        */
+       public function detectDevice( $userAgent, $acceptHeader = '' ) {
+               $formatName = $this->detectFormatName( $userAgent, $acceptHeader );
+               return $this->getDevice( $formatName );
+       }
+
+       /**
+        * @param $formatName
+        * @return array
+        */
+       public function getDevice( $formatName ) {
+               $format = $this->getAvailableFormats();
+               return ( isset( $format[$formatName] ) ) ? $format[$formatName] : array();
+       }
+
+       /**
+        * @param $userAgent string
+        * @param $acceptHeader string
+        * @return string
+        */
+       public function detectFormatName( $userAgent, $acceptHeader = '' ) {
+               $formatName = '';
+
+               if ( preg_match( '/Android/', $userAgent ) ) {
+                       $formatName = 'android';
+                       if ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
+                               $formatName = 'operamini';
+                       }
+               } else if ( preg_match( '/MSIE 9.0/', $userAgent ) ||
+                               preg_match( '/MSIE 8.0/', $userAgent ) ) {
+                       $formatName = 'ie';
+               } else if( preg_match( '/MSIE/', $userAgent ) ) {
+                       $formatName = 'html';
+               } else if ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
+                       $formatName = 'operamobile';
+               } elseif ( preg_match( '/iPad.* Safari/', $userAgent ) ) {
+                       $formatName = 'iphone';
+               } elseif ( preg_match( '/iPhone.* Safari/', $userAgent ) ) {
+                       if ( strpos( $userAgent, 'iPhone OS 2' ) !== false ) {
+                               $formatName = 'iphone2';
+                       } else {
+                               $formatName = 'iphone';
+                       }
+               } elseif ( preg_match( '/iPhone/', $userAgent ) ) {
+                       if ( strpos( $userAgent, 'Opera' ) !== false ) {
+                               $formatName = 'operamini';
+                       } else {
+                               $formatName = 'native_iphone';
+                       }
+               } elseif ( preg_match( '/WebKit/', $userAgent ) ) {
+                       if ( preg_match( '/Series60/', $userAgent ) ) {
+                               $formatName = 'nokia';
+                       } elseif ( preg_match( '/webOS/', $userAgent ) ) {
+                               $formatName = 'palm_pre';
+                       } else {
+                               $formatName = 'webkit';
+                       }
+               } elseif ( preg_match( '/Opera/', $userAgent ) ) {
+                       if ( strpos( $userAgent, 'Nintendo Wii' ) !== false ) {
+                               $formatName = 'wii';
+                       } elseif ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
+                               $formatName = 'operamini';
+                       } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
+                               $formatName = 'iphone';
+                       } else {
+                               $formatName = 'webkit';
+                       }
+               } elseif ( preg_match( '/Kindle\/1.0/', $userAgent ) ) {
+                       $formatName = 'kindle';
+               } elseif ( preg_match( '/Kindle\/2.0/', $userAgent ) ) {
+                       $formatName = 'kindle2';
+               } elseif ( preg_match( '/Firefox/', $userAgent ) ) {
+                       $formatName = 'capable';
+               } elseif ( preg_match( '/NetFront/', $userAgent ) ) {
+                       $formatName = 'netfront';
+               } elseif ( preg_match( '/SEMC-Browser/', $userAgent ) ) {
+                       $formatName = 'wap2';
+               } elseif ( preg_match( '/Series60/', $userAgent ) ) {
+                       $formatName = 'wap2';
+               } elseif ( preg_match( '/PlayStation Portable/', $userAgent ) ) {
+                       $formatName = 'psp';
+               } elseif ( preg_match( '/PLAYSTATION 3/', $userAgent ) ) {
+                       $formatName = 'ps3';
+               } elseif ( preg_match( '/SAMSUNG/', $userAgent ) ) {
+                       $formatName = 'capable';
+               } elseif ( preg_match( '/BlackBerry/', $userAgent ) ) {
+                       if( preg_match( '/BlackBerry[^\/]*\/[1-4]\./', $userAgent ) ) {
+                               $formatName = 'blackberry-lt5';
+                       } else {
+                               $formatName = 'blackberry';
+                       }
+               }
+
+               if ( $formatName === '' ) {
+                       if ( strpos( $acceptHeader, 'application/vnd.wap.xhtml+xml' ) !== false ) {
+                               // Should be wap2
+                               $formatName = 'html';
+                       } elseif ( strpos( $acceptHeader, 'vnd.wap.wml' ) !== false ) {
+                               $formatName = 'wml';
+                       } else {
+                               $formatName = 'html';
+                       }
+               }
+               return $formatName;
+       }
+
+       /**
+        * @return array: List of all device-specific stylesheets
+        */
+       public function getCssFiles() {
+               $devices = $this->getAvailableFormats();
+               $files = array();
+               foreach ( $devices as $dev ) {
+                       if ( isset( $dev['css_file_name'] ) ) {
+                               $files[] = $dev['css_file_name'];
+                       }
+               }
+               return array_unique( $files );
+       }
+}
index b2c8ad4..72341b4 100644 (file)
@@ -1284,9 +1284,10 @@ class EditPage {
 
                wfProfileOut( __METHOD__ . '-checks' );
 
-               # If article is new, insert it.
-               $aid = $this->mTitle->getArticleID( Title::GAID_FOR_UPDATE );
-               $new = ( $aid == 0 );
+               // Use SELECT FOR UPDATE here to avoid transaction collision in
+               // WikiPage::updateRevisionOn() and ending in the self::AS_END case.
+               $this->mArticle->loadPageData( 'forupdate' );
+               $new = !$this->mArticle->exists();
 
                try {
                        if ( $new ) {
index 539d483..f7b6b96 100644 (file)
@@ -15,6 +15,8 @@
  * @ingroup Exception
  */
 class MWException extends Exception {
+       var $logId;
+
        /**
         * Should the exception use $wgOut to output the error ?
         * @return bool
@@ -111,9 +113,14 @@ class MWException extends Exception {
                                '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) .
                                "</p>\n";
                } else {
-                       return "<p>Set <b><tt>\$wgShowExceptionDetails = true;</tt></b> " .
+                       return 
+                               "<div class=\"errorbox\">" .
+                               '[' . $this->getLogId() . '] ' .
+                               gmdate( 'Y-m-d H:i:s' ) . 
+                               ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
+                               "<!-- Set \$wgShowExceptionDetails = true; " .
                                "at the bottom of LocalSettings.php to show detailed " .
-                               "debugging information.</p>";
+                               "debugging information. -->";
                }
        }
 
@@ -142,6 +149,13 @@ class MWException extends Exception {
                return $this->msg( 'internalerror', "Internal error" );
        }
 
+       function getLogId() {
+               if ( $this->logId === null ) {
+                       $this->logId = wfRandomString( 8 );
+               }
+               return $this->logId;
+       }
+
        /**
         * Return the requested URL and point to file and line number from which the
         * exception occured
@@ -151,6 +165,7 @@ class MWException extends Exception {
        function getLogMessage() {
                global $wgRequest;
 
+               $id = $this->getLogId();
                $file = $this->getFile();
                $line = $this->getLine();
                $message = $this->getMessage();
@@ -164,7 +179,7 @@ class MWException extends Exception {
                        $url = '[no req]';
                }
 
-               return "$url   Exception from line $line of $file: $message";
+               return "[$id] $url   Exception from line $line of $file: $message";
        }
 
        /** Output the exception report using HTML */
@@ -198,10 +213,15 @@ class MWException extends Exception {
         * It will be either HTML or plain text based on isCommandLine().
         */
        function report() {
+               global $wgLogExceptionBacktrace;
                $log = $this->getLogMessage();
 
                if ( $log ) {
-                       wfDebugLog( 'exception', $log );
+                       if ( $wgLogExceptionBacktrace ) {
+                               wfDebugLog( 'exception', $log . "\n" . $this->getTraceAsString() . "\n" );
+                       } else {
+                               wfDebugLog( 'exception', $log );
+                       }
                }
 
                if ( defined( 'MW_API' ) ) {
index e3909ce..5ecf4af 100644 (file)
@@ -49,6 +49,15 @@ class WikiExporter {
        const TEXT = 0;
        const STUB = 1;
 
+       var $buffer;
+
+       var $text;
+
+       /**
+        * @var DumpOutput
+        */
+       var $sink;
+
        /**
         * If using WikiExporter::STREAM to stream a large amount of data,
         * provide a database connection which is not managed by
@@ -145,6 +154,10 @@ class WikiExporter {
                        ' AND page_title=' . $this->db->addQuotes( $title->getDBkey() ) );
        }
 
+       /**
+        * @param $name string
+        * @throws MWException
+        */
        public function pageByName( $name ) {
                $title = Title::newFromText( $name );
                if ( is_null( $title ) ) {
@@ -154,6 +167,9 @@ class WikiExporter {
                }
        }
 
+       /**
+        * @param $names array
+        */
        public function pagesByName( $names ) {
                foreach ( $names as $name ) {
                        $this->pageByName( $name );
@@ -164,6 +180,10 @@ class WikiExporter {
                $this->dumpFrom( '' );
        }
 
+       /**
+        * @param $start int
+        * @param $end int
+        */
        public function logsByRange( $start, $end ) {
                $condition = 'log_id >= ' . intval( $start );
                if ( $end ) {
@@ -172,9 +192,13 @@ class WikiExporter {
                $this->dumpFrom( $condition );
        }
 
-       # Generates the distinct list of authors of an article
-       # Not called by default (depends on $this->list_authors)
-       # Can be set by Special:Export when not exporting whole history
+       /**
+        * Generates the distinct list of authors of an article
+        * Not called by default (depends on $this->list_authors)
+        * Can be set by Special:Export when not exporting whole history
+        *
+        * @param $cond
+        */
        protected function do_list_authors( $cond ) {
                wfProfileIn( __METHOD__ );
                $this->author_list = "<contributors>";
@@ -205,6 +229,11 @@ class WikiExporter {
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @param $cond string
+        * @throws MWException
+        * @throws Exception
+        */
        protected function dumpFrom( $cond = '' ) {
                wfProfileIn( __METHOD__ );
                # For logging dumps...
@@ -419,6 +448,9 @@ class WikiExporter {
                }
        }
 
+       /**
+        * @param $resultset array
+        */
        protected function outputLogStream( $resultset ) {
                foreach ( $resultset as $row ) {
                        $output = $this->writer->writeLogItem( $row );
@@ -464,6 +496,9 @@ class XmlDumpWriter {
                        $this->siteInfo();
        }
 
+       /**
+        * @return string
+        */
        function siteInfo() {
                $info = array(
                        $this->sitename(),
@@ -476,20 +511,32 @@ class XmlDumpWriter {
                        "\n  </siteinfo>\n";
        }
 
+       /**
+        * @return string
+        */
        function sitename() {
                global $wgSitename;
                return Xml::element( 'sitename', array(), $wgSitename );
        }
 
+       /**
+        * @return string
+        */
        function generator() {
                global $wgVersion;
                return Xml::element( 'generator', array(), "MediaWiki $wgVersion" );
        }
 
+       /**
+        * @return string
+        */
        function homelink() {
                return Xml::element( 'base', array(), Title::newMainPage()->getCanonicalUrl() );
        }
 
+       /**
+        * @return string
+        */
        function caseSetting() {
                global $wgCapitalLinks;
                // "case-insensitive" option is reserved for future
@@ -497,6 +544,9 @@ class XmlDumpWriter {
                return Xml::element( 'case', array(), $sensitivity );
        }
 
+       /**
+        * @return string
+        */
        function namespaces() {
                global $wgContLang;
                $spaces = "<namespaces>\n";
@@ -591,7 +641,7 @@ class XmlDumpWriter {
                if ( $row->rev_deleted & Revision::DELETED_COMMENT ) {
                        $out .= "      " . Xml::element( 'comment', array( 'deleted' => 'deleted' ) ) . "\n";
                } elseif ( $row->rev_comment != '' ) {
-                       $out .= "      " . Xml::elementClean( 'comment', null, strval( $row->rev_comment ) ) . "\n";
+                       $out .= "      " . Xml::elementClean( 'comment', array(), strval( $row->rev_comment ) ) . "\n";
                }
 
                if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model )  ) {
@@ -681,11 +731,20 @@ class XmlDumpWriter {
                return $out;
        }
 
+       /**
+        * @param $timestamp string
+        * @return string
+        */
        function writeTimestamp( $timestamp ) {
                $ts = wfTimestamp( TS_ISO_8601, $timestamp );
                return "      " . Xml::element( 'timestamp', null, $ts ) . "\n";
        }
 
+       /**
+        * @param $id
+        * @param $text string
+        * @return string
+        */
        function writeContributor( $id, $text ) {
                $out = "      <contributor>\n";
                if ( $id || !IP::isValid( $text ) ) {
@@ -700,6 +759,8 @@ class XmlDumpWriter {
 
        /**
         * Warning! This data is potentially inconsistent. :(
+        * @param $row
+        * @param $dumpContents bool
         * @return string
         */
        function writeUploads( $row, $dumpContents = false ) {
@@ -784,32 +845,55 @@ class XmlDumpWriter {
  * @ingroup Dump
  */
 class DumpOutput {
+
+       /**
+        * @param $string string
+        */
        function writeOpenStream( $string ) {
                $this->write( $string );
        }
 
+       /**
+        * @param $string string
+        */
        function writeCloseStream( $string ) {
                $this->write( $string );
        }
 
+       /**
+        * @param $page
+        * @param $string string
+        */
        function writeOpenPage( $page, $string ) {
                $this->write( $string );
        }
 
+       /**
+        * @param $string string
+        */
        function writeClosePage( $string ) {
                $this->write( $string );
        }
 
+       /**
+        * @param $rev
+        * @param $string string
+        */
        function writeRevision( $rev, $string ) {
                $this->write( $string );
        }
 
+       /**
+        * @param $rev
+        * @param $string string
+        */
        function writeLogItem( $rev, $string ) {
                $this->write( $string );
        }
 
        /**
         * Override to write to a different stream type.
+        * @param $string string
         * @return bool
         */
        function write( $string ) {
@@ -855,11 +939,17 @@ class DumpOutput {
 class DumpFileOutput extends DumpOutput {
        protected $handle = false, $filename;
 
+       /**
+        * @param $file
+        */
        function __construct( $file ) {
                $this->handle = fopen( $file, "wt" );
                $this->filename = $file;
        }
 
+       /**
+        * @param $string string
+        */
        function writeCloseStream( $string ) {
                parent::writeCloseStream( $string );
                if ( $this->handle ) {
@@ -868,20 +958,35 @@ class DumpFileOutput extends DumpOutput {
                }
        }
 
+       /**
+        * @param $string string
+        */
        function write( $string ) {
                fputs( $this->handle, $string );
        }
 
+       /**
+        * @param $newname
+        */
        function closeRenameAndReopen( $newname ) {
                $this->closeAndRename( $newname, true );
        }
 
+       /**
+        * @param $newname
+        * @throws MWException
+        */
        function renameOrException( $newname ) {
                        if (! rename( $this->filename, $newname ) ) {
                                throw new MWException( __METHOD__ . ": rename of file {$this->filename} to $newname failed\n" );
                        }
        }
 
+       /**
+        * @param $newname array
+        * @return mixed
+        * @throws MWException
+        */
        function checkRenameArgCount( $newname ) {
                if ( is_array( $newname ) ) {
                        if ( count( $newname ) > 1 ) {
@@ -893,6 +998,10 @@ class DumpFileOutput extends DumpOutput {
                return $newname;
        }
 
+       /**
+        * @param $newname mixed
+        * @param $open bool
+        */
        function closeAndRename( $newname, $open = false ) {
                $newname = $this->checkRenameArgCount( $newname );
                if ( $newname ) {
@@ -907,6 +1016,9 @@ class DumpFileOutput extends DumpOutput {
                }
        }
 
+       /**
+        * @return string|null
+        */
        function getFilenames() {
                return $this->filename;
        }
@@ -922,6 +1034,10 @@ class DumpPipeOutput extends DumpFileOutput {
        protected $command, $filename;
        protected $procOpenResource = false;
 
+       /**
+        * @param $command
+        * @param $file null
+        */
        function __construct( $command, $file = null ) {
                if ( !is_null( $file ) ) {
                        $command .=  " > " . wfEscapeShellArg( $file );
@@ -932,6 +1048,9 @@ class DumpPipeOutput extends DumpFileOutput {
                $this->filename = $file;
        }
 
+       /**
+        * @param $string string
+        */
        function writeCloseStream( $string ) {
                parent::writeCloseStream( $string );
                if ( $this->procOpenResource ) {
@@ -940,6 +1059,9 @@ class DumpPipeOutput extends DumpFileOutput {
                }
        }
 
+       /**
+        * @param $command
+        */
        function startCommand( $command ) {
                $spec = array(
                        0 => array( "pipe", "r" ),
@@ -949,10 +1071,17 @@ class DumpPipeOutput extends DumpFileOutput {
                $this->handle = $pipes[0];
        }
 
+       /**
+        * @param mixed $newname
+        */
        function closeRenameAndReopen( $newname ) {
                $this->closeAndRename( $newname, true );
        }
 
+       /**
+        * @param $newname mixed
+        * @param $open bool
+        */
        function closeAndRename( $newname, $open = false ) {
                $newname = $this->checkRenameArgCount( $newname );
                if ( $newname ) {
@@ -980,6 +1109,10 @@ class DumpPipeOutput extends DumpFileOutput {
  * @ingroup Dump
  */
 class DumpGZipOutput extends DumpPipeOutput {
+
+       /**
+        * @param $file string
+        */
        function __construct( $file ) {
                parent::__construct( "gzip", $file );
        }
@@ -990,6 +1123,10 @@ class DumpGZipOutput extends DumpPipeOutput {
  * @ingroup Dump
  */
 class DumpBZip2Output extends DumpPipeOutput {
+
+       /**
+        * @param $file string
+        */
        function __construct( $file ) {
                parent::__construct( "bzip2", $file );
        }
@@ -1000,12 +1137,20 @@ class DumpBZip2Output extends DumpPipeOutput {
  * @ingroup Dump
  */
 class Dump7ZipOutput extends DumpPipeOutput {
+
+       /**
+        * @param $file string
+        */
        function __construct( $file ) {
                $command = $this->setup7zCommand( $file );
                parent::__construct( $command );
                $this->filename = $file;
        }
 
+       /**
+        * @param $file string
+        * @return string
+        */
        function setup7zCommand( $file ) {
                $command = "7za a -bd -si " . wfEscapeShellArg( $file );
                // Suppress annoying useless crap from p7zip
@@ -1014,6 +1159,10 @@ class Dump7ZipOutput extends DumpPipeOutput {
                return( $command );
        }
 
+       /**
+        * @param $newname string
+        * @param $open bool
+        */
        function closeAndRename( $newname, $open = false ) {
                $newname = $this->checkRenameArgCount( $newname );
                if ( $newname ) {
@@ -1028,8 +1177,6 @@ class Dump7ZipOutput extends DumpPipeOutput {
        }
 }
 
-
-
 /**
  * Dump output filter class.
  * This just does output filtering and streaming; XML formatting is done
@@ -1037,18 +1184,44 @@ class Dump7ZipOutput extends DumpPipeOutput {
  * @ingroup Dump
  */
 class DumpFilter {
+
+       /**
+        * @var DumpOutput
+        * FIXME will need to be made protected whenever legacy code
+        * is updated.
+        */
+       public $sink;
+
+       /**
+        * @var bool
+        */
+       protected $sendingThisPage;
+
+       /**
+        * @param $sink DumpOutput
+        */
        function __construct( &$sink ) {
                $this->sink =& $sink;
        }
 
+       /**
+        * @param $string string
+        */
        function writeOpenStream( $string ) {
                $this->sink->writeOpenStream( $string );
        }
 
+       /**
+        * @param $string string
+        */
        function writeCloseStream( $string ) {
                $this->sink->writeCloseStream( $string );
        }
 
+       /**
+        * @param $page
+        * @param $string string
+        */
        function writeOpenPage( $page, $string ) {
                $this->sendingThisPage = $this->pass( $page, $string );
                if ( $this->sendingThisPage ) {
@@ -1056,6 +1229,9 @@ class DumpFilter {
                }
        }
 
+       /**
+        * @param $string string
+        */
        function writeClosePage( $string ) {
                if ( $this->sendingThisPage ) {
                        $this->sink->writeClosePage( $string );
@@ -1063,30 +1239,49 @@ class DumpFilter {
                }
        }
 
+       /**
+        * @param $rev
+        * @param $string string
+        */
        function writeRevision( $rev, $string ) {
                if ( $this->sendingThisPage ) {
                        $this->sink->writeRevision( $rev, $string );
                }
        }
 
+       /**
+        * @param $rev
+        * @param $string string
+        */
        function writeLogItem( $rev, $string ) {
                $this->sink->writeRevision( $rev, $string );
        }
 
+       /**
+        * @param $newname string
+        */
        function closeRenameAndReopen( $newname ) {
                $this->sink->closeRenameAndReopen( $newname );
        }
 
+       /**
+        * @param $newname string
+        * @param $open bool
+        */
        function closeAndRename( $newname, $open = false ) {
                $this->sink->closeAndRename( $newname, $open );
        }
 
+       /**
+        * @return array
+        */
        function getFilenames() {
                return $this->sink->getFilenames();
        }
 
        /**
         * Override for page-based filter types.
+        * @param $page
         * @return bool
         */
        function pass( $page ) {
@@ -1099,6 +1294,11 @@ class DumpFilter {
  * @ingroup Dump
  */
 class DumpNotalkFilter extends DumpFilter {
+
+       /**
+        * @param $page
+        * @return bool
+        */
        function pass( $page ) {
                return !MWNamespace::isTalk( $page->page_namespace );
        }
@@ -1112,6 +1312,10 @@ class DumpNamespaceFilter extends DumpFilter {
        var $invert = false;
        var $namespaces = array();
 
+       /**
+        * @param $sink DumpOutput
+        * @param $param
+        */
        function __construct( &$sink, $param ) {
                parent::__construct( $sink );
 
@@ -1154,6 +1358,10 @@ class DumpNamespaceFilter extends DumpFilter {
                }
        }
 
+       /**
+        * @param $page
+        * @return bool
+        */
        function pass( $page ) {
                $match = isset( $this->namespaces[$page->page_namespace] );
                return $this->invert xor $match;
@@ -1168,11 +1376,18 @@ class DumpNamespaceFilter extends DumpFilter {
 class DumpLatestFilter extends DumpFilter {
        var $page, $pageString, $rev, $revString;
 
+       /**
+        * @param $page
+        * @param $string string
+        */
        function writeOpenPage( $page, $string ) {
                $this->page = $page;
                $this->pageString = $string;
        }
 
+       /**
+        * @param $string string
+        */
        function writeClosePage( $string ) {
                if ( $this->rev ) {
                        $this->sink->writeOpenPage( $this->page, $this->pageString );
@@ -1185,6 +1400,10 @@ class DumpLatestFilter extends DumpFilter {
                $this->pageString = null;
        }
 
+       /**
+        * @param $rev
+        * @param $string string
+        */
        function writeRevision( $rev, $string ) {
                if ( $rev->rev_id == $this->page->page_latest ) {
                        $this->rev = $rev;
@@ -1198,51 +1417,82 @@ class DumpLatestFilter extends DumpFilter {
  * @ingroup Dump
  */
 class DumpMultiWriter {
+
+       /**
+        * @param $sinks
+        */
        function __construct( $sinks ) {
                $this->sinks = $sinks;
                $this->count = count( $sinks );
        }
 
+       /**
+        * @param $string string
+        */
        function writeOpenStream( $string ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->writeOpenStream( $string );
                }
        }
 
+       /**
+        * @param $string string
+        */
        function writeCloseStream( $string ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->writeCloseStream( $string );
                }
        }
 
+       /**
+        * @param $page
+        * @param $string string
+        */
        function writeOpenPage( $page, $string ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->writeOpenPage( $page, $string );
                }
        }
 
+       /**
+        * @param $string
+        */
        function writeClosePage( $string ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->writeClosePage( $string );
                }
        }
 
+       /**
+        * @param $rev
+        * @param $string
+        */
        function writeRevision( $rev, $string ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->writeRevision( $rev, $string );
                }
        }
 
+       /**
+        * @param $newnames
+        */
        function closeRenameAndReopen( $newnames ) {
                $this->closeAndRename( $newnames, true );
        }
 
+       /**
+        * @param $newnames array
+        * @param bool $open
+        */
        function closeAndRename( $newnames, $open = false ) {
                for ( $i = 0; $i < $this->count; $i++ ) {
                        $this->sinks[$i]->closeAndRename( $newnames[$i], $open );
                }
        }
 
+       /**
+        * @return array
+        */
        function getFilenames() {
                $filenames = array();
                for ( $i = 0; $i < $this->count; $i++ ) {
@@ -1253,6 +1503,10 @@ class DumpMultiWriter {
 
 }
 
+/**
+ * @param $string string
+ * @return string
+ */
 function xmlsafe( $string ) {
        wfProfileIn( __FUNCTION__ );
 
index 74c07cc..e1b0379 100644 (file)
@@ -70,7 +70,7 @@ class GitInfo {
                if ( preg_match( "/ref: (.*)/", $HEAD, $m ) ) {
                        return rtrim( $m[1] );
                } else {
-                       return $HEAD;
+                       return rtrim( $HEAD );
                }
        }
 
@@ -187,20 +187,10 @@ class GitInfo {
         * @return array
         */
        protected static function getViewers() {
-               if( self::$viewers === false ) {
-
-                       // Map of repo URLs to viewer URLs.
-                       //
-                       // Key is a pattern passed to preg_match() and preg_replace(),
-                       // without the delimiters (which are #) and must match the whole URL.
-                       // 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.
-                       self::$viewers = array(
-                               'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
-                               'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
-                       );
+               global $wgGitRepositoryViewers;
 
+               if( self::$viewers === false ) {
+                       self::$viewers = $wgGitRepositoryViewers;
                        wfRunHooks( 'GitViewers', array( &self::$viewers ) );
                }
 
index 74b2ea6..cea7e48 100644 (file)
@@ -368,7 +368,7 @@ function wfUrlencode( $s ) {
  * @param $prefix String
  * @return String
  */
-function wfArrayToCGI( $array1, $array2 = null, $prefix = '' ) {
+function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
        if ( !is_null( $array2 ) ) {
                $array1 = $array1 + $array2;
        }
@@ -387,7 +387,7 @@ function wfArrayToCGI( $array1, $array2 = null, $prefix = '' ) {
                                foreach ( $value as $k => $v ) {
                                        $cgi .= $firstTime ? '' : '&';
                                        if ( is_array( $v ) ) {
-                                               $cgi .= wfArrayToCGI( $v, null, $key . "[$k]" );
+                                               $cgi .= wfArrayToCgi( $v, null, $key . "[$k]" );
                                        } else {
                                                $cgi .= urlencode( $key . "[$k]" ) . '=' . urlencode( $v );
                                        }
@@ -405,7 +405,7 @@ function wfArrayToCGI( $array1, $array2 = null, $prefix = '' ) {
 }
 
 /**
- * This is the logical opposite of wfArrayToCGI(): it accepts a query string as
+ * This is the logical opposite of wfArrayToCgi(): it accepts a query string as
  * its argument and returns the same string in array form.  This allows compa-
  * tibility with legacy functions that accept raw query strings instead of nice
  * arrays.  Of course, keys and values are urldecode()d.
@@ -462,7 +462,7 @@ function wfCgiToArray( $query ) {
  */
 function wfAppendQuery( $url, $query ) {
        if ( is_array( $query ) ) {
-               $query = wfArrayToCGI( $query );
+               $query = wfArrayToCgi( $query );
        }
        if( $query != '' ) {
                if( false === strpos( $url, '?' ) ) {
@@ -2761,9 +2761,7 @@ function wfDl( $extension, $fileName = null ) {
 
        $canDl = false;
        $sapi = php_sapi_name();
-       if( version_compare( PHP_VERSION, '5.3.0', '<' ) ||
-               $sapi == 'cli' || $sapi == 'cgi' || $sapi == 'embed' )
-       {
+       if( $sapi == 'cli' || $sapi == 'cgi' || $sapi == 'embed' ) {
                $canDl = ( function_exists( 'dl' ) && is_callable( 'dl' )
                && wfIniGetBool( 'enable_dl' ) && !wfIniGetBool( 'safe_mode' ) );
        }
@@ -2901,16 +2899,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array() ) {
        }
        $cmd = $envcmd . $cmd;
 
-       if ( wfIsWindows() ) {
-               if ( version_compare( PHP_VERSION, '5.3.0', '<' ) && /* Fixed in 5.3.0 :) */
-                       ( version_compare( PHP_VERSION, '5.2.1', '>=' ) || php_uname( 's' ) == 'Windows NT' ) )
-               {
-                       # Hack to work around PHP's flawed invocation of cmd.exe
-                       # http://news.php.net/php.internals/21796
-                       # Windows 9x doesn't accept any kind of quotes
-                       $cmd = '"' . $cmd . '"';
-               }
-       } elseif ( php_uname( 's' ) == 'Linux' ) {
+       if ( php_uname( 's' ) == 'Linux' ) {
                $time = intval( $wgMaxShellTime );
                $mem = intval( $wgMaxShellMemory );
                $filesize = intval( $wgMaxShellFileSize );
index 6adef84..5b75088 100644 (file)
@@ -756,6 +756,12 @@ class CurlHttpRequest extends MWHttpRequest {
                $this->parseHeader();
                $this->setStatus();
 
+               if ( isset( $this->respHeaders['content-length'] ) ) {
+                       if ( strlen( $this->content ) < $this->getResponseHeader( 'content-length' ) ) {
+                               $this->status->fatal( 'http-truncated-body' );
+                       }
+               }
+
                return $this->status;
        }
 
@@ -890,7 +896,7 @@ class PhpHttpRequest extends MWHttpRequest {
                        return $this->status;
                }
 
-               // If everything went OK, or we recieved some error code
+               // If everything went OK, or we received some error code
                // get the response body content.
                if ( $this->status->isOK()
                                || (int)$this->respStatus >= 300) {
index f947f09..247acff 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Image gallery.
+ *
+ * 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' ) )
        die( 1 );
 
index ad90f14..43eca70 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Special handling for file description pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
 /**
  * Class for viewing MediaWiki file description pages
  *
@@ -30,7 +51,7 @@ class ImagePage extends Article {
        /**
         * Constructor from a page id
         * @param $id Int article ID to load
-        * @returnImagePage|null
+        * @return ImagePage|null
         */
        public static function newFromID( $id ) {
                $t = Title::newFromID( $id );
@@ -51,7 +72,7 @@ class ImagePage extends Article {
 
        protected function loadFile() {
                if ( $this->fileLoaded ) {
-                       return true;
+                       return;
                }
                $this->fileLoaded = true;
 
@@ -75,16 +96,17 @@ class ImagePage extends Article {
         * Include body text only; none of the image extras
         */
        public function render() {
-               global $wgOut;
-               $wgOut->setArticleBodyOnly( true );
+               $this->getContext()->setArticleBodyOnly( true );
                parent::view();
        }
 
        public function view() {
-               global $wgOut, $wgShowEXIF, $wgRequest, $wgUser;
+               global $wgShowEXIF;
 
-               $diff = $wgRequest->getVal( 'diff' );
-               $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) );
+               $out = $this->getContext()->getOutput();
+               $request = $this->getContext()->getRequest();
+               $diff = $request->getVal( 'diff' );
+               $diffOnly = $request->getBool( 'diffonly', $this->getContext()->getUser()->getOption( 'diffonly' ) );
 
                if ( $this->getTitle()->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) {
                        parent::view();
@@ -97,14 +119,14 @@ class ImagePage extends Article {
                        if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || isset( $diff ) ) {
                                // mTitle is the same as the redirect target so ask Article
                                // to perform the redirect for us.
-                               $wgRequest->setVal( 'diffonly', 'true' );
+                               $request->setVal( 'diffonly', 'true' );
                                parent::view();
                                return;
                        } else {
                                // mTitle is not the same as the redirect target so it is
                                // probably the redirect page itself. Fake the redirect symbol
-                               $wgOut->setPageTitle( $this->getTitle()->getPrefixedText() );
-                               $wgOut->addHTML( $this->viewRedirect( Title::makeTitle( NS_FILE, $this->mPage->getFile()->getName() ),
+                               $out->setPageTitle( $this->getTitle()->getPrefixedText() );
+                               $out->addHTML( $this->viewRedirect( Title::makeTitle( NS_FILE, $this->mPage->getFile()->getName() ),
                                        /* $appendSubtitle */ true, /* $forceKnown */ true ) );
                                $this->mPage->doViewUpdates( $this->getContext()->getUser() );
                                return;
@@ -120,7 +142,7 @@ class ImagePage extends Article {
                }
 
                if ( !$diff && $this->displayImg->exists() ) {
-                       $wgOut->addHTML( $this->showTOC( $showmeta ) );
+                       $out->addHTML( $this->showTOC( $showmeta ) );
                }
 
                if ( !$diff ) {
@@ -132,7 +154,7 @@ class ImagePage extends Article {
                        # NS_FILE is in the user language, but this section (the actual wikitext)
                        # should be in page content language
                        $pageLang = $this->getTitle()->getPageLanguage();
-                       $wgOut->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
+                       $out->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content',
                                'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(),
                                'class' => 'mw-content-'.$pageLang->getDir() ) ) );
 
@@ -141,8 +163,8 @@ class ImagePage extends Article {
                        $wgOut->addHTML( Xml::closeElement( 'div' ) );
                } else {
                        # Just need to set the right headers
-                       $wgOut->setArticleFlag( true );
-                       $wgOut->setPageTitle( $this->getTitle()->getPrefixedText() );
+                       $out->setArticleFlag( true );
+                       $out->setPageTitle( $this->getTitle()->getPrefixedText() );
                        $this->mPage->doViewUpdates( $this->getContext()->getUser() );
                }
 
@@ -150,16 +172,16 @@ class ImagePage extends Article {
                if ( $this->mExtraDescription ) {
                        $fol = wfMessage( 'shareddescriptionfollows' );
                        if ( !$fol->isDisabled() ) {
-                               $wgOut->addWikiText( $fol->plain() );
+                               $out->addWikiText( $fol->plain() );
                        }
-                       $wgOut->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
+                       $out->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . "</div>\n" );
                }
 
                $this->closeShowImage();
                $this->imageHistory();
                // TODO: Cleanup the following
 
-               $wgOut->addHTML( Xml::element( 'h2',
+               $out->addHTML( Xml::element( 'h2',
                        array( 'id' => 'filelinks' ),
                        wfMsg( 'imagelinks' ) ) . "\n" );
                $this->imageDupes();
@@ -171,24 +193,24 @@ class ImagePage extends Article {
                $html = '';
                wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) );
                if ( $html ) {
-                       $wgOut->addHTML( $html );
+                       $out->addHTML( $html );
                }
 
                if ( $showmeta ) {
-                       $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" );
-                       $wgOut->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
-                       $wgOut->addModules( array( 'mediawiki.action.view.metadata' ) );
+                       $out->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" );
+                       $out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
+                       $out->addModules( array( 'mediawiki.action.view.metadata' ) );
                }
 
                // Add remote Filepage.css
                if( !$this->repo->isLocal() ) {
                        $css = $this->repo->getDescriptionStylesheetUrl();
                        if ( $css ) {
-                               $wgOut->addStyle( $css );
+                               $out->addStyle( $css );
                        }
                }
                // always show the local local Filepage.css, bug 29277
-               $wgOut->addModuleStyles( 'filepage' );
+               $out->addModuleStyles( 'filepage' );
        }
 
        /**
@@ -264,12 +286,16 @@ class ImagePage extends Article {
     }
 
        protected function openShowImage() {
-               global $wgOut, $wgUser, $wgImageLimits, $wgRequest,
-                       $wgLang, $wgEnableUploads, $wgSend404Code;
+               global $wgImageLimits, $wgEnableUploads, $wgSend404Code;
 
                $this->loadFile();
+               $out = $this->getContext()->getOutput();
+               $user = $this->getContext()->getUser();
+               $lang = $this->getContext()->getLanguage();
+               $dirmark = $lang->getDirMarkEntity();
+               $request = $this->getContext()->getRequest();
 
-               $sizeSel = intval( $wgUser->getOption( 'imagesize' ) );
+               $sizeSel = intval( $user->getOption( 'imagesize' ) );
                if ( !isset( $wgImageLimits[$sizeSel] ) ) {
                        $sizeSel = User::getDefaultOption( 'imagesize' );
 
@@ -283,11 +309,10 @@ class ImagePage extends Article {
                $max = $wgImageLimits[$sizeSel];
                $maxWidth = $max[0];
                $maxHeight = $max[1];
-               $dirmark = $wgLang->getDirMarkEntity();
 
                if ( $this->displayImg->exists() ) {
                        # image
-                       $page = $wgRequest->getIntOrNull( 'page' );
+                       $page = $request->getIntOrNull( 'page' );
                        if ( is_null( $page ) ) {
                                $params = array();
                                $page = 1;
@@ -301,7 +326,7 @@ class ImagePage extends Article {
 
                        $longDesc = wfMsg( 'parentheses', $this->displayImg->getLongDesc() );
 
-                       wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$wgOut ) );
+                       wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
 
                        if ( $this->displayImg->allowInlineDisplay() ) {
                                # image
@@ -337,7 +362,7 @@ class ImagePage extends Article {
                                        if ( count( $otherSizes ) && $this->displayImg->getRepo()->canTransformVia404() ) {
                                                $msgsmall .= ' ' .
                                                Html::rawElement( 'span', array( 'class' => 'mw-filepage-other-resolutions' ),
-                                                       wfMessage( 'show-big-image-other' )->rawParams( $wgLang->pipeList( $otherSizes ) )->
+                                                       wfMessage( 'show-big-image-other' )->rawParams( $lang->pipeList( $otherSizes ) )->
                                                        params( count( $otherSizes ) )->parse()
                                                );
                                        }
@@ -359,7 +384,7 @@ class ImagePage extends Article {
 
                                $isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
                                if ( $isMulti ) {
-                                       $wgOut->addHTML( '<table class="multipageimage"><tr><td>' );
+                                       $out->addHTML( '<table class="multipageimage"><tr><td>' );
                                }
 
                                if ( $thumbnail ) {
@@ -367,7 +392,7 @@ class ImagePage extends Article {
                                                'alt' => $this->displayImg->getTitle()->getPrefixedText(),
                                                'file-link' => true,
                                        );
-                                       $wgOut->addHTML( '<div class="fullImageLink" id="file">' .
+                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
                                                $thumbnail->toHtml( $options ) .
                                                $anchorclose . "</div>\n" );
                                }
@@ -376,7 +401,7 @@ class ImagePage extends Article {
                                        $count = $this->displayImg->pageCount();
 
                                        if ( $page > 1 ) {
-                                               $label = $wgOut->parse( wfMsg( 'imgmultipageprev' ), false );
+                                               $label = $out->parse( wfMsg( 'imgmultipageprev' ), false );
                                                $link = Linker::link(
                                                        $this->getTitle(),
                                                        $label,
@@ -414,13 +439,13 @@ class ImagePage extends Article {
                                        );
                                        $options = array();
                                        for ( $i = 1; $i <= $count; $i++ ) {
-                                               $options[] = Xml::option( $wgLang->formatNum( $i ), $i, $i == $page );
+                                               $options[] = Xml::option( $lang->formatNum( $i ), $i, $i == $page );
                                        }
                                        $select = Xml::tags( 'select',
                                                array( 'id' => 'pageselector', 'name' => 'page' ),
                                                implode( "\n", $options ) );
 
-                                       $wgOut->addHTML(
+                                       $out->addHTML(
                                                '</td><td><div class="multipageimagenavbox">' .
                                                Xml::openElement( 'form', $formParams ) .
                                                Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
@@ -435,7 +460,7 @@ class ImagePage extends Article {
                                if ( $this->displayImg->isSafeFile() ) {
                                        $icon = $this->displayImg->iconThumb();
 
-                                       $wgOut->addHTML( '<div class="fullImageLink" id="file">' .
+                                       $out->addHTML( '<div class="fullImageLink" id="file">' .
                                                $icon->toHtml( array( 'file-link' => true ) ) .
                                                "</div>\n" );
                                }
@@ -460,13 +485,13 @@ class ImagePage extends Article {
                                        // The dirmark, however, must not be immediately adjacent
                                        // to the filename, because it can get copied with it.
                                        // See bug 25277.
-                                       $wgOut->addWikiText( <<<EOT
+                                       $out->addWikiText( <<<EOT
 <div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
 <div class="mediaWarning">$warning</div>
 EOT
                                                );
                                } else {
-                                       $wgOut->addWikiText( <<<EOT
+                                       $out->addWikiText( <<<EOT
 <div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
 </div>
 EOT
@@ -483,7 +508,7 @@ EOT
                                # No article exists either
                                # Show deletion log to be consistent with normal articles
                                LogEventsList::showLogExtract(
-                                       $wgOut,
+                                       $out,
                                        array( 'delete', 'move' ),
                                        $this->getTitle()->getPrefixedText(),
                                        '',
@@ -495,7 +520,7 @@ EOT
                                );
                        }
 
-                       if ( $wgEnableUploads && $wgUser->isAllowed( 'upload' ) ) {
+                       if ( $wgEnableUploads && $user->isAllowed( 'upload' ) ) {
                                // Only show an upload link if the user can upload
                                $uploadTitle = SpecialPage::getTitleFor( 'Upload' );
                                $nofile = array(
@@ -508,15 +533,15 @@ EOT
                        // Note, if there is an image description page, but
                        // no image, then this setRobotPolicy is overriden
                        // by Article::View().
-                       $wgOut->setRobotPolicy( 'noindex,nofollow' );
-                       $wgOut->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
+                       $out->setRobotPolicy( 'noindex,nofollow' );
+                       $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
                        if ( !$this->getID() && $wgSend404Code ) {
                                // If there is no image, no shared image, and no description page,
                                // output a 404, to be consistent with articles.
-                               $wgRequest->response()->header( 'HTTP/1.1 404 Not Found' );
+                               $request->response()->header( 'HTTP/1.1 404 Not Found' );
                        }
                }
-               $wgOut->setFileVersion( $this->displayImg );
+               $out->setFileVersion( $this->displayImg );
        }
 
        /**
@@ -546,8 +571,7 @@ EOT
         * Show a notice that the file is from a shared repository
         */
        protected function printSharedImageText() {
-               global $wgOut;
-
+               $out = $this->getContext()->getOutput();
                $this->loadFile();
 
                $descUrl = $this->mPage->getFile()->getDescriptionUrl();
@@ -555,18 +579,18 @@ EOT
 
                /* Add canonical to head if there is no local page for this shared file */
                if( $descUrl && $this->mPage->getID() == 0 ) {
-                       $wgOut->addLink( array( 'rel' => 'canonical', 'href' => $descUrl ) );
+                       $out->addLink( array( 'rel' => 'canonical', 'href' => $descUrl ) );
                }
 
                $wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
                $repo = $this->mPage->getFile()->getRepo()->getDisplayName();
 
                if ( $descUrl && $descText && wfMsgNoTrans( 'sharedupload-desc-here' ) !== '-'  ) {
-                       $wgOut->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
                } elseif ( $descUrl && wfMsgNoTrans( 'sharedupload-desc-there' ) !== '-' ) {
-                       $wgOut->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
                } else {
-                       $wgOut->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
+                       $out->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
                }
 
                if ( $descText ) {
@@ -588,7 +612,7 @@ EOT
         * external editing (and instructions link) etc.
         */
        protected function uploadLinksBox() {
-               global $wgUser, $wgOut, $wgEnableUploads, $wgUseExternalEditor;
+               global $wgEnableUploads, $wgUseExternalEditor;
 
                if ( !$wgEnableUploads ) {
                        return;
@@ -599,12 +623,13 @@ EOT
                        return;
                }
 
-               $wgOut->addHTML( "<br /><ul>\n" );
+               $out = $this->getContext()->getOutput();
+               $out->addHTML( "<br /><ul>\n" );
 
                # "Upload a new version of this file" link
-               if ( UploadBase::userCanReUpload( $wgUser, $this->mPage->getFile()->name ) ) {
+               if ( UploadBase::userCanReUpload( $this->getContext()->getUser(), $this->mPage->getFile()->name ) ) {
                        $ulink = Linker::makeExternalLink( $this->getUploadUrl(), wfMsg( 'uploadnewversion-linktext' ) );
-                       $wgOut->addHTML( "<li id=\"mw-imagepage-reupload-link\"><div class=\"plainlinks\">{$ulink}</div></li>\n" );
+                       $out->addHTML( "<li id=\"mw-imagepage-reupload-link\"><div class=\"plainlinks\">{$ulink}</div></li>\n" );
                }
 
                # External editing link
@@ -620,14 +645,14 @@ EOT
                                ),
                                array( 'known', 'noclasses' )
                        );
-                       $wgOut->addHTML(
+                       $out->addHTML(
                                '<li id="mw-imagepage-edit-external">' . $elink . ' <small>' .
                                wfMsgExt( 'edit-externally-help', array( 'parseinline' ) ) .
                                "</small></li>\n"
                        );
                }
 
-               $wgOut->addHTML( "</ul>\n" );
+               $out->addHTML( "</ul>\n" );
        }
 
        protected function closeShowImage() { } # For overloading
@@ -637,12 +662,11 @@ EOT
         * we follow it with an upload history of the image and its usage.
         */
        protected function imageHistory() {
-               global $wgOut;
-
                $this->loadFile();
+               $out = $this->getContext()->getOutput();
                $pager = new ImageHistoryPseudoPager( $this );
-               $wgOut->addHTML( $pager->getBody() );
-               $wgOut->preventClickjacking( $pager->getPreventClickjacking() );
+               $out->addHTML( $pager->getBody() );
+               $out->preventClickjacking( $pager->getPreventClickjacking() );
 
                $this->mPage->getFile()->resetHistory(); // free db resources
 
@@ -671,10 +695,9 @@ EOT
        }
 
        protected function imageLinks() {
-               global $wgOut, $wgLang;
-
                $limit = 100;
 
+               $out = $this->getContext()->getOutput();
                $res = $this->queryImageLinks( $this->getTitle()->getDbKey(), $limit + 1);
                $rows = array();
                $redirects = array();
@@ -698,7 +721,7 @@ EOT
                }
 
                if ( $count == 0 ) {
-                       $wgOut->wrapWikiMsg(
+                       $out->wrapWikiMsg(
                                Html::rawElement( 'div',
                                        array( 'id' => 'mw-imagepage-nolinkstoimage' ), "\n$1\n" ),
                                'nolinkstoimage'
@@ -706,18 +729,18 @@ EOT
                        return;
                }
 
-               $wgOut->addHTML( "<div id='mw-imagepage-section-linkstoimage'>\n" );
+               $out->addHTML( "<div id='mw-imagepage-section-linkstoimage'>\n" );
                if ( !$hasMore ) {
-                       $wgOut->addWikiMsg( 'linkstoimage', $count );
+                       $out->addWikiMsg( 'linkstoimage', $count );
                } else {
                        // More links than the limit. Add a link to [[Special:Whatlinkshere]]
-                       $wgOut->addWikiMsg( 'linkstoimage-more',
-                               $wgLang->formatNum( $limit ),
+                       $out->addWikiMsg( 'linkstoimage-more',
+                               $this->getContext()->getLanguage()->formatNum( $limit ),
                                $this->getTitle()->getPrefixedDBkey()
                        );
                }
 
-               $wgOut->addHTML(
+               $out->addHTML(
                        Html::openElement( 'ul',
                                array( 'class' => 'mw-imagepage-linkstoimage' ) ) . "\n"
                );
@@ -756,7 +779,7 @@ EOT
                                $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
                                        $link, $ul )->parse();
                        }
-                       $wgOut->addHTML( Html::rawElement(
+                       $out->addHTML( Html::rawElement(
                                        'li',
                                        array( 'id' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
                                        $liContents
@@ -764,31 +787,30 @@ EOT
                        );
 
                };
-               $wgOut->addHTML( Html::closeElement( 'ul' ) . "\n" );
+               $out->addHTML( Html::closeElement( 'ul' ) . "\n" );
                $res->free();
 
                // Add a links to [[Special:Whatlinkshere]]
                if ( $count > $limit ) {
-                       $wgOut->addWikiMsg( 'morelinkstoimage', $this->getTitle()->getPrefixedDBkey() );
+                       $out->addWikiMsg( 'morelinkstoimage', $this->getTitle()->getPrefixedDBkey() );
                }
-               $wgOut->addHTML( Html::closeElement( 'div' ) . "\n" );
+               $out->addHTML( Html::closeElement( 'div' ) . "\n" );
        }
 
        protected function imageDupes() {
-               global $wgOut, $wgLang;
-
                $this->loadFile();
+               $out = $this->getContext()->getOutput();
 
                $dupes = $this->mPage->getDuplicates();
                if ( count( $dupes ) == 0 ) {
                        return;
                }
 
-               $wgOut->addHTML( "<div id='mw-imagepage-section-duplicates'>\n" );
-               $wgOut->addWikiMsg( 'duplicatesoffile',
-                       $wgLang->formatNum( count( $dupes ) ), $this->getTitle()->getDBkey()
+               $out->addHTML( "<div id='mw-imagepage-section-duplicates'>\n" );
+               $out->addWikiMsg( 'duplicatesoffile',
+                       $this->getContext()->getLanguage()->formatNum( count( $dupes ) ), $this->getTitle()->getDBkey()
                );
-               $wgOut->addHTML( "<ul class='mw-imagepage-duplicates'>\n" );
+               $out->addHTML( "<ul class='mw-imagepage-duplicates'>\n" );
 
                /**
                 * @var $file File
@@ -808,9 +830,9 @@ EOT
                                        $file->getTitle()->getPrefixedText() );
                                $fromSrc = wfMsg( 'shared-repo-from', $file->getRepo()->getDisplayName() );
                        }
-                       $wgOut->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
+                       $out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
                }
-               $wgOut->addHTML( "</ul></div>\n" );
+               $out->addHTML( "</ul></div>\n" );
        }
 
        /**
@@ -834,12 +856,12 @@ EOT
         * @param $description String
         */
        function showError( $description ) {
-               global $wgOut;
-               $wgOut->setPageTitle( wfMessage( 'internalerror' ) );
-               $wgOut->setRobotPolicy( 'noindex,nofollow' );
-               $wgOut->setArticleRelated( false );
-               $wgOut->enableClientCache( false );
-               $wgOut->addWikiText( $description );
+               $out = $this->getContext()->getOutput();
+               $out->setPageTitle( wfMessage( 'internalerror' ) );
+               $out->setRobotPolicy( 'noindex,nofollow' );
+               $out->setArticleRelated( false );
+               $out->enableClientCache( false );
+               $out->addWikiText( $description );
        }
 
        /**
@@ -864,7 +886,7 @@ EOT
  *
  * @ingroup Media
  */
-class ImageHistoryList {
+class ImageHistoryList extends ContextSource {
 
        /**
         * @var Title
@@ -899,6 +921,7 @@ class ImageHistoryList {
                $this->title = $imagePage->getTitle();
                $this->imagePage = $imagePage;
                $this->showThumb = $wgShowArchiveThumbnails && $this->img->canRender();
+               $this->setContext( $imagePage->getContext() );
        }
 
        /**
@@ -920,14 +943,13 @@ class ImageHistoryList {
         * @return string
         */
        public function beginImageHistoryList( $navLinks = '' ) {
-               global $wgOut, $wgUser;
                return Xml::element( 'h2', array( 'id' => 'filehistory' ), wfMsg( 'filehist' ) ) . "\n"
                        . "<div id=\"mw-imagepage-section-filehistory\">\n"
-                       . $wgOut->parse( wfMsgNoTrans( 'filehist-help' ) )
+                       . $this->getOutput()->parse( wfMsgNoTrans( 'filehist-help' ) )
                        . $navLinks . "\n"
                        . Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
                        . '<tr><td></td>'
-                       . ( $this->current->isLocal() && ( $wgUser->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
+                       . ( $this->current->isLocal() && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
                        . '<th>' . wfMsgHtml( 'filehist-datetime' ) . '</th>'
                        . ( $this->showThumb ? '<th>' . wfMsgHtml( 'filehist-thumb' ) . '</th>' : '' )
                        . '<th>' . wfMsgHtml( 'filehist-dimensions' ) . '</th>'
@@ -950,22 +972,24 @@ class ImageHistoryList {
         * @return string
         */
        public function imageHistoryLine( $iscur, $file ) {
-               global $wgUser, $wgLang, $wgContLang;
+               global $wgContLang;
 
+               $user = $this->getUser();
+               $lang = $this->getLanguage();
                $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
                $img = $iscur ? $file->getName() : $file->getArchiveName();
-               $user = $file->getUser( 'id' );
-               $usertext = $file->getUser( 'text' );
+               $userId = $file->getUser( 'id' );
+               $userText = $file->getUser( 'text' );
                $description = $file->getDescription();
 
                $local = $this->current->isLocal();
                $row = $selected = '';
 
                // Deletion link
-               if ( $local && ( $wgUser->isAllowedAny( 'delete', 'deletedhistory' ) ) ) {
+               if ( $local && ( $user->isAllowedAny( 'delete', 'deletedhistory' ) ) ) {
                        $row .= '<td>';
                        # Link to remove from history
-                       if ( $wgUser->isAllowed( 'delete' ) ) {
+                       if ( $user->isAllowed( 'delete' ) ) {
                                $q = array( 'action' => 'delete' );
                                if ( !$iscur ) {
                                        $q['oldimage'] = $img;
@@ -977,16 +1001,16 @@ class ImageHistoryList {
                                );
                        }
                        # Link to hide content. Don't show useless link to people who cannot hide revisions.
-                       $canHide = $wgUser->isAllowed( 'deleterevision' );
-                       if ( $canHide || ( $wgUser->isAllowed( 'deletedhistory' ) && $file->getVisibility() ) ) {
-                               if ( $wgUser->isAllowed( 'delete' ) ) {
+                       $canHide = $user->isAllowed( 'deleterevision' );
+                       if ( $canHide || ( $user->isAllowed( 'deletedhistory' ) && $file->getVisibility() ) ) {
+                               if ( $user->isAllowed( 'delete' ) ) {
                                        $row .= '<br />';
                                }
                                // If file is top revision or locked from this user, don't link
                                if ( $iscur || !$file->userCan( File::DELETED_RESTRICTED ) ) {
                                        $del = Linker::revDeleteLinkDisabled( $canHide );
                                } else {
-                                       list( $ts, $name ) = explode( '!', $img, 2 );
+                                       list( $ts, ) = explode( '!', $img, 2 );
                                        $query = array(
                                                'type'   => 'oldimage',
                                                'target' => $this->title->getPrefixedText(),
@@ -1004,7 +1028,7 @@ class ImageHistoryList {
                $row .= '<td>';
                if ( $iscur ) {
                        $row .= wfMsgHtml( 'filehist-current' );
-               } elseif ( $local && $wgUser->isLoggedIn() && $this->title->userCan( 'edit' ) ) {
+               } elseif ( $local && $user->isLoggedIn() && $this->title->userCan( 'edit' ) ) {
                        if ( $file->isDeleted( File::DELETED_FILE ) ) {
                                $row .= wfMsgHtml( 'filehist-revert' );
                        } else {
@@ -1015,7 +1039,7 @@ class ImageHistoryList {
                                        array(
                                                'action' => 'revert',
                                                'oldimage' => $img,
-                                               'wpEditToken' => $wgUser->getEditToken( $img )
+                                               'wpEditToken' => $user->getEditToken( $img )
                                        ),
                                        array( 'known', 'noclasses' )
                                );
@@ -1030,7 +1054,7 @@ class ImageHistoryList {
                $row .= "<td $selected style='white-space: nowrap;'>";
                if ( !$file->userCan( File::DELETED_FILE ) ) {
                        # Don't link to unviewable files
-                       $row .= '<span class="history-deleted">' . $wgLang->timeanddate( $timestamp, true ) . '</span>';
+                       $row .= '<span class="history-deleted">' . $lang->timeanddate( $timestamp, true ) . '</span>';
                } elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
                        if ( $local ) {
                                $this->preventClickjacking();
@@ -1038,22 +1062,22 @@ class ImageHistoryList {
                                # Make a link to review the image
                                $url = Linker::link(
                                        $revdel,
-                                       $wgLang->timeanddate( $timestamp, true ),
+                                       $lang->timeanddate( $timestamp, true ),
                                        array(),
                                        array(
                                                'target' => $this->title->getPrefixedText(),
                                                'file' => $img,
-                                               'token' => $wgUser->getEditToken( $img )
+                                               'token' => $user->getEditToken( $img )
                                        ),
                                        array( 'known', 'noclasses' )
                                );
                        } else {
-                               $url = $wgLang->timeanddate( $timestamp, true );
+                               $url = $lang->timeanddate( $timestamp, true );
                        }
                        $row .= '<span class="history-deleted">' . $url . '</span>';
                } else {
                        $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
-                       $row .= Xml::element( 'a', array( 'href' => $url ), $wgLang->timeanddate( $timestamp, true ) );
+                       $row .= Xml::element( 'a', array( 'href' => $url ), $lang->timeanddate( $timestamp, true ) );
                }
                $row .= "</td>";
 
@@ -1075,10 +1099,10 @@ class ImageHistoryList {
                        $row .= '<span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
                } else {
                        if ( $local ) {
-                               $row .= Linker::userLink( $user, $usertext ) . ' <span style="white-space: nowrap;">' .
-                               Linker::userToolLinks( $user, $usertext ) . '</span>';
+                               $row .= Linker::userLink( $userId, $userText ) . ' <span style="white-space: nowrap;">' .
+                               Linker::userToolLinks( $userId, $userText ) . '</span>';
                        } else {
-                               $row .= htmlspecialchars( $usertext );
+                               $row .= htmlspecialchars( $userText );
                        }
                }
                $row .= '</td>';
@@ -1102,8 +1126,7 @@ class ImageHistoryList {
         * @return string
         */
        protected function getThumbForLine( $file ) {
-               global $wgLang;
-
+               $lang = $this->getLanguage();
                if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE ) && !$file->isDeleted( File::DELETED_FILE ) ) {
                        $params = array(
                                'width' => '120',
@@ -1114,9 +1137,9 @@ class ImageHistoryList {
                        $thumbnail = $file->transform( $params );
                        $options = array(
                                'alt' => wfMsg( 'filehist-thumbtext',
-                                       $wgLang->timeanddate( $timestamp, true ),
-                                       $wgLang->date( $timestamp, true ),
-                                       $wgLang->time( $timestamp, true ) ),
+                                       $lang->timeanddate( $timestamp, true ),
+                                       $lang->date( $timestamp, true ),
+                                       $lang->time( $timestamp, true ) ),
                                'file-link' => true,
                        );
 
@@ -1190,6 +1213,7 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
        }
 
        /**
+        * @param $row object
         * @return string
         */
        function formatRow( $row ) {
index f46974b..f9f6cee 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Variant of QueryPage which uses a gallery to output results.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
 
 /**
  * Variant of QueryPage which uses a gallery to output results, thus
index 5bfd3f5..a8540f2 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Some functions that are useful during startup.
+ *
+ * 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
+ */
 
 /**
  * Some functions that are useful during startup.
index 8a06c6f..c498a57 100644 (file)
@@ -1,14 +1,32 @@
 <?php
 /**
- * A License class for use on Special:Upload
+ * License selector for use on Special:Upload.
  *
- * @ingroup SpecialPage
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
+ * @ingroup SpecialPage
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  */
 
+/**
+ * A License class for use on Special:Upload
+ */
 class Licenses extends HTMLFormField {
        /**
         * @var string
index f1e19f9..214f495 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Functions to help implement an external link filter for spam control.
+ *
+ * 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
+ */
+
 
 /**
  * Some functions to help implement an external link filter for spam control.
index 918bebc..8e02fd9 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Methods to make links and related items.
+ *
+ * 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
+ */
+
 /**
  * Some internal bits split of from Skin.php. These functions are used
  * for primarily page content: links, embedded images, table of contents. Links
@@ -397,6 +418,31 @@ class Linker {
                return "<strong class=\"selflink\">{$prefix}{$html}{$inside}</strong>{$trail}";
        }
 
+       /**
+        * Get a message saying that an invalid title was encountered.
+        * This should be called after a method like Title::makeTitleSafe() returned
+        * a value indicating that the title object is invalid.
+        *
+        * @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
+        */
+       public static function getInvalidTitleDescription( IContextSource $context, $namespace, $title ) {
+               global $wgContLang;
+
+               // First we check whether the namespace exists or not.
+               if ( MWNamespace::exists( $namespace ) ) {
+                       if ( $namespace == NS_MAIN ) {
+                               $name = $context->msg( 'blanknamespace' )->text();
+                       } else {
+                               $name = $wgContLang->getFormattedNsText( $namespace );
+                       }
+                       return $context->msg( 'invalidtitle-knownnamespace', $namespace, $name, $title )->text();
+               } else {
+                       return $context->msg( 'invalidtitle-unknownnamespace', $namespace, $title )->text();
+               }
+       }
+
        /**
         * @param $title Title
         * @return Title
index 4717d83..d6fd4fb 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * See docs/deferred.txt
+ * Updater for link tracking tables after a page edit.
  *
  * 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
+ */
+
+/**
+ * See docs/deferred.txt
+ *
  * @todo document (e.g. one-sentence top-level class description).
  */
 class LinksUpdate extends SecondaryDBDataUpdate {
@@ -876,4 +882,4 @@ class LinksDeletionUpdate extends SecondaryDBDataUpdate {
                                      __METHOD__ );
                }
        }
-}
\ No newline at end of file
+}
index a50bf0d..9ce26d0 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Cache of the contents of localisation files.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 define( 'MW_LC_VERSION', 2 );
 
index 0113f91..36fcc30 100644 (file)
@@ -1,6 +1,7 @@
 <?php
-
 /**
+ * Helper methods to call functions and instance objects.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -16,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  */
 
 class MWFunction {
index 131ae1d..ba38f37 100644 (file)
@@ -1,8 +1,23 @@
 <?php
 /**
- * File for magic words
+ * File for magic words.
  *
- * See docs/magicword.txt
+ * See docs/magicword.txt.
+ *
+ * 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 Parser
index 96ce7a9..3a87a00 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Fetching and processing of interface messages.
+ *
+ * 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
+ */
+
 /**
  * The Message class provides methods which fullfil two basic services:
  *  - fetching interface messages
  * @see https://www.mediawiki.org/wiki/Localisation
  *
  * @since 1.17
- * @author Niklas Laxström
  */
 class Message {
        /**
index be6b27c..23955ae 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource message blobs storage used by the resource loader.
+ *
  * 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
@@ -15,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @author Roan Kattouw
  * @author Trevor Parscal
  */
index e5e3296..229856d 100644 (file)
@@ -1,21 +1,23 @@
 <?php
 /**
+ * Base code to format metadata.
  *
  * Copyright 2004, Evan Prodromou <evan@wikitravel.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 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.
+ * 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
+ * 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
  *
  * @author Evan Prodromou <evan@wikitravel.org>
  * @file
index b91af61..1873e7b 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Module defining helper functions for detecting and dealing with mime types.
  *
+ * 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
  */
 
@@ -123,7 +138,7 @@ END_STRING
  * Implements functions related to mime types such as detection and mapping to
  * file extension.
  *
- * Instances of this class are stateles, there only needs to be one global instance
+ * Instances of this class are stateless, there only needs to be one global instance
  * of MimeMagic. Please use MimeMagic::singleton() to get that instance.
  */
 class MimeMagic {
@@ -215,8 +230,6 @@ class MimeMagic {
                                continue;
                        }
 
-                       #print "processing MIME line $s<br>";
-
                        $mime = substr( $s, 0, $i );
                        $ext = trim( substr($s, $i+1 ) );
 
index a7b00f3..7eba2fe 100644 (file)
@@ -1,6 +1,22 @@
 <?php
 /**
- * Provide things related to namespaces
+ * Provide things related to namespaces.
+ *
+ * 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
  */
 
@@ -14,7 +30,6 @@
  * Users and translators should not change them
  *
  */
-
 class MWNamespace {
 
        /**
@@ -356,4 +371,16 @@ class MWNamespace {
                return $index == NS_USER || $index == NS_USER_TALK;
        }
 
+       /**
+        * It is not possible to use pages from this namespace as template?
+        *
+        * @since 1.20
+        * @param $index int Index to check
+        * @return bool
+        */
+       public static function isNonincludable( $index ) {
+               global $wgNonincludableNamespaces;
+               return $wgNonincludableNamespaces && in_array( $index, $wgNonincludableNamespaces );
+       }
+
 }
index 747140a..46a43f6 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Functions to be used with PHP's output buffer
+ * Functions to be used with PHP's output buffer.
+ *
+ * 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 bdf2223..b1bd14a 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Preparation for the final page rendering.
+ *
+ * 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' ) ) {
        die( 1 );
 }
@@ -2584,10 +2605,14 @@ $templates
                        // Inline empty modules: since they're empty, just mark them as 'ready'
                        if ( count( $emptyModules ) > 0 && $only !== ResourceLoaderModule::TYPE_STYLES ) {
                                // If we're only getting the styles, we don't need to do anything for empty modules.
-                               $links .= Html::inlineScript(\r
-                                               ResourceLoader::makeLoaderConditionalScript(\r
-                                                               ResourceLoader::makeLoaderStateScript( $emptyModules )\r
-                                               )\r
+                               $links .= Html::inlineScript(
+
+                                               ResourceLoader::makeLoaderConditionalScript(
+
+                                                               ResourceLoader::makeLoaderStateScript( $emptyModules )
+
+                                               )
+
                                ) . "\n";
                        }
 
index ec6490a..dad71f8 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Display something vaguely comprehensible in the event of a totally unrecoverable error.
+ *
+ * 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
+ */
+
 /**
  * Display something vaguely comprehensible in the event of a totally unrecoverable error.
  * Does not assume access to *anything*; no globals, no autloader, no database, no localisation.
@@ -17,9 +38,9 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ){
-       $mwVersion = '1.19';
+       $mwVersion = '1.20';
        $phpVersion = PHP_VERSION;
-       $message = "MediaWiki $mwVersion requires at least PHP version 5.2.3, you are using PHP $phpVersion.";
+       $message = "MediaWiki $mwVersion requires at least PHP version 5.3.2, you are using PHP $phpVersion.";
        if( $type == 'index.php' ) {
                $encLogo = htmlspecialchars(
                        str_replace( '//', '/', pathinfo( $_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME ) . '/'
index dc5e971..01a2439 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Variant of QueryPage which formats the result as a simple link to the page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
 
 /**
  * Variant of QueryPage which formats the result as a simple link to the page
@@ -16,11 +37,15 @@ abstract class PageQueryPage extends QueryPage {
         */
        public function formatResult( $skin, $row ) {
                global $wgContLang;
+
                $title = Title::makeTitleSafe( $row->namespace, $row->title );
-               $text = $row->title;
+
                if ( $title instanceof Title ) {
                        $text = $wgContLang->convert( $title->getPrefixedText() );
+                       return Linker::linkKnown( $title, htmlspecialchars( $text ) );
+               } else {
+                       return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                               Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
                }
-               return Linker::linkKnown( $title, htmlspecialchars( $text ) );
        }
 }
index 472cb48..f0f1876 100644 (file)
@@ -1,11 +1,30 @@
 <?php
 /**
- * @defgroup Pager Pager
+ * Efficient paging for SQL queries.
+ *
+ * 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 Pager
  */
 
+/**
+ * @defgroup Pager Pager
+ */
+
 /**
  * Basic pager interface.
  * @ingroup Pager
index a80e04b..2dbc7ec 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Parser to extract query parameters out of REQUEST_URI paths.
+ *
+ * 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
+ */
+
 /**
  * PathRouter class.
  * This class can take patterns such as /wiki/$1 and use them to
index 4edcb06..452dbc5 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Provides of semaphore semantics for restricting the number
+ * of workers that may be concurrently performing the same task.
+ *
+ * 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
+ */
 
 /**
  *  When you have many workers (threads/servers) giving service, and a
index f54d732..9ec3b64 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Form to edit user perferences.
+ *
+ * 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
+ */
+
 /**
  * We're now using the HTMLForm object with some customisation to generate the
  * Preferences form. This object handles generic submission, CSRF protection,
@@ -24,7 +45,6 @@
  * Once fields have been retrieved and validated, submission logic is handed
  * over to the tryUISubmit static method of this class.
  */
-
 class Preferences {
        static $defaultPreferences = null;
        static $saveFilters = array(
index 0efe1bd..5d4b35c 100644 (file)
@@ -1,11 +1,31 @@
 <?php
 /**
- * PrefixSearch - Handles searching prefixes of titles and finding any page
+ * Prefix search of page names.
+ *
+ * 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
+ */
+
+/**
+ * Handles searching prefixes of titles and finding any page
  * names that match. Used largely by the OpenSearch implementation.
  *
  * @ingroup Search
  */
-
 class PrefixSearch {
        /**
         * Do a prefix search of titles and return a list of matching page names.
index aa4ce44..349789f 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Functions for dealing with proxies
+ * Functions for dealing with proxies.
+ *
+ * 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 151cc76..f28aeee 100644 (file)
@@ -1,6 +1,22 @@
 <?php
 /**
- * Contain a class for special pages
+ * Base code for "query" special pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup SpecialPage
  */
@@ -671,7 +687,7 @@ abstract class QueryPage extends SpecialPage {
                if ( !isset( $row->title ) ) {
                        return null;
                }
-               $title = Title::MakeTitle( intval( $row->namespace ), $row->title );
+               $title = Title::makeTitle( intval( $row->namespace ), $row->title );
                if ( $title ) {
                        $date = isset( $row->timestamp ) ? $row->timestamp : '';
                        $comments = '';
index e57efae..cd8a1b5 100644 (file)
@@ -1,5 +1,25 @@
 <?php
-
+/**
+ * Utility class for creating and accessing recent change entries.
+ *
+ * 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
+ */
 /**
  * Utility class for creating new RC entries
  *
@@ -658,7 +678,9 @@ class RecentChange {
                        $wgCanonicalServer, $wgScript;
 
                if( $this->mAttribs['rc_type'] == RC_LOG ) {
-                       $titleObj = SpecialPage::getTitleFor( 'Log', $this->mAttribs['rc_log_type'] );
+                       // Don't use SpecialPage::getTitleFor, backwards compatibility with
+                       // IRC API which expects "Log".
+                       $titleObj = Title::newFromText( 'Log/' . $this->mAttribs['rc_log_type'], NS_SPECIAL );
                } else {
                        $titleObj =& $this->getTitle();
                }
index 86ac22f..53b792e 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Representation of a page version.
+ *
+ * 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
+ */
 
 /**
  * @todo document
index a61120e..488ef52 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Holders of revision list for a single page
+ *
+ * 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
+ */
+
 /**
  * List for revision table items for a single page
  */
index a2459c4..8cd5a37 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * XHTML sanitizer for MediaWiki
+ * XHTML sanitizer for %MediaWiki.
  *
  * Copyright © 2002-2005 Brion Vibber <brion@pobox.com> et al
  * http://www.mediawiki.org/
index 97c6bbf..359b20b 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Expansion of the PHP execution time limit feature for a function call.
+ *
+ * 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 to expand PHP execution time for a function call.
index 34d829c..7b98568 100644 (file)
@@ -1,9 +1,28 @@
 <?php
 /**
  * Dynamically change configuration variables based on the test suite name and a cookie value.
+ *
  * For details on how to configure a wiki for a Selenium test, see:
  * http://www.mediawiki.org/wiki/SeleniumFramework#Test_Wiki_configuration
+ *
+ * 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' ) ) {
        die( 1 );
 }
index 68a715f..335d37b 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Include most things that's need to customize the site
+ * Include most things that's need to customize the site.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  */
index bd5e4d8..ff5548e 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Configuration holder, particularly for multi-wiki sites.
+ *
+ * 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
+ */
+
 /**
  * This is a class used to hold configuration settings, particularly for multi-wiki sites.
  */
index abb1130..10aed9c 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Accessors and mutators for the site-wide statistics.
+ *
+ * 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
+ */
 
 /**
  * Static accessor class for site_stats and related things
@@ -223,53 +243,91 @@ class SiteStats {
  * Class for handling updates to the site_stats table
  */
 class SiteStatsUpdate implements DeferrableUpdate {
-
-       var $mViews, $mEdits, $mGood, $mPages, $mUsers;
-
+       protected $views = 0;
+       protected $edits = 0;
+       protected $pages = 0;
+       protected $articles = 0;
+       protected $users = 0;
+       protected $images = 0;
+
+       // @TODO: deprecate this constructor
        function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
-               $this->mViews = $views;
-               $this->mEdits = $edits;
-               $this->mGood = $good;
-               $this->mPages = $pages;
-               $this->mUsers = $users;
+               $this->views = $views;
+               $this->edits = $edits;
+               $this->articles = $good;
+               $this->pages = $pages;
+               $this->users = $users;
        }
 
        /**
-        * @param $sql
-        * @param $field
-        * @param $delta
+        * @param $deltas Array
+        * @return SiteStatsUpdate
         */
-       function appendUpdate( &$sql, $field, $delta ) {
-               if ( $delta ) {
-                       if ( $sql ) {
-                               $sql .= ',';
-                       }
-                       if ( $delta < 0 ) {
-                               $sql .= "$field=$field-1";
-                       } else {
-                               $sql .= "$field=$field+1";
+       public static function factory( array $deltas ) {
+               $update = new self( 0, 0, 0 );
+
+               $fields = array( 'views', 'edits', 'pages', 'articles', 'users', 'images' );
+               foreach ( $fields as $field ) {
+                       if ( isset( $deltas[$field] ) && $deltas[$field] ) {
+                               $update->$field = $deltas[$field];
                        }
                }
+
+               return $update;
        }
 
-       function doUpdate() {
-               $dbw = wfGetDB( DB_MASTER );
+       public function doUpdate() {
+               global $wgSiteStatsAsyncFactor;
+
+               $rate = $wgSiteStatsAsyncFactor; // convenience
+               // If set to do so, only do actual DB updates 1 every $rate times.
+               // The other times, just update "pending delta" values in memcached.
+               if ( $rate && ( $rate < 0 || mt_rand( 0, $rate - 1 ) != 0 ) ) {
+                       $this->doUpdatePendingDeltas();
+               } else {
+                       $dbw = wfGetDB( DB_MASTER );
+
+                       $lockKey = wfMemcKey( 'site_stats' ); // prepend wiki ID
+                       if ( $rate ) {
+                               // Lock the table so we don't have double DB/memcached updates
+                               if ( !$dbw->lockIsFree( $lockKey, __METHOD__ )
+                                       || !$dbw->lock( $lockKey, __METHOD__, 1 ) // 1 sec timeout
+                               ) {
+                                       $this->doUpdatePendingDeltas();
+                                       return;
+                               }
+                               $pd = $this->getPendingDeltas();
+                               // Piggy-back the async deltas onto those of this stats update....
+                               $this->views    += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
+                               $this->edits    += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
+                               $this->articles += ( $pd['ss_good_articles']['+'] - $pd['ss_good_articles']['-'] );
+                               $this->pages    += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
+                               $this->users    += ( $pd['ss_users']['+'] - $pd['ss_users']['-'] );
+                               $this->images   += ( $pd['ss_images']['+'] - $pd['ss_images']['-'] );
+                       }
 
-               $updates = '';
+                       // Need a separate transaction because this a global lock
+                       $dbw->begin( __METHOD__ );
 
-               $this->appendUpdate( $updates, 'ss_total_views', $this->mViews );
-               $this->appendUpdate( $updates, 'ss_total_edits', $this->mEdits );
-               $this->appendUpdate( $updates, 'ss_good_articles', $this->mGood );
-               $this->appendUpdate( $updates, 'ss_total_pages', $this->mPages );
-               $this->appendUpdate( $updates, 'ss_users', $this->mUsers );
+                       // Build up an SQL query of deltas and apply them...
+                       $updates = '';
+                       $this->appendUpdate( $updates, 'ss_total_views', $this->views );
+                       $this->appendUpdate( $updates, 'ss_total_edits', $this->edits );
+                       $this->appendUpdate( $updates, 'ss_good_articles', $this->articles );
+                       $this->appendUpdate( $updates, 'ss_total_pages', $this->pages );
+                       $this->appendUpdate( $updates, 'ss_users', $this->users );
+                       $this->appendUpdate( $updates, 'ss_images', $this->images );
+                       if ( $updates != '' ) {
+                               $dbw->update( 'site_stats', array( $updates ), array(), __METHOD__ );
+                       }
 
-               if ( $updates ) {
-                       $site_stats = $dbw->tableName( 'site_stats' );
-                       $sql = "UPDATE $site_stats SET $updates";
+                       if ( $rate ) {
+                               // Decrement the async deltas now that we applied them
+                               $this->removePendingDeltas( $pd );
+                               // Commit the updates and unlock the table
+                               $dbw->unlock( $lockKey, __METHOD__ );
+                       }
 
-                       # Need a separate transaction because this a global lock
-                       $dbw->begin( __METHOD__ );
-                       $dbw->query( $sql, __METHOD__ );
                        $dbw->commit( __METHOD__ );
                }
        }
@@ -302,6 +360,102 @@ class SiteStatsUpdate implements DeferrableUpdate {
                );
                return $activeUsers;
        }
+
+       protected function doUpdatePendingDeltas() {
+               $this->adjustPending( 'ss_total_views', $this->views );
+               $this->adjustPending( 'ss_total_edits', $this->edits );
+               $this->adjustPending( 'ss_good_articles', $this->articles );
+               $this->adjustPending( 'ss_total_pages', $this->pages );
+               $this->adjustPending( 'ss_users', $this->users );
+               $this->adjustPending( 'ss_images', $this->images );
+       }
+
+       /**
+        * @param $sql string
+        * @param $field string
+        * @param $delta integer
+        */
+       protected function appendUpdate( &$sql, $field, $delta ) {
+               if ( $delta ) {
+                       if ( $sql ) {
+                               $sql .= ',';
+                       }
+                       if ( $delta < 0 ) {
+                               $sql .= "$field=$field-" . abs( $delta );
+                       } else {
+                               $sql .= "$field=$field+" . abs( $delta );
+                       }
+               }
+       }
+
+       /**
+        * @param $type string
+        * @param $sign string ('+' or '-')
+        * @return void
+        */
+       private function getTypeCacheKey( $type, $sign ) {
+               return wfMemcKey( 'sitestatsupdate', 'pendingdelta', $type, $sign );
+       }
+
+       /**
+        * Adjust the pending deltas for a stat type.
+        * Each stat type has two pending counters, one for increments and decrements
+        * @param $type string
+        * @param $delta integer Delta (positive or negative)
+        * @return void
+        */
+       protected function adjustPending( $type, $delta ) {
+               global $wgMemc;
+
+               if ( $delta < 0 ) { // decrement
+                       $key = $this->getTypeCacheKey( $type, '-' );
+               } else { // increment
+                       $key = $this->getTypeCacheKey( $type, '+' );
+               }
+
+               $magnitude = abs( $delta );
+               if ( !$wgMemc->incr( $key, $magnitude ) ) { // not there?
+                       if ( !$wgMemc->add( $key, $magnitude ) ) { // race?
+                               $wgMemc->incr( $key, $magnitude );
+                       }
+               }
+       }
+
+       /**
+        * Get pending delta counters for each stat type
+        * @return Array Positive and negative deltas for each type
+        * @return void
+        */
+       protected function getPendingDeltas() {
+               global $wgMemc;
+
+               $pending = array();
+               foreach ( array( 'ss_total_views', 'ss_total_edits',
+                       'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type )
+               {
+                       // Get pending increments and pending decrements
+                       $pending[$type]['+'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '+' ) );
+                       $pending[$type]['-'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '-' ) );
+               }
+
+               return $pending;
+       }
+
+       /**
+        * Reduce pending delta counters after updates have been applied
+        * @param Array Result of getPendingDeltas(), used for DB update
+        * @return void
+        */
+       protected function removePendingDeltas( array $pd ) {
+               global $wgMemc;
+
+               foreach ( $pd as $type => $deltas ) {
+                       foreach ( $deltas as $sign => $magnitude ) {
+                               // Lower the pending counter now that we applied these changes
+                               $wgMemc->decr( $this->getTypeCacheKey( $type, $sign ), $magnitude );
+                       }
+               }
+       }
 }
 
 /**
index f40de4c..677664a 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Base class for all skins.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
 /**
  * @defgroup Skins Skins
  */
index 480f3eb..1deaf89 100644 (file)
@@ -1,6 +1,23 @@
 <?php
 /**
- * @defgroup Skins Skins
+ * Base class for legacy skins.
+ *
+ * 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' ) ) {
index 702ca7e..9807237 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Base class for template-based skins
+ * Base class for template-based skins.
  *
  * 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
index b529f86..7a6c0be 100644 (file)
@@ -1,25 +1,24 @@
 <?php
 /**
- * SpecialPage: handling special pages and lists thereof.
+ * Parent class for all special pages.
  *
- * To add a special page in an extension, add to $wgSpecialPages either
- * an object instance or an array containing the name and constructor
- * parameters. The latter is preferred for performance reasons.
+ * 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.
  *
- * The object instantiated must be either an instance of SpecialPage or a
- * sub-class thereof. It must have an execute() method, which sends the HTML
- * for the special page to $wgOut. The parent class has an execute() method
- * which distributes the call to the historical global functions. Additionally,
- * execute() also checks if the user has the necessary access privileges
- * and bails out if not.
+ * 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.
  *
- * To add a core special page, use the similar static list in
- * SpecialPage::$mList. To remove a core static special page at runtime, use
- * a SpecialPage_initList hook.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup SpecialPage
- * @defgroup SpecialPage SpecialPage
  */
 
 /**
index 6610451..02b8d54 100644 (file)
@@ -1,6 +1,29 @@
 <?php
 /**
- * SpecialPage: handling special pages and lists thereof.
+ * Factory for handling the special page list and generating SpecialPage objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @defgroup SpecialPage SpecialPage
+ */
+
+/**
+ * Factory for handling the special page list and generating SpecialPage objects.
  *
  * To add a special page in an extension, add to $wgSpecialPages either
  * an object instance or an array containing the name and constructor
  * SpecialPage::$mList. To remove a core static special page at runtime, use
  * a SpecialPage_initList hook.
  *
- * @file
- * @ingroup SpecialPage
- * @defgroup SpecialPage SpecialPage
- */
-
-/**
- * Factory for handling the special page list and generating SpecialPage objects
  * @ingroup SpecialPage
  * @since 1.17
  */
index b0418ba..7cd2b03 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Squid and Varnish cache purging.
+ *
+ * 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
+ */
+
 /**
  * An HTTP 1.0 client built for the purposes of purging Squid and Varnish. 
  * Uses asynchronous I/O, allowing purges to be done in a highly parallel 
index 835b2ed..a2df380 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Generic operation result.
+ *
+ * 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
+ */
 
 /**
  * Generic operation result class
index dd527b2..6539e08 100644 (file)
@@ -1,9 +1,28 @@
 <?php
 /**
- * Functions related to the output of file content
+ * Functions related to the output of file content.
+ *
+ * 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
  */
+
+/**
+ * Functions related to the output of file content
+ */
 class StreamFile {
        const READY_STREAM = 1;
        const NOT_MODIFIED = 2;
index 582c6cd..3b500ae 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Methods to play with strings.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
 /**
  * A collection of static methods to play with strings.
  */
index 795b5d6..615bcb5 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Delayed loading of global objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * Class to implement stub globals, which are globals that delay loading the
index 7772fad..3ab0fca 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Representation a title within %MediaWiki.
+ *
  * See title.txt
  *
  * This program is free software; you can redistribute it and/or modify
@@ -84,6 +86,7 @@ class Title {
        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
        // @}
 
 
@@ -120,7 +123,8 @@ class Title {
         *   fied by a prefix.  If you want to force a specific namespace even if
         *   $text might begin with a namespace prefix, use makeTitle() or
         *   makeTitleSafe().
-        * @return Title, or null on an error.
+        * @throws MWException
+        * @return Title|null - Title or null on an error.
         */
        public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
                if ( is_object( $text ) ) {
@@ -180,13 +184,12 @@ class Title {
         * @return Title the new object, or NULL on an error
         */
        public static function newFromURL( $url ) {
-               global $wgLegalTitleChars;
                $t = new Title();
 
                # For compatibility with old buggy URLs. "+" is usually not valid in titles,
                # but some URLs used it as a space replacement and they still come
                # from some external search tools.
-               if ( strpos( $wgLegalTitleChars, '+' ) === false ) {
+               if ( strpos( self::legalChars(), '+' ) === false ) {
                        $url = str_replace( '+', ' ', $url );
                }
 
@@ -889,6 +892,7 @@ class Title {
         * This is MUCH simpler than individually testing for equivilance
         * against both NS_USER and NS_USER_TALK, and is also forward compatible.
         * @since 1.19
+        * @param $ns int
         * @return bool
         */
        public function hasSubjectNamespace( $ns ) {
@@ -1266,6 +1270,8 @@ class Title {
         * andthe wfArrayToCGI moved to getLocalURL();
         *
         * @since 1.19 (r105919)
+        * @param $query
+        * @param $query2 bool
         * @return String
         */
        private static function fixUrlQueryArgs( $query, $query2 = false ) {
@@ -1448,6 +1454,8 @@ class Title {
         * See getLocalURL for the arguments.
         *
         * @see self::getLocalURL
+        * @param $query string
+        * @param $query2 bool|string
         * @return String the URL
         */
        public function escapeLocalURL( $query = '', $query2 = false ) {
@@ -2512,8 +2520,9 @@ class Title {
        /**
         * Get the expiry time for the restriction against a given action
         *
+        * @param $action
         * @return String|Bool 14-char timestamp, or 'infinity' if the page is protected forever
-        *      or not protected at all, or false if the action is not recognised.
+        *     or not protected at all, or false if the action is not recognised.
         */
        public function getRestrictionExpiry( $action ) {
                if ( !$this->mRestrictionsLoaded ) {
@@ -3955,7 +3964,7 @@ class Title {
         */
        public function getPreviousRevisionID( $revId, $flags = 0 ) {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
-               return $db->selectField( 'revision', 'rev_id',
+               $revId = $db->selectField( 'revision', 'rev_id',
                        array(
                                'rev_page' => $this->getArticleID( $flags ),
                                'rev_id < ' . intval( $revId )
@@ -3963,6 +3972,12 @@ class Title {
                        __METHOD__,
                        array( 'ORDER BY' => 'rev_id DESC' )
                );
+
+               if ( $revId === false ) {
+                       return false;
+               } else {
+                       return intval( $revId );
+               }
        }
 
        /**
@@ -3974,7 +3989,7 @@ class Title {
         */
        public function getNextRevisionID( $revId, $flags = 0 ) {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
-               return $db->selectField( 'revision', 'rev_id',
+               $revId = $db->selectField( 'revision', 'rev_id',
                        array(
                                'rev_page' => $this->getArticleID( $flags ),
                                'rev_id > ' . intval( $revId )
@@ -3982,6 +3997,12 @@ class Title {
                        __METHOD__,
                        array( 'ORDER BY' => 'rev_id' )
                );
+
+               if ( $revId === false ) {
+                       return false;
+               } else {
+                       return intval( $revId );
+               }
        }
 
        /**
@@ -4354,9 +4375,10 @@ class Title {
                $dbr = wfGetDB( DB_SLAVE );
                $this->mNotificationTimestamp[$uid] = $dbr->selectField( 'watchlist',
                        'wl_notificationtimestamp',
-                       array( 'wl_namespace' => $this->getNamespace(),
+                       array(
+                               'wl_user' => $user->getId(),
+                               'wl_namespace' => $this->getNamespace(),
                                'wl_title' => $this->getDBkey(),
-                               'wl_user' => $user->getId()
                        ),
                        __METHOD__
                );
@@ -4511,7 +4533,7 @@ class Title {
         * $wgLang (such as special pages, which are in the user language).
         *
         * @since 1.18
-        * @return object Language
+        * @return Language
         */
        public function getPageLanguage() {
                global $wgLang;
index 9696008..5cdec16 100644 (file)
@@ -1,8 +1,27 @@
 <?php
 /**
+ * Classes to walk into a list of Title objects.
+ *
  * Note: this entire file is a byte-for-byte copy of UserArray.php with
  * s/User/Title/.  If anyone can figure out how to do this nicely with inheri-
  * tance or something, please do so.
+ *
+ * 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 d3332fd..cb146b5 100644 (file)
@@ -1283,7 +1283,7 @@ class User {
                }
 
                # User/IP blocking
-               $block = Block::newFromTarget( $this->getName(), $ip, !$bFromSlave );
+               $block = Block::newFromTarget( $this, $ip, !$bFromSlave );
 
                # Proxy blocking
                if ( !$block instanceof Block && $ip !== null && !$this->isAllowed( 'proxyunbannable' )
@@ -2281,7 +2281,10 @@ class User {
         * Reset all options to the site defaults
         */
        public function resetOptions() {
+               $this->load();
+
                $this->mOptions = self::getDefaultOptions();
+               $this->mOptionsLoaded = true;
        }
 
        /**
@@ -3362,7 +3365,7 @@ class User {
         * @return String New token URL
         */
        private function invalidationTokenUrl( $token ) {
-               return $this->getTokenUrl( 'Invalidateemail', $token );
+               return $this->getTokenUrl( 'InvalidateEmail', $token );
        }
 
        /**
index c5ba0b2..3b8f5c1 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Classes to walk into a list of User objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 abstract class UserArray implements Iterator {
        /**
index e0b8d01..36da6fb 100644 (file)
@@ -436,9 +436,9 @@ class EmailNotification {
                        $res = $dbw->select( array( 'watchlist' ),
                                array( 'wl_user' ),
                                array(
-                                       'wl_title' => $title->getDBkey(),
-                                       'wl_namespace' => $title->getNamespace(),
                                        'wl_user != ' . intval( $editor->getID() ),
+                                       'wl_namespace' => $title->getNamespace(),
+                                       'wl_title' => $title->getDBkey(),
                                        'wl_notificationtimestamp IS NULL',
                                ), __METHOD__
                        );
@@ -453,9 +453,9 @@ class EmailNotification {
                                        array( /* SET */
                                                'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
                                        ), array( /* WHERE */
-                                               'wl_title' => $title->getDBkey(),
+                                               'wl_user' => $watchers,
                                                'wl_namespace' => $title->getNamespace(),
-                                               'wl_user' => $watchers
+                                               'wl_title' => $title->getDBkey(),
                                        ), __METHOD__
                                );
                                $dbw->commit( __METHOD__ );
index c61ca84..26ac3dc 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Representation of an user on a other locally-hosted wiki.
+ *
+ * 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
+ */
 
 /**
  * Cut-down copy of User interface for local-interwiki-database
index ecff5b5..932af16 100644 (file)
@@ -1,10 +1,29 @@
 <?php
 /**
+ * Accessor and mutator for watchlist entries.
+ *
+ * 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 Watchlist
  */
 
 /**
+ * Representation of a pair of user and title for watchlist entries.
+ *
  * @ingroup Watchlist
  */
 class WatchedItem {
index 01938cd..d382001 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Special handling for category pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
 /**
  * Special handling for category pages
  */
index 52d8e6d..9fb1522 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Special handling for file pages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
 /**
  * Special handling for file pages
  *
index 91e91f9..1190172 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Tools for dealing with other locally-hosted wikis.
+ *
+ * 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
+ */
 
 /**
  * Helper tools for dealing with other locally-hosted wikis
index b86cdb2..da62b9c 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Base representation for a MediaWiki page.
+ *
+ * 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
+ */
+
 /**
  * Abstract class for type hinting (accepts WikiPage, Article, ImagePage, CategoryPage)
  */
@@ -37,6 +58,28 @@ class WikiPage extends Page {
         */
        const DELETE_NO_REVISIONS = 2;
 
+       // Constants for $mDataLoadedFrom and related
+
+       /**
+        * Data has not been loaded yet (or the object was cleared)
+        */
+       const DATA_NOT_LOADED = 0;
+
+       /**
+        * Data has been loaded from a slave database
+        */
+       const DATA_FROM_SLAVE = 1;
+
+       /**
+        * Data has been loaded from the master database
+        */
+       const DATA_FROM_MASTER = 2;
+
+       /**
+        * Data has been loaded from the master database using FOR UPDATE
+        */
+       const DATA_FOR_UPDATE = 3;
+
        /**
         * @var Title
         */
@@ -51,6 +94,11 @@ class WikiPage extends Page {
        public $mPreparedEdit = false;       // !< Array
        /**@}}*/
 
+       /**
+        * @var int; one of the DATA_* constants
+        */
+       protected $mDataLoadedFrom = self::DATA_NOT_LOADED;
+
        /**
         * @var Title
         */
@@ -117,16 +165,20 @@ class WikiPage extends Page {
         * Constructor from a page id
         *
         * @param $id Int article ID to load
+        * @param $from string|int one of the following values:
+        *        - "fromdb" or self::DATA_FROM_SLAVE to select from a slave database
+        *        - "fromdbmaster" or self::DATA_FROM_MASTER to select from the master database
         *
         * @return WikiPage|null
         */
-       public static function newFromID( $id ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow( 'page', self::selectFields(), array( 'page_id' => $id ), __METHOD__ );
+       public static function newFromID( $id, $from = 'fromdb' ) {
+               $from = self::convertSelectType( $from );
+               $db = wfGetDB( $from === self::DATA_FROM_MASTER ? DB_MASTER : DB_SLAVE );
+               $row = $db->selectRow( 'page', self::selectFields(), array( 'page_id' => $id ), __METHOD__ );
                if ( !$row ) {
                        return null;
                }
-               return self::newFromRow( $row );
+               return self::newFromRow( $row, $from );
        }
 
        /**
@@ -135,14 +187,38 @@ class WikiPage extends Page {
         * @since 1.20
         * @param $row object: database row containing at least fields returned
         *        by selectFields().
+        * @param $from string|int: source of $data:
+        *        - "fromdb" or self::DATA_FROM_SLAVE: from a slave DB
+        *        - "fromdbmaster" or self::DATA_FROM_MASTER: from the master DB
+        *        - "forupdate" or self::DATA_FOR_UPDATE: from the master DB using SELECT FOR UPDATE
         * @return WikiPage
         */
-       public static function newFromRow( $row ) {
+       public static function newFromRow( $row, $from = 'fromdb' ) {
                $page = self::factory( Title::newFromRow( $row ) );
-               $page->loadFromRow( $row );
+               $page->loadFromRow( $row, $from );
                return $page;
        }
 
+       /**
+        * Convert 'fromdb', 'fromdbmaster' and 'forupdate' to DATA_* constants.
+        *
+        * @param $type object|string|int
+        * @return mixed
+        */
+       private static function convertSelectType( $type ) {
+               switch ( $type ) {
+               case 'fromdb':
+                       return self::DATA_FROM_SLAVE;
+               case 'fromdbmaster':
+                       return self::DATA_FROM_MASTER;
+               case 'forupdate':
+                       return self::DATA_FOR_UPDATE;
+               default:
+                       // It may already be an integer or whatever else
+                       return $type;
+               }
+       }
+
        /**
         * Returns overrides for action handlers.
         * Classes listed here will be used instead of the default one when
@@ -184,6 +260,7 @@ class WikiPage extends Page {
         */
        public function clear() {
                $this->mDataLoaded = false;
+               $this->mDataLoadedFrom = self::DATA_NOT_LOADED;
 
                $this->mCounter = null;
                $this->mRedirectTarget = null; # Title object if set
@@ -229,14 +306,15 @@ class WikiPage extends Page {
         * Fetch a page record with the given conditions
         * @param $dbr DatabaseBase object
         * @param $conditions Array
+        * @param $options Array
         * @return mixed Database result resource, or false on failure
         */
-       protected function pageData( $dbr, $conditions ) {
+       protected function pageData( $dbr, $conditions, $options = array() ) {
                $fields = self::selectFields();
 
                wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) );
 
-               $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__ );
+               $row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__, $options );
 
                wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) );
 
@@ -249,12 +327,13 @@ class WikiPage extends Page {
         *
         * @param $dbr DatabaseBase object
         * @param $title Title object
+        * @param $options Array
         * @return mixed Database result resource, or false on failure
         */
-       public function pageDataFromTitle( $dbr, $title ) {
+       public function pageDataFromTitle( $dbr, $title, $options = array() ) {
                return $this->pageData( $dbr, array(
                        'page_namespace' => $title->getNamespace(),
-                       'page_title'     => $title->getDBkey() ) );
+                       'page_title'     => $title->getDBkey() ), $options );
        }
 
        /**
@@ -262,38 +341,54 @@ class WikiPage extends Page {
         *
         * @param $dbr DatabaseBase
         * @param $id Integer
+        * @param $options Array
         * @return mixed Database result resource, or false on failure
         */
-       public function pageDataFromId( $dbr, $id ) {
-               return $this->pageData( $dbr, array( 'page_id' => $id ) );
+       public function pageDataFromId( $dbr, $id, $options = array() ) {
+               return $this->pageData( $dbr, array( 'page_id' => $id ), $options );
        }
 
        /**
         * Set the general counter, title etc data loaded from
         * some source.
         *
-        * @param $data Object|String One of the following:
-        *              A DB query result object or...
-        *              "fromdb" to get from a slave DB or...
-        *              "fromdbmaster" to get from the master DB
+        * @param $from object|string|int One of the following:
+        *        - A DB query result object
+        *        - "fromdb" or self::DATA_FROM_SLAVE to get from a slave DB
+        *        - "fromdbmaster" or self::DATA_FROM_MASTER to get from the master DB
+        *        - "forupdate"  or self::DATA_FOR_UPDATE to get from the master DB using SELECT FOR UPDATE
+        *
         * @return void
         */
-       public function loadPageData( $data = 'fromdb' ) {
-               if ( $data === 'fromdbmaster' ) {
+       public function loadPageData( $from = 'fromdb' ) {
+               $from = self::convertSelectType( $from );
+               if ( is_int( $from ) && $from <= $this->mDataLoadedFrom ) {
+                       // We already have the data from the correct location, no need to load it twice.
+                       return;
+               }
+
+               if ( $from === self::DATA_FOR_UPDATE ) {
+                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle, array( 'FOR UPDATE' ) );
+               } elseif ( $from === self::DATA_FROM_MASTER ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-               } elseif ( $data === 'fromdb' ) { // slave
+               } elseif ( $from === self::DATA_FROM_SLAVE ) {
                        $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
                        # Use a "last rev inserted" timestamp key to dimish the issue of slave lag.
                        # Note that DB also stores the master position in the session and checks it.
                        $touched = $this->getCachedLastEditTime();
                        if ( $touched ) { // key set
                                if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
+                                       $from = self::DATA_FROM_MASTER;
                                        $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
                                }
                        }
+               } else {
+                       // No idea from where the caller got this data, assume slave database.
+                       $data = $from;
+                       $from = self::DATA_FROM_SLAVE;
                }
 
-               $this->loadFromRow( $data );
+               $this->loadFromRow( $data, $from );
        }
 
        /**
@@ -302,8 +397,13 @@ class WikiPage extends Page {
         * @since 1.20
         * @param $data object: database row containing at least fields returned
         *        by selectFields()
+        * @param $from string|int One of the following:
+        *        - "fromdb" or self::DATA_FROM_SLAVE if the data comes from a slave DB
+        *        - "fromdbmaster" or self::DATA_FROM_MASTER if the data comes from the master DB
+        *        - "forupdate"  or self::DATA_FOR_UPDATE if the data comes from from
+        *          the master DB using SELECT FOR UPDATE
         */
-       public function loadFromRow( $data ) {
+       public function loadFromRow( $data, $from ) {
                $lc = LinkCache::singleton();
 
                if ( $data ) {
@@ -325,6 +425,7 @@ class WikiPage extends Page {
                }
 
                $this->mDataLoaded = true;
+               $this->mDataLoadedFrom = self::convertSelectType( $from );
        }
 
        /**
@@ -438,6 +539,49 @@ class WikiPage extends Page {
                return (int)$this->mLatest;
        }
 
+       /**
+        * Get the Revision object of the oldest revision
+        * @return Revision|null
+        */
+       public function getOldestRevision() {
+               wfProfileIn( __METHOD__ );
+
+               // Try using the slave database first, then try the master
+               $continue = 2;
+               $db = wfGetDB( DB_SLAVE );
+               $revSelectFields = Revision::selectFields();
+
+               while ( $continue ) {
+                       $row = $db->selectRow(
+                               array( 'page', 'revision' ),
+                               $revSelectFields,
+                               array(
+                                       'page_namespace' => $this->mTitle->getNamespace(),
+                                       'page_title' => $this->mTitle->getDBkey(),
+                                       'rev_page = page_id'
+                               ),
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => 'rev_timestamp ASC'
+                               )
+                       );
+
+                       if ( $row ) {
+                               $continue = 0;
+                       } else {
+                               $db = wfGetDB( DB_MASTER );
+                               $continue--;
+                       }
+               }
+
+               wfProfileOut( __METHOD__ );
+               if ( $row ) {
+                       return Revision::newFromRow( $row );
+               } else {
+                       return null;
+               }
+       }
+
        /**
         * Loads everything except the text
         * This isn't necessary for all uses, so it's only done if needed.
@@ -566,6 +710,24 @@ class WikiPage extends Page {
                }
        }
 
+       /**
+        * 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::RAW              get the text regardless of permissions
+        * @return User|null
+        */
+       public function getCreator( $audience = Revision::FOR_PUBLIC ) {
+               $revision = $this->getOldestRevision();
+               if ( $revision ) {
+                       $userName = $revision->getUserText( $audience );
+                       return User::newFromName( $userName, false );
+               } else {
+                       return null;
+               }
+       }
+
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
@@ -1431,7 +1593,9 @@ class WikiPage extends Page {
                $user = is_null( $user ) ? $wgUser : $user;
                $status = Status::newGood( array() );
 
-               # Load $this->mTitle->getArticleID() and $this->mLatest if it's not already
+               // Load the data from the master database if needed.
+               // The caller may already loaded it from the master or even loaded it using
+               // SELECT FOR UPDATE, so do not override that using clear().
                $this->loadPageData( 'fromdbmaster' );
 
                $flags = $this->checkFlags( $flags );
@@ -1973,7 +2137,7 @@ class WikiPage extends Page {
         * @param &$cascade Integer. Set to false if cascading protection isn't allowed.
         * @param $expiry Array: per restriction type expiration
         * @param $user User The user updating the restrictions
-        * @return bool true on success
+        * @return Status
         */
        public function doUpdateRestrictions( array $limit, array $expiry, &$cascade, $reason, User $user ) {
                global $wgContLang;
@@ -2239,19 +2403,24 @@ class WikiPage extends Page {
                $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
        ) {
                global $wgUser, $wgContentHandlerUseDB;
-               $user = is_null( $user ) ? $wgUser : $user;
 
                wfDebug( __METHOD__ . "\n" );
 
+               if ( $this->mTitle->getDBkey() === '' ) {
+                       return WikiPage::DELETE_NO_PAGE;
+               }
+
+               $user = is_null( $user ) ? $wgUser : $user;
                if ( ! wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error ) ) ) {
                        return WikiPage::DELETE_HOOK_ABORTED;
                }
-               $dbw = wfGetDB( DB_MASTER );
-               $t = $this->mTitle->getDBkey();
-               $id = $id ? $id : $this->mTitle->getArticleID( Title::GAID_FOR_UPDATE );
 
-               if ( $t === '' || $id == 0 ) {
-                       return WikiPage::DELETE_NO_PAGE;
+               if ( $id == 0 ) {
+                       $this->loadPageData( 'forupdate' );
+                       $id = $this->getID();
+                       if ( $id == 0 ) {
+                               return WikiPage::DELETE_NO_PAGE;
+                       }
                }
 
                // Bitfields to further suppress the content
@@ -2266,6 +2435,7 @@ class WikiPage extends Page {
                        $bitfield = 'rev_deleted';
                }
 
+               $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
                // For now, shunt the revision data into the archive table.
                // Text is *not* removed from the text table; bulk storage
index 2e882ed..6e4bb3a 100644 (file)
@@ -1,9 +1,28 @@
 <?php
+/**
+ * Methods to generate XML.
+ *
+ * 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
+ */
 
 /**
  * Module of static functions for generating XML
  */
-
 class Xml {
        /**
         * Format an XML element with given attributes and, optionally, text content.
index be286f8..b95dd6a 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * XML syntax and type checker.
+ *
+ * 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 XmlTypeCheck {
        /**
index d3d7916..4299841 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Client for querying zhdaemon.
+ *
+ * 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
+ */
 
 /**
  * Client for querying zhdaemon
index 58bc98c..2a2d31e 100644 (file)
@@ -3273,8 +3273,8 @@ $zh2Hant = array(
 '于伟国' => '于偉國',
 '于偉國' => '于偉國',
 '于光新' => '于光新',
-'于光远' => '于光遠',
 '于光遠' => '于光遠',
+'于光远' => '于光遠',
 '于克-蘭多縣' => '于克-蘭多縣',
 '于克-兰多县' => '于克-蘭多縣',
 '于克勒' => '于克勒',
@@ -3444,8 +3444,8 @@ $zh2Hant = array(
 '于风政' => '于風政',
 '于風政' => '于風政',
 '于飞' => '于飛',
-'于飛島' => '于飛島',
 '于飞岛' => '于飛島',
+'于飛島' => '于飛島',
 '于余曲折' => '于餘曲折',
 '于鬯' => '于鬯',
 '于魁智' => '于魁智',
@@ -6283,8 +6283,8 @@ $zh2Hant = array(
 '有只用' => '有只用',
 '有够赞' => '有夠讚',
 '有征伐' => '有征伐',
-'有征戰' => '有征戰',
 '有征战' => '有征戰',
+'有征戰' => '有征戰',
 '有征服' => '有征服',
 '有征讨' => '有征討',
 '有征討' => '有征討',
@@ -6610,6 +6610,8 @@ $zh2Hant = array(
 '浮松' => '浮鬆',
 '海上布雷' => '海上佈雷',
 '海干' => '海乾',
+'海淀山后' => '海淀山後',
+'海淀山後' => '海淀山後',
 '海湾布雷' => '海灣佈雷',
 '涂善妮' => '涂善妮',
 '涂坤' => '涂坤',
@@ -15595,8 +15597,8 @@ $zh2TW = array(
 '卡塔尔' => '卡達',
 '打印機' => '印表機',
 '打印机' => '印表機',
-'厄立特里亞' => '厄利垂亞',
 '厄立特里亚' => '厄利垂亞',
+'厄立特里亞' => '厄利垂亞',
 '厄瓜多尔' => '厄瓜多',
 '厄瓜多爾' => '厄瓜多',
 '斯威士兰' => '史瓦濟蘭',
@@ -18450,8 +18452,8 @@ $zh2SG = array(
 '方便面' => '快速面',
 '零钱' => '散钱',
 '散紙' => '散钱',
-'榴蓮' => '榴梿',
 '榴莲' => '榴梿',
+'榴蓮' => '榴梿',
 '笨豬跳' => '绑紧跳',
 '蹦极跳' => '绑紧跳',
 '笑星' => '谐星',
index b2ce789..5b96b40 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * ZIP file directories reader, for the purposes of upload verification.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * A class for reading ZIP file directories, for the purposes of upload
index 1103814..f0386a1 100644 (file)
@@ -700,31 +700,49 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * @param $params array
-        * @return Title
+        * @param $load bool|string Whether load the object's state from the database:
+        *        - false: don't load (if the pageid is given, it will still be loaded)
+        *        - 'fromdb': load from a slave database
+        *        - 'fromdbmaster': load from the master database
+        * @return WikiPage
         */
-       public function getTitleOrPageId( $params ) {
+       public function getTitleOrPageId( $params, $load = false ) {
                $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
 
-               $titleObj = null;
+               $pageObj = null;
                if ( isset( $params['title'] ) ) {
                        $titleObj = Title::newFromText( $params['title'] );
                        if ( !$titleObj ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                        }
+                       $pageObj = WikiPage::factory( $titleObj );
+                       if ( $load !== false ) {
+                               $pageObj->loadPageData( $load );
+                       }
                } elseif ( isset( $params['pageid'] ) ) {
-                       $titleObj = Title::newFromID( $params['pageid'] );
-                       if ( !$titleObj ) {
+                       if ( $load === false ) {
+                               $load = 'fromdb';
+                       }
+                       $pageObj = WikiPage::newFromID( $params['pageid'], $load );
+                       if ( !$pageObj ) {
                                $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
                        }
                }
-               return $titleObj;
+
+               return $pageObj;
        }
 
        /**
         * @return array
         */
-       public function getTitleOrPageIdErrorMessage( ) {
-               return $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) );
+       public function getTitleOrPageIdErrorMessage() {
+               return array_merge(
+                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       array(
+                               array( 'invalidtitle', 'title' ),
+                               array( 'nosuchpageid', 'pageid' ),
+                       )
+               );
        }
 
        /**
index 7d3a40b..9a2f255 100644 (file)
@@ -103,9 +103,11 @@ class ApiBlock extends ApiBase {
                        $res['expiry'] = $block->mExpiry == wfGetDB( DB_SLAVE )->getInfinity()
                                ? 'infinite'
                                : wfTimestamp( TS_ISO_8601, $block->mExpiry );
+                       $res['id'] = $block->getId();
                } else {
                        # should be unreachable
                        $res['expiry'] = '';
+                       $res['id'] = '';
                }
 
                $res['reason'] = $params['reason'];
@@ -149,7 +151,10 @@ class ApiBlock extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'token' => null,
-                       'gettoken' => false,
+                       'gettoken' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
                        'expiry' => 'never',
                        'reason' => null,
                        'anononly' => false,
@@ -166,7 +171,7 @@ class ApiBlock extends ApiBase {
        public function getParamDescription() {
                return array(
                        'user' => 'Username, IP address or IP range you want to block',
-                       'token' => 'A block token previously obtained through the gettoken parameter or prop=info',
+                       'token' => 'A block token previously obtained through prop=info',
                        'gettoken' => 'If set, a block token will be returned, and no other action will be taken',
                        'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
                        'reason' => 'Reason for block (optional)',
index 2a6e2e7..121cb48 100644 (file)
@@ -46,13 +46,12 @@ class ApiDelete extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
 
-               $titleObj = $this->getTitleOrPageId( $params );
-               $pageObj = WikiPage::factory( $titleObj );
-               $pageObj->loadPageData( 'fromdbmaster' );
+               $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
                if ( !$pageObj->exists() ) {
                        $this->dieUsageMsg( 'notanarticle' );
                }
 
+               $titleObj = $pageObj->getTitle();
                $reason = ( isset( $params['reason'] ) ? $params['reason'] : null );
                $user = $this->getUser();
 
@@ -230,8 +229,6 @@ class ApiDelete extends ApiBase {
                return array_merge( parent::getPossibleErrors(),
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
-                               array( 'invalidtitle', 'title' ),
-                               array( 'nosuchpageid', 'pageid' ),
                                array( 'notanarticle' ),
                                array( 'hookaborted', 'error' ),
                                array( 'delete-toobig', 'limit' ),
index 970a4f7..95a17ec 100644 (file)
@@ -48,7 +48,8 @@ class ApiEditPage extends ApiBase {
                        $this->dieUsageMsg( 'missingtext' );
                }
 
-               $titleObj = $this->getTitleOrPageId( $params );
+               $pageObj = $this->getTitleOrPageId( $params );
+               $titleObj = $pageObj->getTitle();
                if ( $titleObj->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
@@ -375,9 +376,7 @@ class ApiEditPage extends ApiBase {
                return array_merge( parent::getPossibleErrors(),
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
-                               array( 'nosuchpageid', 'pageid' ),
                                array( 'missingtext' ),
-                               array( 'invalidtitle', 'title' ),
                                array( 'createonly-exists' ),
                                array( 'nocreate-missing' ),
                                array( 'nosuchrevid', 'undo' ),
index 5df1ff6..d808075 100644 (file)
@@ -96,7 +96,7 @@ class ApiFeedContributions extends ApiBase {
        }
 
        protected function feedItem( $row ) {
-               $title = Title::MakeTitle( intval( $row->page_namespace ), $row->page_title );
+               $title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
                if( $title ) {
                        $date = $row->rev_timestamp;
                        $comments = $title->getTalkPage()->getFullURL();
index 7ef1da0..5ea2571 100644 (file)
@@ -133,7 +133,7 @@ class ApiFileRevert extends ApiBase {
 
        public function getParamDescription() {
                $params = array(
-                       'filename' => 'Target filename',
+                       'filename' => 'Target filename without the File: prefix',
                        'token' => 'Edit token. You can get one of these through prop=info',
                        'comment' => 'Upload comment',
                        'archivename' => 'Archive name of the revision to revert to',
index 17e9225..7dfdffc 100644 (file)
@@ -165,7 +165,7 @@ abstract class ApiFormatBase extends ApiBase {
 You are looking at the HTML representation of the <?php echo( $this->mFormat ); ?> format.<br />
 HTML is good for debugging, but is unsuitable for application use.<br />
 Specify the format parameter to change the output format.<br />
-To see the non HTML representation of the <?php echo( $this->mFormat ); ?> format, set format=<?php echo( $this->mFormat ); ?>.<br />
+To see the non HTML representation of the <?php echo( $this->mFormat ); ?> format, set format=<?php echo( strtolower( $this->mFormat ) ); ?>.<br />
 See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>, or
 <a href='<?php echo( $script ); ?>'>API help</a> for more information.
 </small>
index ade9f1f..5093b6b 100644 (file)
@@ -186,8 +186,16 @@ class ApiImportReporter extends ImportReporter {
        function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
                // Add a result entry
                $r = array();
-               ApiQueryBase::addTitleInfo( $r, $title );
-               $r['revisions'] = intval( $successCount );
+
+               if ( $title === null ) {\r
+                       # Invalid or non-importable title
+                       $r['title'] = $pageInfo['title'];
+                       $r['invalid'] = '';\r
+               } else {\r
+                       ApiQueryBase::addTitleInfo( $r, $title );
+                       $r['revisions'] = intval( $successCount );
+               }
+
                $this->mResultArr[] = $r;
 
                // Piggyback on the parent to do the logging
index a1c3179..7d567ee 100644 (file)
@@ -80,6 +80,7 @@ class ApiMain extends ApiBase {
                'patrol' => 'ApiPatrol',
                'import' => 'ApiImport',
                'userrights' => 'ApiUserrights',
+               'options' => 'ApiOptions',
        );
 
        /**
@@ -362,7 +363,7 @@ class ApiMain extends ApiBase {
                        $this->executeAction();
                } catch ( Exception $e ) {
                        // Log it
-                       if ( $e instanceof MWException ) {
+                       if ( !( $e instanceof UsageException ) ) {
                                wfDebugLog( 'exception', $e->getLogMessage() );
                        }
 
diff --git a/includes/api/ApiOptions.php b/includes/api/ApiOptions.php
new file mode 100644 (file)
index 0000000..7bcfe1e
--- /dev/null
@@ -0,0 +1,154 @@
+<?php
+/**
+ *
+ *
+ * Created on Apr 15, 2012
+ *
+ * Copyright © 2012 Szymon Świerkosz beau@adres.pl
+ *
+ * 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 module that facilitates the changing of user's preferences.
+* Requires API write mode to be enabled.
+*
+ * @ingroup API
+ */
+class ApiOptions extends ApiBase {
+
+       public function __construct( $main, $action ) {
+               parent::__construct( $main, $action );
+       }
+
+       /**
+        * Changes preferences of the current user.
+        */
+       public function execute() {
+               $user = $this->getUser();
+
+               if ( $user->isAnon() ) {
+                       $this->dieUsage( 'Anonymous users cannot change preferences', 'notloggedin' );
+               }
+
+               $params = $this->extractRequestParams();
+               $changes = 0;
+
+               if ( isset( $params['optionvalue'] ) && !isset( $params['optionname'] ) ) {
+                       $this->dieUsageMsg( array( 'missingparam', 'optionname' ) );
+               }
+
+               if ( $params['reset'] ) {
+                       $user->resetOptions();
+                       $changes++;
+               }
+               if ( count( $params['change'] ) ) {
+                       foreach ( $params['change'] as $entry ) {
+                               $array = explode( '=', $entry, 2 );
+                               $user->setOption( $array[0], isset( $array[1] ) ? $array[1] : null );
+                               $changes++;
+                       }
+               }
+               if ( isset( $params['optionname'] ) ) {
+                       $newValue = isset( $params['optionvalue'] ) ? $params['optionvalue'] : null;
+                       $user->setOption( $params['optionname'], $newValue );
+                       $changes++;
+               }
+
+               if ( $changes ) {
+                       // Commit changes
+                       $user->saveSettings();
+               } else {
+                       $this->dieUsage( 'No changes were requested', 'nochanges' );
+               }
+
+               $this->getResult()->addValue( null, $this->getModuleName(), 'success' );
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'token' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'reset' => false,
+                       'change' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                       ),
+                       'optionname' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
+                       'optionvalue' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
+               );
+       }
+
+       public function getParamDescription() {
+               return array(
+                       'token' => 'An options token previously obtained through the action=tokens',
+                       'reset' => 'Resets all preferences to the site defaults',
+                       'change' => 'Pipe-separated list of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters',
+                       'optionname' => 'A name of a option which should have an optionvalue set',
+                       'optionvalue' => 'A value of the option specified by the optionname, can contain pipe characters',
+               );
+       }
+
+       public function getDescription() {
+               return 'Change preferences of the current user';
+       }
+
+       public function getPossibleErrors() {
+               return array_merge( parent::getPossibleErrors(), array(
+                       array( 'notloggedin' ),
+                       array( 'nochanges' ),
+               ) );
+       }
+
+       public function needsToken() {
+               return true;
+       }
+
+       public function getTokenSalt() {
+               return '';
+       }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Options';
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=options&reset=&token=123ABC',
+                       'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
+                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+               );
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
index b85f0ff..72808e0 100644 (file)
@@ -59,13 +59,13 @@ class ApiParse extends ApiBase {
                // The parser needs $wgTitle to be set, apparently the
                // $title parameter in Parser::parse isn't enough *sigh*
                // TODO: Does this still need $wgTitle?
-               global $wgParser, $wgTitle, $wgLang;
+               global $wgParser, $wgTitle;
 
                // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang breaks
                $oldLang = null;
-               if ( isset( $params['uselang'] ) && $params['uselang'] != $wgLang->getCode() ) {
-                       $oldLang = $wgLang; // Backup wgLang
-                       $wgLang = Language::factory( $params['uselang'] );
+               if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+                       $oldLang = $this->getContext()->getLanguage(); // Backup language
+                       $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
                }
 
                $popts = ParserOptions::newFromContext( $this->getContext() );
@@ -285,6 +285,9 @@ class ApiParse extends ApiBase {
                                $result->setContent( $result_array['psttext'], $this->pstText );
                        }
                }
+               if ( isset( $prop['properties'] ) ) {
+                       $result_array['properties'] = $this->formatProperties( $p_result->getProperties() );
+               }
 
                $result_mapping = array(
                        'redirects' => 'r',
@@ -297,12 +300,13 @@ class ApiParse extends ApiBase {
                        'iwlinks' => 'iw',
                        'sections' => 's',
                        'headitems' => 'hi',
+                       'properties' => 'pp',
                );
                $this->setIndexedTagNames( $result_array, $result_mapping );
                $result->addValue( null, $this->getModuleName(), $result_array );
 
                if ( !is_null( $oldLang ) ) {
-                       $wgLang = $oldLang; // Reset $wgLang to $oldLang
+                       $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
                }
        }
 
@@ -465,6 +469,17 @@ class ApiParse extends ApiBase {
                return $result;
        }
 
+       private function formatProperties( $properties ) {
+               $result = array();
+               foreach ( $properties as $name => $value ) {
+                       $entry = array();
+                       $entry['name'] = $name;
+                       $this->getResult()->setContent( $entry, $value );
+                       $result[] = $entry;
+               }
+               return $result;
+       }
+
        private function formatCss( $css ) {
                $result = array();
                foreach ( $css as $file => $link ) {
@@ -500,7 +515,7 @@ class ApiParse extends ApiBase {
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'prop' => array(
-                               ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle',
+                               ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle|iwlinks|properties',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'text',
@@ -519,6 +534,7 @@ class ApiParse extends ApiBase {
                                        'headhtml',
                                        'iwlinks',
                                        'wikitext',
+                                       'properties',
                                )
                        ),
                        'pst' => false,
@@ -557,6 +573,7 @@ class ApiParse extends ApiBase {
                                ' headhtml       - Gives parsed <head> of the page',
                                ' iwlinks        - Gives interwiki links in the parsed wikitext',
                                ' wikitext       - Gives the original wikitext that was parsed',
+                               ' properties     - Gives various properties defined in the parsed wikitext',
                        ),
                        'pst' => array(
                                'Do a pre-save transform on the input before parsing it',
@@ -573,7 +590,10 @@ class ApiParse extends ApiBase {
        }
 
        public function getDescription() {
-               return 'Parses wikitext and returns parser output';
+               return array(
+                       'Parses wikitext and returns parser output',
+                       'See the various prop-Modules of action=query to get information from the current version of a page',
+               );
        }
 
        public function getPossibleErrors() {
index 57bf111..d156468 100644 (file)
@@ -37,8 +37,8 @@ class ApiProtect extends ApiBase {
                global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
 
-               $titleObj = $this->getTitleOrPageId( $params );
-               $pageObj = WikiPage::factory( $titleObj );
+               $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
+               $titleObj = $pageObj->getTitle();
 
                $errors = $titleObj->getUserPermissionsErrors( 'protect', $this->getUser() );
                if ( $errors ) {
@@ -192,8 +192,6 @@ class ApiProtect extends ApiBase {
                return array_merge( parent::getPossibleErrors(),
                        $this->getTitleOrPageIdErrorMessage(),
                        array(
-                               array( 'invalidtitle', 'title' ),
-                               array( 'nosuchpageid', 'pageid' ),
                                array( 'toofewexpiries', 'noofexpiries', 'noofprotections' ),
                                array( 'create-titleexists' ),
                                array( 'missingtitle-createonly' ),
index 0f7315f..c01af27 100644 (file)
@@ -89,6 +89,7 @@ class ApiPurge extends ApiBase {
                                        global $wgParser, $wgEnableParserCache;
 
                                        $popts = ParserOptions::newFromContext( $this->getContext() );
+                                       $popts->setTidy( true );
                                        $p_result = $wgParser->parse( $page->getRawText(), $title, $popts,
                                                true, true, $page->getLatest() ); #FIXME: content!
 
index ce28d03..233ea75 100644 (file)
@@ -77,7 +77,8 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
-               $this->addOption( 'ORDER BY', 'cat_title' . ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $this->addOption( 'ORDER BY', 'cat_title' . $sort );
 
                $prop = array_flip( $params['prop'] );
                $this->addFieldsIf( array( 'cat_pages', 'cat_subcats', 'cat_files' ), isset( $prop['size'] ) );
@@ -111,7 +112,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                        // Normalize titles
                        $titleObj = Title::makeTitle( NS_CATEGORY, $row->cat_title );
                        if ( !is_null( $resultPageSet ) ) {
-                               $pages[] = $titleObj->getPrefixedText();
+                               $pages[] = $titleObj;
                        } else {
                                $item = array();
                                $result->setContent( $item, $titleObj->getText() );
index 60a05a7..87e7024 100644 (file)
@@ -137,8 +137,8 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
-               $this->addOption( 'ORDER BY', 'img_name' .
-                                               ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $this->addOption( 'ORDER BY', 'img_name' . $sort );
 
                $res = $this->select( __METHOD__ );
 
index 903f144..7e7fc40 100644 (file)
@@ -105,7 +105,10 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $this->addOption( 'LIMIT', $limit + 1 );
 
                if ( !$params['unique'] ) {
-                       $this->addOption( 'ORDER BY', 'pl_title, pl_from' );
+                       $this->addOption( 'ORDER BY', array(
+                               'pl_title',
+                               'pl_from'
+                       ));
                }
 
                $res = $this->select( __METHOD__ );
index f3254c5..7e89a95 100644 (file)
@@ -153,7 +153,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        $this->addOption( 'STRAIGHT_JOIN' );
                        // We have to GROUP BY all selected fields to stop
                        // PostgreSQL from whining
-                       $this->addOption( 'GROUP BY', implode( ', ', $selectFields ) );
+                       $this->addOption( 'GROUP BY', $selectFields );
                        $forceNameTitleIndex = false;
                }
 
index e96676e..01cb15a 100644 (file)
@@ -218,7 +218,9 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                        'name' => $lastUser,
                                );
                                if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
+                                       $lastUserData['blockid'] = $row->ipb_id;
                                        $lastUserData['blockedby'] = $row->ipb_by_text;
+                                       $lastUserData['blockedbyid'] = $row->ipb_by;
                                        $lastUserData['blockreason'] = $row->ipb_reason;
                                        $lastUserData['blockexpiry'] = $row->ipb_expiry;
                                }
index 381ef55..8903714 100644 (file)
@@ -369,14 +369,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                if ( !is_null( $this->params['continue'] ) ) {
                        $this->parseContinueParam();
                } else {
-                       if ( $this->params['title'] !== '' ) {
-                               $title = Title::newFromText( $this->params['title'] );
-                               if ( !$title ) {
-                                       $this->dieUsageMsg( array( 'invalidtitle', $this->params['title'] ) );
-                               } else {
-                                       $this->rootTitle = $title;
-                               }
-                       }
+                       $this->rootTitle = $this->getTitleOrPageId( $this->params )->getTitle();
                }
 
                // only image titles are allowed for the root in imageinfo mode
@@ -436,7 +429,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $retval = array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'pageid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'continue' => null,
                        'namespace' => array(
@@ -468,7 +463,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $retval = array(
-                       'title' => 'Title to search',
+                       'title' => "Title to search. Cannot be used together with {$this->bl_code}pageid",
+                       'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
                        'continue' => 'When more results are available, use this to continue',
                        'namespace' => 'The namespace to enumerate',
                );
@@ -499,11 +495,13 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        }
 
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'invalidtitle', 'title' ),
-                       array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
-                       array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-               ) );
+               return array_merge( parent::getPossibleErrors(),
+                       $this->getTitleOrPageIdErrorMessage(),
+                       array(
+                               array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
+                               array( 'code' => '_badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
+                       )
+               );
        }
 
        public function getExamples() {
index a633748..92fabdd 100644 (file)
@@ -519,7 +519,7 @@ abstract class ApiQueryBase extends ApiBase {
                        $this->addFields( 'ipb_deleted' );
 
                        if ( $showBlockInfo ) {
-                               $this->addFields( array( 'ipb_reason', 'ipb_by_text', 'ipb_expiry' ) );
+                               $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
                        }
 
                        // Don't show hidden names
index 243d1ac..cbda6ab 100644 (file)
@@ -124,14 +124,14 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
                $this->addOption( 'USE INDEX', array( 'categorylinks' => 'cl_from' ) );
 
-               $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Don't order by cl_from if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                       $this->addOption( 'ORDER BY', 'cl_to' . $dir );
+                       $this->addOption( 'ORDER BY', 'cl_to' . $sort );
                } else {
                        $this->addOption( 'ORDER BY', array(
-                                               'cl_from' . $dir,
-                                               'cl_to' . $dir
+                                               'cl_from' . $sort,
+                                               'cl_to' . $sort
                        ));
                }
 
index 7f0b827..0f7800f 100644 (file)
@@ -54,7 +54,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        private function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
 
-               $categoryTitle = $this->getTitleOrPageId( $params );
+               $categoryTitle = $this->getTitleOrPageId( $params )->getTitle();
                if ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
                        $this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
                }
@@ -349,7 +349,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        'endsortkey' => "Sortkey to end listing at. Must be given in binary format. Can only be used with {$p}sort=sortkey",
                        'startsortkeyprefix' => "Sortkey prefix to start listing from. Can only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
                        'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with {$p}sort=sortkey. Overrides {$p}endsortkey",
-                       'continue' => 'For large categories, give the value retured from previous query',
+                       'continue' => 'For large categories, give the value returned from previous query',
                        'limit' => 'The maximum number of pages to return.',
                );
 
@@ -374,7 +374,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        array(
                                array( 'code' => 'invalidcategory', 'info' => 'The category name you entered is not valid' ),
                                array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),
-                               array( 'nosuchpageid', 'pageid' ),
                        )
                );
        }
index 397bdc4..c25f561 100644 (file)
@@ -180,7 +180,10 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        if ( $params['unique'] ) {
                                $this->addOption( 'GROUP BY', 'ar_title' );
                        } else {
-                               $this->addOption( 'ORDER BY', 'ar_title, ar_timestamp' );
+                               $this->addOption( 'ORDER BY', array(
+                                       'ar_title',
+                                       'ar_timestamp'
+                               ));
                        }
                } else {
                        if ( $mode == 'revs' ) {
index 0132d67..6fb3ea3 100644 (file)
@@ -91,14 +91,14 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                        );
                }
 
-               $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Don't order by i1.img_name if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                       $this->addOption( 'ORDER BY', 'i2.img_name' . $dir );
+                       $this->addOption( 'ORDER BY', 'i2.img_name' . $sort );
                } else {
                        $this->addOption( 'ORDER BY', array(
-                                       'i1.img_name' . $dir,
-                                       'i2.img_name' . $dir
+                                       'i1.img_name' . $sort,
+                                       'i2.img_name' . $sort
                        ));
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
index 7bf97d3..4d99055 100644 (file)
@@ -56,6 +56,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $fld_dimensions = isset( $prop['dimensions'] );
                $fld_description = isset( $prop['description'] ) || isset( $prop['parseddescription'] );
                $fld_mime = isset( $prop['mime'] );
+               $fld_mediatype = isset( $prop['mediatype'] );
                $fld_metadata = isset( $prop['metadata'] );
                $fld_bitdepth = isset( $prop['bitdepth'] );
 
@@ -68,6 +69,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                $this->addFieldsIf( array( 'fa_height', 'fa_width', 'fa_size' ), $fld_dimensions || $fld_size );
                $this->addFieldsIf( 'fa_description', $fld_description );
                $this->addFieldsIf( array( 'fa_major_mime', 'fa_minor_mime' ), $fld_mime );
+               $this->addFieldsIf( 'fa_media_type', $fld_mediatype );
                $this->addFieldsIf( 'fa_metadata', $fld_metadata );
                $this->addFieldsIf( 'fa_bits', $fld_bitdepth );
 
@@ -117,8 +119,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
-               $this->addOption( 'ORDER BY', 'fa_name' .
-                                               ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $this->addOption( 'ORDER BY', 'fa_name' . $sort );
 
                $res = $this->select( __METHOD__ );
 
@@ -165,6 +167,9 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                                $row->fa_description, $title );
                                }
                        }
+                       if ( $fld_mediatype ) {
+                               $file['mediatype'] = $row->fa_media_type;
+                       }
                        if ( $fld_metadata ) {
                                $file['metadata'] = $row->fa_metadata
                                                ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
@@ -235,6 +240,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'description',
                                        'parseddescription',
                                        'mime',
+                                       'mediatype',
                                        'metadata',
                                        'bitdepth'
                                ),
@@ -261,9 +267,10 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                ' description       - Adds description the image version',
                                ' parseddescription - Parse the description on the version',
                                ' mime              - Adds MIME of the image',
+                               ' mediatype         - Adds the media type of the image',
                                ' metadata          - Lists EXIF metadata for the version of the image',
                                ' bitdepth          - Adds the bit depth of the version',
-            ),
+                       ),
                );
        }
 
index feda177..8ebe3ec 100644 (file)
@@ -89,10 +89,17 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                $this->addWhereFld( 'iwl_title', $params['title'] );
                                $this->addOption( 'ORDER BY', 'iwl_from' );
                        } else {
-                               $this->addOption( 'ORDER BY', 'iwl_title, iwl_from' );
+                               $this->addOption( 'ORDER BY', array(
+                                       'iwl_title',
+                                       'iwl_from'
+                               ));
                        }
                } else {
-                       $this->addOption( 'ORDER BY', 'iwl_prefix, iwl_title, iwl_from' );
+                       $this->addOption( 'ORDER BY', array(
+                               'iwl_prefix',
+                               'iwl_title',
+                               'iwl_from'
+                       ));
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
@@ -205,7 +212,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
        public function getExamples() {
                return array(
                        'api.php?action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks',
-                       'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&iwblprefix=wikibooks&prop=info'
+                       'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
                );
        }
 
index bc42fe0..f39835a 100644 (file)
@@ -76,26 +76,26 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        );
                }
 
-               $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                if ( isset( $params['prefix'] ) ) {
                        $this->addWhereFld( 'iwl_prefix', $params['prefix'] );
                        if ( isset( $params['title'] ) ) {
                                $this->addWhereFld( 'iwl_title', $params['title'] );
-                               $this->addOption( 'ORDER BY', 'iwl_from' . $dir );
+                               $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                               'iwl_title' . $dir,
-                                               'iwl_from' . $dir
+                                               'iwl_title' . $sort,
+                                               'iwl_from' . $sort
                                ));
                        }
                } else {
                        // Don't order by iwl_from if it's constant in the WHERE clause
                        if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                               $this->addOption( 'ORDER BY', 'iwl_prefix' . $dir );
+                               $this->addOption( 'ORDER BY', 'iwl_prefix' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array (
-                                               'iwl_from' . $dir,
-                                               'iwl_prefix' . $dir
+                                               'iwl_from' . $sort,
+                                               'iwl_prefix' . $sort
                                ));
                        }
                }
index 03a2482..135979a 100644 (file)
@@ -430,7 +430,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @param $img File
         * @return string
         */
-       private function getContinueStr( $img ) {
+       protected function getContinueStr( $img ) {
                return $img->getOriginalTitle()->getText() .
                        '|' .  $img->getTimestamp();
        }
index 64d7ff4..6f488cd 100644 (file)
@@ -75,14 +75,14 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                        );
                }
 
-               $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Don't order by il_from if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                       $this->addOption( 'ORDER BY', 'il_to' . $dir );
+                       $this->addOption( 'ORDER BY', 'il_to' . $sort );
                } else {
                        $this->addOption( 'ORDER BY', array(
-                                               'il_from' . $dir,
-                                               'il_to' . $dir
+                                               'il_from' . $sort,
+                                               'il_to' . $sort
                        ));
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
index d28642a..e5db4d8 100644 (file)
@@ -228,6 +228,21 @@ class ApiQueryInfo extends ApiQueryBase {
                return $cachedWatchToken;
        }
 
+       public static function getOptionsToken( $pageid, $title ) {
+               global $wgUser;
+               if ( !$wgUser->isLoggedIn() ) {
+                       return false;
+               }
+
+               static $cachedOptionsToken = null;
+               if ( !is_null( $cachedOptionsToken ) ) {
+                       return $cachedOptionsToken;
+               }
+
+               $cachedOptionsToken = $wgUser->getEditToken();
+               return $cachedOptionsToken;
+       }
+
        public function execute() {
                $this->params = $this->extractRequestParams();
                if ( !is_null( $this->params['prop'] ) ) {
index 1573494..4233560 100644 (file)
@@ -89,10 +89,17 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                $this->addWhereFld( 'll_title', $params['title'] );
                                $this->addOption( 'ORDER BY', 'll_from' );
                        } else {
-                               $this->addOption( 'ORDER BY', 'll_title, ll_from' );
+                               $this->addOption( 'ORDER BY', array(
+                                       'll_title',
+                                       'll_from'
+                               ));
                        }
                } else {
-                       $this->addOption( 'ORDER BY', 'll_lang, ll_title, ll_from' );
+                       $this->addOption( 'ORDER BY', array(
+                               'll_lang',
+                               'll_title',
+                               'll_from'
+                       ));
                }
 
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
@@ -205,7 +212,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
        public function getExamples() {
                return array(
                        'api.php?action=query&list=langbacklinks&lbltitle=Test&lbllang=fr',
-                       'api.php?action=query&generator=langbacklinks&glbltitle=Test&lbllang=fr&prop=info'
+                       'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
                );
        }
 
index d505d72..b6f9a99 100644 (file)
@@ -70,26 +70,26 @@ class ApiQueryLangLinks extends ApiQueryBase {
                        );
                }
 
-           $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
-           if ( isset( $params['lang'] ) ) {
+                       $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+                       if ( isset( $params['lang'] ) ) {
                        $this->addWhereFld( 'll_lang', $params['lang'] );
                        if ( isset( $params['title'] ) ) {
                                $this->addWhereFld( 'll_title', $params['title'] );
-                               $this->addOption( 'ORDER BY', 'll_from' . $dir );
+                               $this->addOption( 'ORDER BY', 'll_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                                       'll_title' . $dir,
-                                                       'll_from' . $dir
+                                                       'll_title' . $sort,
+                                                       'll_from' . $sort
                                ));
                        }
                } else {
                        // Don't order by ll_from if it's constant in the WHERE clause
                        if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
-                               $this->addOption( 'ORDER BY', 'll_lang' . $dir );
+                               $this->addOption( 'ORDER BY', 'll_lang' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                                       'll_from' . $dir,
-                                                       'll_lang' . $dir
+                                                       'll_from' . $sort,
+                                                       'll_lang' . $sort
                                ));
                        }
                }
index 6e6da53..4dea419 100644 (file)
@@ -129,7 +129,7 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                        );
                }
 
-               $dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                // Here's some MySQL craziness going on: if you use WHERE foo='bar'
                // and later ORDER BY foo MySQL doesn't notice the ORDER BY is pointless
                // but instead goes and filesorts, because the index for foo was used
@@ -137,13 +137,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                // clause from the ORDER BY clause
                $order = array();
                if ( count( $this->getPageSet()->getGoodTitles() ) != 1 ) {
-                       $order[] = $this->prefix . '_from' . $dir;
+                       $order[] = $this->prefix . '_from' . $sort;
                }
                if ( count( $params['namespace'] ) != 1 ) {
-                       $order[] = $this->prefix . '_namespace' . $dir;
+                       $order[] = $this->prefix . '_namespace' . $sort;
                }
 
-               $order[] = $this->prefix . "_title" . $dir;
+               $order[] = $this->prefix . '_title' . $sort;
                $this->addOption( 'ORDER BY', $order );
                $this->addOption( 'USE INDEX', $this->prefix . '_from' );
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
index 5eba0de..8efe65d 100644 (file)
@@ -70,6 +70,8 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
         * @param $resultPageSet ApiPageSet
         */
        public function run( $resultPageSet = null ) {
+               global $wgQueryCacheLimit;
+
                $params = $this->extractRequestParams();
                $result = $this->getResult();
 
@@ -88,6 +90,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                                if ( $ts ) {
                                        $r['cachedtimestamp'] = wfTimestamp( TS_ISO_8601, $ts );
                                }
+                               $r['maxresults'] = $wgQueryCacheLimit;
                        }
                }
                $result->addValue( array( 'query' ), $this->getModuleName(), $r );
index f5cb72b..bdb129b 100644 (file)
@@ -327,7 +327,10 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        "rev_id >= '$revid')"
                                );
                        }
-                       $this->addOption( 'ORDER BY', 'rev_page, rev_id' );
+                       $this->addOption( 'ORDER BY', array(
+                               'rev_page',
+                               'rev_id'
+                       ));
 
                        // assumption testing -- we should never get more then $pageCount rows.
                        $limit = $pageCount;
index e11d110..e7102e0 100644 (file)
@@ -142,6 +142,15 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['fallback'] = $fallbacks;
                $this->getResult()->setIndexedTagName( $data['fallback'], 'lang' );
 
+               if( $wgContLang->hasVariants() ) {
+                       $variants = array();
+                       foreach( $wgContLang->getVariants() as $code ) {
+                               $variants[] = array( 'code' => $code );
+                       }
+                       $data['variants'] = $variants;
+                       $this->getResult()->setIndexedTagName( $data['variants'], 'lang' );
+               }
+
                if ( $wgContLang->isRTL() ) {
                        $data['rtl'] = '';
                }
@@ -206,6 +215,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( MWNamespace::isContent( $ns ) ) {
                                $data[$ns]['content'] = '';
                        }
+
+                       if ( MWNamespace::isNonincludable( $ns ) ) {
+                               $data[$ns]['nonincludable'] = '';
+                       }
                }
 
                $this->getResult()->setIndexedTagName( $data, 'ns' );
index 8e2f20d..1654382 100644 (file)
@@ -185,7 +185,7 @@ class ApiQueryContributions extends ApiQueryBase {
                if ( !is_null( $show ) ) {
                        $show = array_flip( $show );
                        if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
-                                       || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) ) ) {
+                                       || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) ) ) {
                                $this->dieUsageMsg( 'show' );
                        }
 
index a0ee227..e3bc775 100644 (file)
@@ -50,7 +50,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        protected function getCurrentUserInfo() {
-               global $wgRequest, $wgHiddenPrefs;
+               global $wgHiddenPrefs;
                $user = $this->getUser();
                $result = $this->getResult();
                $vals = array();
@@ -63,7 +63,10 @@ class ApiQueryUserInfo extends ApiQueryBase {
 
                if ( isset( $this->prop['blockinfo'] ) ) {
                        if ( $user->isBlocked() ) {
-                               $vals['blockedby'] = User::whoIs( $user->blockedBy() );
+                               $block = $user->getBlock();
+                               $vals['blockid'] = $block->getId();
+                               $vals['blockedby'] = $block->getByName();
+                               $vals['blockedbyid'] = $block->getBy();
                                $vals['blockreason'] = $user->blockedFor();
                        }
                }
@@ -136,7 +139,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                }
 
                if ( isset( $this->prop['acceptlang'] ) ) {
-                       $langs = $wgRequest->getAcceptLang();
+                       $langs = $this->getRequest()->getAcceptLang();
                        $acceptLang = array();
                        foreach ( $langs as $lang => $val ) {
                                $r = array( 'q' => $val );
index 31624bd..a07ee7f 100644 (file)
@@ -61,10 +61,10 @@ class ApiQueryUsers extends ApiQueryBase {
                return $this->tokenFunctions;
        }
 
-        /**
-         * @param $user User
-         * @return String
-         */
+       /**
+        * @param $user User
+        * @return String
+        */
        public static function getUserrightsToken( $user ) {
                global $wgUser;
                // Since the permissions check for userrights is non-trivial,
@@ -165,7 +165,9 @@ class ApiQueryUsers extends ApiQueryBase {
                                        $data[$name]['hidden'] = '';
                                }
                                if ( isset( $this->prop['blockinfo'] ) && !is_null( $row->ipb_by_text ) ) {
+                                       $data[$name]['blockid'] = $row->ipb_id;
                                        $data[$name]['blockedby'] = $row->ipb_by_text;
+                                       $data[$name]['blockedbyid'] = $row->ipb_by;
                                        $data[$name]['blockreason'] = $row->ipb_reason;
                                        $data[$name]['blockexpiry'] = $row->ipb_expiry;
                                }
index 4adadf1..ce4ce50 100644 (file)
@@ -90,7 +90,10 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                if ( count( $params['namespace'] ) == 1 ) {
                        $this->addOption( 'ORDER BY', 'wl_title' . $sort );
                } else {
-                       $this->addOption( 'ORDER BY', 'wl_namespace' . $sort . ', wl_title' . $sort );
+                       $this->addOption( 'ORDER BY', array(
+                               'wl_namespace' . $sort,
+                               'wl_title' . $sort
+                       ));
                }
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
                $res = $this->select( __METHOD__ );
index 4a68826..c56d646 100644 (file)
@@ -64,9 +64,9 @@ class ApiTokens extends ApiBase {
                wfProfileIn( __METHOD__ );
                $types = array( 'patrol' => 'ApiQueryRecentChanges::getPatrolToken' );
                $names = array( 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
-                       'email', 'import', 'watch' );
+                       'email', 'import', 'watch', 'options' );
                foreach ( $names as $name ) {
-                       $types[$name] = 'ApiQUeryInfo::get' . ucfirst( $name ) . 'Token';
+                       $types[$name] = 'ApiQueryInfo::get' . ucfirst( $name ) . 'Token';
                }
                wfRunHooks( 'ApiTokensGetTokenTypes', array( &$types ) );
                ksort( $types );
index e599e32..49353b6 100644 (file)
@@ -78,7 +78,9 @@ class ApiUnblock extends ApiBase {
                }
 
                $res['id'] = $block->getId();
-               $res['user'] = $block->getType() == Block::TYPE_AUTO ? '' : $block->getTarget();
+               $target = $block->getType() == Block::TYPE_AUTO ? '' : $block->getTarget();
+               $res['user'] = $target;
+               $res['userid'] = $target instanceof User ? $target->getId() : 0;
                $res['reason'] = $params['reason'];
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
        }
@@ -98,7 +100,10 @@ class ApiUnblock extends ApiBase {
                        ),
                        'user' => null,
                        'token' => null,
-                       'gettoken' => false,
+                       'gettoken' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
                        'reason' => null,
                );
        }
@@ -108,7 +113,7 @@ class ApiUnblock extends ApiBase {
                return array(
                        'id' => "ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with {$p}user",
                        'user' => "Username, IP address or IP range you want to unblock. Cannot be used together with {$p}id",
-                       'token' => "An unblock token previously obtained through the gettoken parameter or {$p}prop=info",
+                       'token' => "An unblock token previously obtained through prop=info",
                        'gettoken' => 'If set, an unblock token will be returned, and no other action will be taken',
                        'reason' => 'Reason for unblock (optional)',
                );
index d342997..856e2ac 100644 (file)
@@ -76,7 +76,7 @@ class ApiUndelete extends ApiBase {
                $info['title'] = $titleObj->getPrefixedText();
                $info['revisions'] = intval( $retval[0] );
                $info['fileversions'] = intval( $retval[1] );
-               $info['reason'] = intval( $retval[2] );
+               $info['reason'] = $retval[2];
                $this->getResult()->addValue( null, $this->getModuleName(), $info );
        }
 
index 191dd3e..399bc54 100644 (file)
@@ -43,6 +43,7 @@ class ApiUserrights extends ApiBase {
 
                $form = new UserrightsPage;
                $r['user'] = $user->getName();
+               $r['userid'] = $user->getId();
                list( $r['added'], $r['removed'] ) =
                        $form->doSaveUserGroups(
                                $user, (array)$params['add'],
index 0df0cd8..a3c2b52 100644 (file)
@@ -1,11 +1,32 @@
 <?php
+/**
+ * Data caching with dependencies.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
 /**
  * This class stores an arbitrary value along with its dependencies.
  * Users should typically only use DependencyWrapper::getValueFromCache(),
  * rather than instantiating one of these objects directly.
  * @ingroup Cache
  */
-
 class DependencyWrapper {
        var $value;
        var $deps;
index 26602f4..c0c5609 100644 (file)
@@ -1,9 +1,31 @@
 <?php
 /**
- * Contain the FileCacheBase class
+ * Data storage in the file system.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Base class for data storage in the file system.
+ *
+ * @ingroup Cache
+ */
 abstract class FileCacheBase {
        protected $mKey;
        protected $mType = 'object';
index c27ab00..6a9ecd2 100644 (file)
@@ -1,8 +1,30 @@
 <?php
-
 /**
  * Caches user genders when needed to use correct namespace aliases.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Caches user genders when needed to use correct namespace aliases.
+ *
  * @since 1.18
  */
 class GenderCache {
index 11e2ae7..0a3c002 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * HTML cache invalidation of all pages linking to a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Class to invalidate the HTML cache of all the pages linking to a given title.
index 256df57..f9ea135 100644 (file)
@@ -1,9 +1,33 @@
 <?php
 /**
- * Contain the HTMLFileCache class
+ * Page view caching in the file system.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Page view caching in the file system.
+ * The only cacheable actions are "view" and "history". Also special pages
+ * will not be cached.
+ *
+ * @ingroup Cache
+ */
 class HTMLFileCache extends FileCacheBase {
        /**
         * Construct an ObjectFileCache from a Title and an action
index ab33dcf..372f983 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Batch query to determine page existence.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Class representing a list of titles
index a73eaaa..f759c02 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Page existence 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
 /**
  * Cache for article titles (prefixed DB keys) and ids linked from one source
  *
index 3673359..fe43635 100644 (file)
@@ -1,11 +1,28 @@
 <?php
 /**
+ * Session storage in object cache.
+ *
  * This file gets included if $wgSessionsInMemcache is set in the config.
  * It redirects session handling functions to store their data in memcached
  * instead of the local filesystem. Depending on circumstances, it may also
  * be necessary to change the cookie settings to work across hostnames.
  * See: http://www.php.net/manual/en/function.session-set-save-handler.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 Cache
  */
index d1e658b..91de65f 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Localisation messages 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
index 3356f1f..ed1e49a 100644 (file)
@@ -1,9 +1,31 @@
 <?php
 /**
- * Contain the ObjectFileCache class
+ * Object cache in the file system.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Object cache in the file system.
+ *
+ * @ingroup Cache
+ */
 class ObjectFileCache extends FileCacheBase {
        /**
         * Construct an ObjectFileCache from a key and a type
index e73fc2d..61f1e8c 100644 (file)
@@ -1,9 +1,31 @@
 <?php
 /**
- * Contain the ResourceFileCache class
+ * Resource loader request result caching in the file system.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Resource loader request result caching in the file system.
+ *
+ * @ingroup Cache
+ */
 class ResourceFileCache extends FileCacheBase {
        protected $mCacheWorthy;
 
index e560e0e..e8e57cd 100644 (file)
@@ -1,6 +1,22 @@
 <?php
 /**
- * See deferred.txt
+ * Squid cache purging.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Cache
  */
index 84ed9f4..b972f3b 100644 (file)
@@ -798,7 +798,7 @@ abstract class DatabaseBase implements DatabaseType {
         * @return bool
         */
        function isWriteQuery( $sql ) {
-               return !preg_match( '/^(?:SELECT|BEGIN|ROLLBACK|COMMIT|SET|SHOW|\(SELECT)\b/i', $sql );
+               return !preg_match( '/^(?:SELECT|BEGIN|ROLLBACK|COMMIT|SET|SHOW|EXPLAIN|\(SELECT)\b/i', $sql );
        }
 
        /**
@@ -1475,6 +1475,7 @@ abstract class DatabaseBase implements DatabaseType {
        function selectRow( $table, $vars, $conds, $fname = 'DatabaseBase::selectRow',
                $options = array(), $join_conds = array() )
        {
+               $options = (array)$options;
                $options['LIMIT'] = 1;
                $res = $this->select( $table, $vars, $conds, $fname, $options, $join_conds );
 
@@ -3363,6 +3364,18 @@ abstract class DatabaseBase implements DatabaseType {
                return 'CONCAT(' . implode( ',', $stringList ) . ')';
        }
 
+       /**
+        * Check to see if a named lock is available. This is non-blocking.
+        *
+        * @param $lockName String: name of lock to poll
+        * @param $method String: name of method calling us
+        * @return Boolean
+        * @since 1.20
+        */
+       public function lockIsFree( $lockName, $method ) {
+               return true;
+       }
+
        /**
         * Acquire a named lock
         *
index c334c38..8550635 100644 (file)
@@ -686,6 +686,21 @@ class DatabaseMysql extends DatabaseBase {
                return parent::streamStatementEnd( $sql, $newLine );
        }
 
+       /**
+        * Check to see if a named lock is available. This is non-blocking.
+        *
+        * @param $lockName String: name of lock to poll
+        * @param $method String: name of method calling us
+        * @return Boolean
+        * @since 1.20
+        */
+       public function lockIsFree( $lockName, $method ) {
+               $lockName = $this->addQuotes( $lockName );
+               $result = $this->query( "SELECT IS_FREE_LOCK($lockName) AS lockstatus", $method );
+               $row = $this->fetchObject( $result );
+               return ( $row->lockstatus == 1 );
+       }
+
        /**
         * @param $lockName string
         * @param $method string
@@ -715,7 +730,7 @@ class DatabaseMysql extends DatabaseBase {
                $lockName = $this->addQuotes( $lockName );
                $result = $this->query( "SELECT RELEASE_LOCK($lockName) as lockstatus", $method );
                $row = $this->fetchObject( $result );
-               return $row->lockstatus;
+               return ( $row->lockstatus == 1 );
        }
 
        /**
index 5e03480..a0a3fa7 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * User interface for the difference engine
+ * User interface for the difference engine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup DifferenceEngine
@@ -239,8 +254,7 @@ class DifferenceEngine extends ContextSource {
                # a diff between a version V and its previous version V' AND the version V
                # is the first version of that article. In that case, V' does not exist.
                if ( $this->mOldRev === false ) {
-                       $out->setPageTitle( $this->mNewPage->getPrefixedText() );
-                       $out->addSubtitle( $this->msg( 'difference' ) );
+                       $out->setPageTitle( $this->msg( 'difference-title', $this->mNewPage->getPrefixedText() ) );
                        $samePage = true;
                        $oldHeader = '';
                } else {
@@ -252,11 +266,11 @@ class DifferenceEngine extends ContextSource {
                        }
 
                        if ( $this->mNewPage->equals( $this->mOldPage ) ) {
-                               $out->setPageTitle( $this->mNewPage->getPrefixedText() );
-                               $out->addSubtitle( $this->msg( 'difference' ) );
+                               $out->setPageTitle( $this->msg( 'difference-title', $this->mNewPage->getPrefixedText() ) );
                                $samePage = true;
                        } else {
-                               $out->setPageTitle( $this->mOldPage->getPrefixedText() . ', ' . $this->mNewPage->getPrefixedText() );
+                               $out->setPageTitle( $this->msg( 'difference-title-multipage', $this->mOldPage->getPrefixedText(),
+                                       $this->mNewPage->getPrefixedText() ) );
                                $out->addSubtitle( $this->msg( 'difference-multipage' ) );
                                $samePage = false;
                        }
index 22dbdef..7435ca9 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * A repository for files accessible via the local filesystem.
  *
+ * 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 FileRepo
  */
index 196c9de..6533dae 100644 (file)
 /**
  * Base code for file repositories.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileRepo
  */
index 4eea903..6f28b10 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Generic operation result for FileRepo-related operations
+ * Generic operation result for FileRepo-related operations.
+ *
+ * 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 FileRepo
index ba2694e..5fab3ab 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Foreign repository accessible through api.php requests.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileRepo
  */
@@ -87,6 +102,10 @@ class ForeignAPIRepo extends FileRepo {
                                # same repo.
                                $results[$k] = false;
                                unset( $files[$k] );
+                       } elseif ( FileBackend::isStoragePath( $f ) ) {
+                               $results[$k] = false;
+                               unset( $files[$k] );
+                               wfWarn( "Got mwstore:// path '$f'." );
                        }
                }
 
@@ -111,8 +130,8 @@ class ForeignAPIRepo extends FileRepo {
 
                $query = array_merge( $query,
                        array(
-                               'format' => 'json',
-                               'action' => 'query',
+                               'format'    => 'json',
+                               'action'    => 'query',
                                'redirects' => 'true'
                        ) );
                if ( $this->mApiBase ) {
@@ -203,6 +222,9 @@ class ForeignAPIRepo extends FileRepo {
         */
        function getThumbUrlFromCache( $name, $width, $height, $params="" ) {
                global $wgMemc;
+               // We can't check the local cache using FileRepo functions because
+               // we override fileExistsBatch(). We have to use the FileBackend directly.
+               $backend = $this->getBackend(); // convenience
 
                if ( !$this->canCacheThumbs() ) {
                        $result = null; // can't pass "null" by reference, but it's ok as default value
@@ -243,9 +265,11 @@ class ForeignAPIRepo extends FileRepo {
                $localFilename = $localPath . "/" . $fileName;
                $localUrl =  $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName );
 
-               if( $this->fileExists( $localFilename ) && isset( $metadata['timestamp'] ) ) {
+               if( $backend->fileExists( array( 'src' => $localFilename ) )
+                       && isset( $metadata['timestamp'] ) )
+               {
                        wfDebug( __METHOD__ . " Thumbnail was already downloaded before\n" );
-                       $modified = $this->getFileTimestamp( $localFilename );
+                       $modified = $backend->getFileTimestamp( array( 'src' => $localFilename ) );
                        $remoteModified = strtotime( $metadata['timestamp'] );
                        $current = time();
                        $diff = abs( $modified - $current );
@@ -264,15 +288,13 @@ class ForeignAPIRepo extends FileRepo {
                }
 
                # @todo FIXME: Delete old thumbs that aren't being used. Maintenance script?
-               wfSuppressWarnings();
-               $backend = $this->getBackend();
+               $backend->prepare( array( 'dir' => dirname( $localFilename ) ) );
                $op = array( 'op' => 'create', 'dst' => $localFilename, 'content' => $thumb );
                if( !$backend->doOperation( $op )->isOK() ) {
                        wfRestoreWarnings();
                        wfDebug( __METHOD__ . " could not write to thumb path\n" );
                        return $foreignUrl;
                }
-               wfRestoreWarnings();
                $knownThumbUrls[$sizekey] = $localUrl;
                $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
                wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" );
index 30f9977..6a1cfaf 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * A foreign repository with an accessible MediaWiki database
+ * A foreign repository with an accessible MediaWiki database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup FileRepo
index 602902d..2132ba6 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * A foreign repository with a MediaWiki database accessible via the configured LBFactory
+ * A foreign repository with a MediaWiki database accessible via the configured LBFactory.
+ *
+ * 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 FileRepo
index eecd67a..2beea43 100644 (file)
@@ -3,6 +3,21 @@
  * Local repository that stores files in the local filesystem and registers them
  * in the wiki's own database.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileRepo
  */
@@ -24,7 +39,7 @@ class LocalRepo extends FileRepo {
        /**
         * @throws MWException
         * @param $row
-        * @return File
+        * @return LocalFile
         */
        function newFileFromRow( $row ) {
                if ( isset( $row->img_name ) ) {
@@ -133,7 +148,7 @@ class LocalRepo extends FileRepo {
        public static function getHashFromKey( $key ) {
                return strtok( $key, '.' );
        }
-       
+
        /**
         * Checks if there is a redirect named as $title
         *
@@ -183,7 +198,6 @@ class LocalRepo extends FileRepo {
                }
        }
 
-
        /**
         * Function link Title::getArticleID().
         * We can't say Title object, what database it should use, so we duplicate that function here.
index 9d58bc8..3f39f60 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * File repository with no files.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileRepo
  */
index b109803..0def2d8 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Prioritized list of file repositories
+ * Prioritized list of file repositories.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup FileRepo
index 5d2bb52..ec21c8f 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Non-directory file on the file system.
+ *
+ * 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 FileBackend
  */
index 9839fa1..e105730 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * File system based 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
+ * 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 FileBackend
  * @author Aaron Schulz
@@ -174,17 +191,39 @@ class FSFileBackend extends FileBackendStore {
                        }
                }
 
-               $ok = copy( $params['src'], $dest );
-               if ( !$ok ) {
-                       $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
-                       return $status;
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
+                               wfEscapeShellArg( $this->cleanPathSlashes( $params['src'] ) ),
+                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
+                       ) );
+                       $status->value = new FSFileOpHandle( $this, $params, 'Store', $cmd, $dest );
+               } else { // immediate write
+                       $ok = copy( $params['src'], $dest );
+                       // In some cases (at least over NFS), copy() returns true when it fails
+                       if ( !$ok || ( filesize( $params['src'] ) !== filesize( $dest ) ) ) {
+                               if ( $ok ) { // PHP bug
+                                       unlink( $dest ); // remove broken file
+                                       trigger_error( __METHOD__ . ": copy() failed but returned true." );
+                               }
+                               $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+                               return $status;
+                       }
+                       $this->chmod( $dest );
                }
 
-               $this->chmod( $dest );
-
                return $status;
        }
 
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseStore( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
        /**
         * @see FileBackendStore::doCopyInternal()
         * @return Status
@@ -217,17 +256,39 @@ class FSFileBackend extends FileBackendStore {
                        }
                }
 
-               $ok = copy( $source, $dest );
-               if ( !$ok ) {
-                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
-                       return $status;
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
+                               wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
+                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
+                       ) );
+                       $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd, $dest );
+               } else { // immediate write
+                       $ok = copy( $source, $dest );
+                       // In some cases (at least over NFS), copy() returns true when it fails
+                       if ( !$ok || ( filesize( $source ) !== filesize( $dest ) ) ) {
+                               if ( $ok ) { // PHP bug
+                                       unlink( $dest ); // remove broken file
+                                       trigger_error( __METHOD__ . ": copy() failed but returned true." );
+                               }
+                               $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                               return $status;
+                       }
+                       $this->chmod( $dest );
                }
 
-               $this->chmod( $dest );
-
                return $status;
        }
 
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseCopy( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
        /**
         * @see FileBackendStore::doMoveInternal()
         * @return Status
@@ -263,16 +324,34 @@ class FSFileBackend extends FileBackendStore {
                        }
                }
 
-               $ok = rename( $source, $dest );
-               clearstatcache(); // file no longer at source
-               if ( !$ok ) {
-                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
-                       return $status;
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $cmd = implode( ' ', array( wfIsWindows() ? 'MOVE' : 'mv',
+                               wfEscapeShellArg( $this->cleanPathSlashes( $source ) ),
+                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
+                       ) );
+                       $status->value = new FSFileOpHandle( $this, $params, 'Move', $cmd );
+               } else { // immediate write
+                       $ok = rename( $source, $dest );
+                       clearstatcache(); // file no longer at source
+                       if ( !$ok ) {
+                               $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                               return $status;
+                       }
                }
 
                return $status;
        }
 
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseMove( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
        /**
         * @see FileBackendStore::doDeleteInternal()
         * @return Status
@@ -293,15 +372,32 @@ class FSFileBackend extends FileBackendStore {
                        return $status; // do nothing; either OK or bad status
                }
 
-               $ok = unlink( $source );
-               if ( !$ok ) {
-                       $status->fatal( 'backend-fail-delete', $params['src'] );
-                       return $status;
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $cmd = implode( ' ', array( wfIsWindows() ? 'DEL' : 'unlink',
+                               wfEscapeShellArg( $this->cleanPathSlashes( $source ) )
+                       ) );
+                       $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd );
+               } else { // immediate write
+                       $ok = unlink( $source );
+                       if ( !$ok ) {
+                               $status->fatal( 'backend-fail-delete', $params['src'] );
+                               return $status;
+                       }
                }
 
                return $status;
        }
 
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseDelete( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-delete', $params['src'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
        /**
         * @see FileBackendStore::doCreateInternal()
         * @return Status
@@ -328,17 +424,45 @@ class FSFileBackend extends FileBackendStore {
                        }
                }
 
-               $bytes = file_put_contents( $dest, $params['content'] );
-               if ( $bytes === false ) {
-                       $status->fatal( 'backend-fail-create', $params['dst'] );
-                       return $status;
+               if ( !empty( $params['async'] ) ) { // deferred
+                       $tempFile = TempFSFile::factory( 'create_', 'tmp' );
+                       if ( !$tempFile ) {
+                               $status->fatal( 'backend-fail-create', $params['dst'] );
+                               return $status;
+                       }
+                       $bytes = file_put_contents( $tempFile->getPath(), $params['content'] );
+                       if ( $bytes === false ) {
+                               $status->fatal( 'backend-fail-create', $params['dst'] );
+                               return $status;
+                       }
+                       $cmd = implode( ' ', array( wfIsWindows() ? 'COPY' : 'cp',
+                               wfEscapeShellArg( $this->cleanPathSlashes( $tempFile->getPath() ) ),
+                               wfEscapeShellArg( $this->cleanPathSlashes( $dest ) )
+                       ) );
+                       $status->value = new FSFileOpHandle( $this, $params, 'Create', $cmd, $dest );
+                       $tempFile->bind( $status->value );
+               } else { // immediate write
+                       $bytes = file_put_contents( $dest, $params['content'] );
+                       if ( $bytes === false ) {
+                               $status->fatal( 'backend-fail-create', $params['dst'] );
+                               return $status;
+                       }
+                       $this->chmod( $dest );
                }
 
-               $this->chmod( $dest );
-
                return $status;
        }
 
+       /**
+        * @see FSFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseCreate( $errors, Status $status, array $params, $cmd ) {
+               if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
+                       $status->fatal( 'backend-fail-create', $params['dst'] );
+                       trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
+               }
+       }
+
        /**
         * @see FileBackendStore::doPrepareInternal()
         * @return Status
@@ -542,6 +666,40 @@ class FSFileBackend extends FileBackendStore {
                return false;
        }
 
+       /**
+        * @see FileBackendStore::doExecuteOpHandlesInternal()
+        * @return Array List of corresponding Status objects
+        */
+       protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
+               $statuses = array();
+
+               $pipes = array();
+               foreach ( $fileOpHandles as $index => $fileOpHandle ) {
+                       $pipes[$index] = popen( "{$fileOpHandle->cmd} 2>&1", 'r' );
+               }
+
+               $errs = array();
+               foreach ( $pipes as $index => $pipe ) {
+                       // Result will be empty on success in *NIX. On Windows,
+                       // it may be something like "        1 file(s) [copied|moved].".
+                       $errs[$index] = stream_get_contents( $pipe );
+                       fclose( $pipe );
+               }
+
+               foreach ( $fileOpHandles as $index => $fileOpHandle ) {
+                       $status = Status::newGood();
+                       $function = '_getResponse' . $fileOpHandle->call;
+                       $this->$function( $errs[$index], $status, $fileOpHandle->params, $fileOpHandle->cmd );
+                       $statuses[$index] = $status;
+                       if ( $status->isOK() && $fileOpHandle->chmodPath ) {
+                               $this->chmod( $fileOpHandle->chmodPath );
+                       }
+               }
+
+               clearstatcache(); // files changed
+               return $statuses;
+       }
+
        /**
         * Chmod a file, suppressing the warnings
         *
@@ -556,6 +714,16 @@ class FSFileBackend extends FileBackendStore {
                return $ok;
        }
 
+       /**
+        * Clean up directory separators for the given OS
+        *
+        * @param $path string FS path
+        * @return string
+        */
+       protected function cleanPathSlashes( $path ) {
+               return wfIsWindows() ? strtr( $path, '/', '\\' ) : $path;
+       }
+
        /**
         * Listen for E_WARNING errors and track whether any happen
         *
@@ -583,6 +751,22 @@ class FSFileBackend extends FileBackendStore {
        }
 }
 
+/**
+ * @see FileBackendStoreOpHandle
+ */
+class FSFileOpHandle extends FileBackendStoreOpHandle {
+       public $cmd; // string; shell command
+       public $chmodPath; // string; file to chmod
+
+       public function __construct( $backend, array $params, $call, $cmd, $chmodPath = null ) {
+               $this->backend = $backend;
+               $this->params = $params;
+               $this->call = $call;
+               $this->cmd = $cmd;
+               $this->chmodPath = $chmodPath;
+       }
+}
+
 /**
  * Wrapper around RecursiveDirectoryIterator/DirectoryIterator that
  * catches exception or does any custom behavoir that we may want.
@@ -625,21 +809,13 @@ abstract class FSFileBackendList implements Iterator {
                        return new DirectoryIterator( $dir );
                } else { // recursive
                        # Get an iterator that will return leaf nodes (non-directories)
-                       if ( MWInit::classExists( 'FilesystemIterator' ) ) { // PHP >= 5.3
-                               # RecursiveDirectoryIterator extends FilesystemIterator.
-                               # FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x.
-                               $flags = FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS;
-                               return new RecursiveIteratorIterator(
-                                       new RecursiveDirectoryIterator( $dir, $flags ),
-                                       RecursiveIteratorIterator::CHILD_FIRST // include dirs
-                               );
-                       } else { // PHP < 5.3
-                               # RecursiveDirectoryIterator extends DirectoryIterator
-                               return new RecursiveIteratorIterator(
-                                       new RecursiveDirectoryIterator( $dir ),
-                                       RecursiveIteratorIterator::CHILD_FIRST // include dirs
-                               );
-                       }
+                       # RecursiveDirectoryIterator extends FilesystemIterator.
+                       # FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x.
+                       $flags = FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS;
+                       return new RecursiveIteratorIterator(
+                               new RecursiveDirectoryIterator( $dir, $flags ),
+                               RecursiveIteratorIterator::CHILD_FIRST // include dirs
+                       );
                }
        }
 
index 544c9c2..24c6849 100644 (file)
@@ -8,6 +8,23 @@
  */
 
 /**
+ * Base class for all file backends.
+ *
+ * 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 FileBackend
  * @author Aaron Schulz
@@ -43,6 +60,9 @@ abstract class FileBackend {
        protected $name; // string; unique backend name
        protected $wikiId; // string; unique wiki name
        protected $readOnly; // string; read-only explanation message
+       protected $parallelize; // string; when to do operations in parallel
+       protected $concurrency; // integer; how many operations can be done in parallel
+
        /** @var LockManager */
        protected $lockManager;
        /** @var FileJournal */
@@ -63,6 +83,9 @@ abstract class FileBackend {
         *                     Journals simply log changes to files stored in the backend.
         *     'readOnly'    : Write operations are disallowed if this is a non-empty string.
         *                     It should be an explanation for the backend being read-only.
+        *     'parallelize' : When to do file operations in parallel (when possible).
+        *                     Allowed values are "implicit", "explicit" and "off".
+        *     'concurrency' : How many file operations can be done in parallel.
         *
         * @param $config Array
         */
@@ -83,6 +106,12 @@ abstract class FileBackend {
                $this->readOnly = isset( $config['readOnly'] )
                        ? (string)$config['readOnly']
                        : '';
+               $this->parallelize = isset( $config['parallelize'] )
+                       ? (string)$config['parallelize']
+                       : 'off';
+               $this->concurrency = isset( $config['concurrency'] )
+                       ? (int)$config['concurrency']
+                       : 50;
        }
 
        /**
@@ -187,6 +216,7 @@ abstract class FileBackend {
         *                         This has no effect unless the 'force' flag is set.
         * 'nonJournaled'        : Don't log this operation batch in the file journal.
         *                         This limits the ability of recovery scripts.
+        * 'parallelize'         : Try to do operations in parallel when possible.
         *
         * Remarks on locking:
         * File system paths given to operations should refer to files that are
@@ -212,6 +242,16 @@ 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 );
        }
 
index d705f76..69c227d 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * File backend registration handling.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileBackend
  * @author Aaron Schulz
@@ -35,7 +52,7 @@ class FileBackendGroup {
 
        /**
         * Destroy the singleton instance
-        * 
+        *
         * @return void
         */
        public static function destroySingleton() {
@@ -44,7 +61,7 @@ class FileBackendGroup {
 
        /**
         * Register file backends from the global variables
-        * 
+        *
         * @return void
         */
        protected function initFromGlobals() {
index 208d34b..4f9f0d9 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Proxy backend that mirrors writes to several internal backends.
+ *
+ * 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 FileBackend
  * @author Aaron Schulz
@@ -126,7 +143,7 @@ class FileBackendMultiWrite extends FileBackend {
                }
 
                // Actually attempt the operation batch...
-               $subStatus = FileOp::attemptBatch( $performOps, $opts, $this->fileJournal );
+               $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal );
 
                $success = array();
                $failCount = 0;
index fab62e5..201f40f 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Base class for all backends using particular storage medium.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileBackend
  * @author Aaron Schulz
@@ -73,6 +90,9 @@ abstract class FileBackendStore extends FileBackend {
         *     content       : the raw file contents
         *     dst           : destination storage path
         *     overwrite     : overwrite any file that exists at 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.
         *
         * @param $params Array
         * @return Status
@@ -106,6 +126,9 @@ abstract class FileBackendStore extends FileBackend {
         *     src           : source path on disk
         *     dst           : destination storage path
         *     overwrite     : overwrite any file that exists at 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.
         *
         * @param $params Array
         * @return Status
@@ -138,6 +161,9 @@ abstract class FileBackendStore extends FileBackend {
         *     src           : source storage path
         *     dst           : destination storage path
         *     overwrite     : overwrite any file that exists at 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.
         *
         * @param $params Array
         * @return Status
@@ -165,6 +191,9 @@ abstract class FileBackendStore extends FileBackend {
         * $params include:
         *     src                 : source storage path
         *     ignoreMissingSource : do nothing if the source file does not exist
+        *     async               : Status will be returned immediately if supported.
+        *                           If the status is OK, then its value field will be
+        *                           set to a FileBackendStoreOpHandle object.
         *
         * @param $params Array
         * @return Status
@@ -193,6 +222,9 @@ abstract class FileBackendStore extends FileBackend {
         *     src           : source storage path
         *     dst           : destination storage path
         *     overwrite     : overwrite any file that exists at 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.
         *
         * @param $params Array
         * @return Status
@@ -214,6 +246,7 @@ abstract class FileBackendStore extends FileBackend {
         * @return Status
         */
        protected function doMoveInternal( array $params ) {
+               unset( $params['async'] ); // two steps, won't work here :)
                // Copy source to dest
                $status = $this->copyInternal( $params );
                if ( $status->isOK() ) {
@@ -890,7 +923,7 @@ abstract class FileBackendStore extends FileBackend {
                $this->primeContainerCache( $performOps );
 
                // Actually attempt the operation batch...
-               $subStatus = FileOp::attemptBatch( $performOps, $opts, $this->fileJournal );
+               $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal );
 
                // Merge errors into status fields
                $status->merge( $subStatus );
@@ -901,6 +934,41 @@ abstract class FileBackendStore extends FileBackend {
                return $status;
        }
 
+       /**
+        * Execute a list of FileBackendStoreOpHandle handles in parallel.
+        * The resulting Status object fields will correspond
+        * to the order in which the handles where given.
+        *
+        * @param $handles Array List of FileBackendStoreOpHandle objects
+        * @return Array Map of Status objects
+        */
+       final public function executeOpHandlesInternal( array $fileOpHandles ) {
+               wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
+               foreach ( $fileOpHandles as $fileOpHandle ) {
+                       if ( !( $fileOpHandle instanceof FileBackendStoreOpHandle ) ) {
+                               throw new MWException( "Given a non-FileBackendStoreOpHandle object." );
+                       } elseif ( $fileOpHandle->backend->getName() !== $this->getName() ) {
+                               throw new MWException( "Given a FileBackendStoreOpHandle for the wrong backend." );
+                       }
+               }
+               $res = $this->doExecuteOpHandlesInternal( $fileOpHandles );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see FileBackendStore::executeOpHandlesInternal()
+        * @return Array List of corresponding Status objects
+        */
+       protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
+               foreach ( $fileOpHandles as $fileOpHandle ) { // OK if empty
+                       throw new MWException( "This backend supports no asynchronous operations." );
+               }
+               return array();
+       }
+
        /**
         * @see FileBackend::clearCache()
         */
@@ -1238,6 +1306,7 @@ abstract class FileBackendStore extends FileBackend {
        final protected function primeContainerCache( array $items ) {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
+
                $paths = array(); // list of storage paths
                $contNames = array(); // (cache key => resolved container name)
                // Get all the paths/containers from the items...
@@ -1268,6 +1337,7 @@ abstract class FileBackendStore extends FileBackend {
 
                // Populate the container process cache for the backend...
                $this->doPrimeContainerCache( array_filter( $contInfo, 'is_array' ) );
+
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
        }
@@ -1328,6 +1398,7 @@ abstract class FileBackendStore extends FileBackend {
        final protected function primeFileCache( array $items ) {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
+
                $paths = array(); // list of storage paths
                $pathNames = array(); // (cache key => storage path)
                // Get all the paths/containers from the items...
@@ -1354,11 +1425,40 @@ abstract class FileBackendStore extends FileBackend {
                                $this->cache[$pathNames[$cacheKey]]['stat'] = $val;
                        }
                }
+
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
        }
 }
 
+/**
+ * FileBackendStore helper class for performing asynchronous file operations.
+ *
+ * For example, calling FileBackendStore::createInternal() with the "async"
+ * param flag may result in a Status that contains this object as a value.
+ * This class is largely backend-specific and is mostly just "magic" to be
+ * passed to FileBackendStore::executeOpHandlesInternal().
+ */
+abstract class FileBackendStoreOpHandle {
+       /** @var Array */
+       public $params = array(); // params to caller functions
+       /** @var FileBackendStore */
+       public $backend;
+       /** @var Array */
+       public $resourcesToClose = array();
+
+       public $call; // string; name that identifies the function called
+
+       /**
+        * Close all open file handles
+        *
+        * @return void
+        */
+       public function closeResources() {
+               array_map( 'fclose', $this->resourcesToClose );
+       }
+}
+
 /**
  * FileBackendStore helper function to handle listings that span container shards.
  * Do not use this class from places outside of FileBackendStore.
index 9c9f3e2..d134edd 100644 (file)
@@ -1,16 +1,34 @@
 <?php
 /**
+ * Helper class for representing operations with transaction support.
+ *
+ * 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 FileBackend
  * @author Aaron Schulz
  */
 
 /**
- * Helper class for representing operations with transaction support.
+ * FileBackend helper class for representing operations.
  * Do not use this class from places outside FileBackend.
  *
- * Methods called from attemptBatch() should avoid throwing exceptions at all costs.
- * FileOp objects should be lightweight in order to support large arrays in memory.
+ * Methods called from FileOpBatch::attempt() should avoid throwing
+ * exceptions at all costs. FileOp objects should be lightweight in order
+ * to support large arrays in memory and serialization.
  *
  * @ingroup FileBackend
  * @since 1.19
@@ -23,6 +41,7 @@ abstract class FileOp {
 
        protected $state = self::STATE_NEW; // integer
        protected $failed = false; // boolean
+       protected $async = false; // boolean
        protected $useLatest = true; // boolean
        protected $batchId; // string
 
@@ -34,10 +53,6 @@ abstract class FileOp {
        const STATE_CHECKED = 2;
        const STATE_ATTEMPTED = 3;
 
-       /* Timeout related parameters */
-       const MAX_BATCH_SIZE = 1000;
-       const TIME_LIMIT_SEC = 300; // 5 minutes
-
        /**
         * Build a new file operation transaction
         *
@@ -69,7 +84,7 @@ abstract class FileOp {
         * @param $batchId string
         * @return void
         */
-       final protected function setBatchId( $batchId ) {
+       final public function setBatchId( $batchId ) {
                $this->batchId = $batchId;
        }
 
@@ -79,130 +94,99 @@ abstract class FileOp {
         * @param $allowStale bool
         * @return void
         */
-       final protected function allowStaleReads( $allowStale ) {
+       final public function allowStaleReads( $allowStale ) {
                $this->useLatest = !$allowStale;
        }
 
        /**
-        * Attempt to perform a series of file operations.
-        * Callers are responsible for handling file locking.
+        * Get the value of the parameter with the given name
         *
-        * $opts is an array of options, including:
-        * 'force'        : Errors that would normally cause a rollback do not.
-        *                  The remaining operations are still attempted if any fail.
-        * 'allowStale'   : Don't require the latest available data.
-        *                  This can increase performance for non-critical writes.
-        *                  This has no effect unless the 'force' flag is set.
-        * 'nonJournaled' : Don't log this operation batch in the file journal.
+        * @param $name string
+        * @return mixed Returns null if the parameter is not set
+        */
+       final public function getParam( $name ) {
+               return isset( $this->params[$name] ) ? $this->params[$name] : null;
+       }
+
+       /**
+        * Check if this operation failed precheck() or attempt()
         *
-        * The resulting Status will be "OK" unless:
-        *     a) unexpected operation errors occurred (network partitions, disk full...)
-        *     b) significant operation errors occured and 'force' was not set
+        * @return bool
+        */
+       final public function failed() {
+               return $this->failed;
+       }
+
+       /**
+        * Get a new empty predicates array for precheck()
         *
-        * @param $performOps Array List of FileOp operations
-        * @param $opts Array Batch operation options
-        * @param $journal FileJournal Journal to log operations to
-        * @return Status
+        * @return Array
         */
-       final public static function attemptBatch(
-               array $performOps, array $opts, FileJournal $journal
-       ) {
-               $status = Status::newGood();
+       final public static function newPredicates() {
+               return array( 'exists' => array(), 'sha1' => array() );
+       }
 
-               $n = count( $performOps );
-               if ( $n > self::MAX_BATCH_SIZE ) {
-                       $status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
-                       return $status;
-               }
+       /**
+        * Get a new empty dependency tracking array for paths read/written to
+        *
+        * @return Array
+        */
+       final public static function newDependencies() {
+               return array( 'read' => array(), 'write' => array() );
+       }
 
-               $batchId = $journal->getTimestampedUUID();
-               $allowStale = !empty( $opts['allowStale'] );
-               $ignoreErrors = !empty( $opts['force'] );
-               $journaled = empty( $opts['nonJournaled'] );
-
-               $entries = array(); // file journal entries
-               $predicates = FileOp::newPredicates(); // account for previous op in prechecks
-               // Do pre-checks for each operation; abort on failure...
-               foreach ( $performOps as $index => $fileOp ) {
-                       $fileOp->setBatchId( $batchId );
-                       $fileOp->allowStaleReads( $allowStale );
-                       $oldPredicates = $predicates;
-                       $subStatus = $fileOp->precheck( $predicates ); // updates $predicates
-                       $status->merge( $subStatus );
-                       if ( $subStatus->isOK() ) {
-                               if ( $journaled ) { // journal log entry
-                                       $entries = array_merge( $entries,
-                                               self::getJournalEntries( $fileOp, $oldPredicates, $predicates ) );
-                               }
-                       } else { // operation failed?
-                               $status->success[$index] = false;
-                               ++$status->failCount;
-                               if ( !$ignoreErrors ) {
-                                       return $status; // abort
-                               }
-                       }
-               }
+       /**
+        * Update a dependency tracking array to account for this operation
+        *
+        * @param $deps Array Prior path reads/writes; format of FileOp::newPredicates()
+        * @return Array
+        */
+       final public function applyDependencies( array $deps ) {
+               $deps['read']  += array_fill_keys( $this->storagePathsRead(), 1 );
+               $deps['write'] += array_fill_keys( $this->storagePathsChanged(), 1 );
+               return $deps;
+       }
 
-               // Log the operations in file journal...
-               if ( count( $entries ) ) {
-                       $subStatus = $journal->logChangeBatch( $entries, $batchId );
-                       if ( !$subStatus->isOK() ) {
-                               return $subStatus; // abort
+       /**
+        * Check if this operation changes files listed in $paths
+        *
+        * @param $paths Array Prior path reads/writes; format of FileOp::newPredicates()
+        * @return boolean
+        */
+       final public function dependsOn( array $deps ) {
+               foreach ( $this->storagePathsChanged() as $path ) {
+                       if ( isset( $deps['read'][$path] ) || isset( $deps['write'][$path] ) ) {
+                               return true; // "output" or "anti" dependency
                        }
                }
-
-               if ( $ignoreErrors ) { // treat precheck() fatals as mere warnings
-                       $status->setResult( true, $status->value );
-               }
-
-               // Attempt each operation...
-               foreach ( $performOps as $index => $fileOp ) {
-                       if ( $fileOp->failed() ) {
-                               continue; // nothing to do
-                       }
-                       $subStatus = $fileOp->attempt();
-                       $status->merge( $subStatus );
-                       if ( $subStatus->isOK() ) {
-                               $status->success[$index] = true;
-                               ++$status->successCount;
-                       } else {
-                               $status->success[$index] = false;
-                               ++$status->failCount;
-                               // We can't continue (even with $ignoreErrors) as $predicates is wrong.
-                               // Log the remaining ops as failed for recovery...
-                               for ( $i = ($index + 1); $i < count( $performOps ); $i++ ) {
-                                       $performOps[$i]->logFailure( 'attempt_aborted' );
-                               }
-                               return $status; // bail out
+               foreach ( $this->storagePathsRead() as $path ) {
+                       if ( isset( $deps['write'][$path] ) ) {
+                               return true; // "flow" dependency
                        }
                }
-
-               return $status;
+               return false;
        }
 
        /**
-        * Get the file journal entries for a single file operation
+        * Get the file journal entries for this file operation
         *
-        * @param $fileOp FileOp
-        * @param $oPredicates Array Pre-op information about files
-        * @param $nPredicates Array Post-op information about files
+        * @param $oPredicates Array Pre-op info about files (format of FileOp::newPredicates)
+        * @param $nPredicates Array Post-op info about files (format of FileOp::newPredicates)
         * @return Array
         */
-       final protected static function getJournalEntries(
-               FileOp $fileOp, array $oPredicates, array $nPredicates
-       ) {
+       final public function getJournalEntries( array $oPredicates, array $nPredicates ) {
                $nullEntries = array();
                $updateEntries = array();
                $deleteEntries = array();
-               $pathsUsed = array_merge( $fileOp->storagePathsRead(), $fileOp->storagePathsChanged() );
+               $pathsUsed = array_merge( $this->storagePathsRead(), $this->storagePathsChanged() );
                foreach ( $pathsUsed as $path ) {
                        $nullEntries[] = array( // assertion for recovery
                                'op'      => 'null',
                                'path'    => $path,
-                               'newSha1' => $fileOp->fileSha1( $path, $oPredicates )
+                               'newSha1' => $this->fileSha1( $path, $oPredicates )
                        );
                }
-               foreach ( $fileOp->storagePathsChanged() as $path ) {
+               foreach ( $this->storagePathsChanged() as $path ) {
                        if ( $nPredicates['sha1'][$path] === false ) { // deleted
                                $deleteEntries[] = array(
                                        'op'      => 'delete',
@@ -211,7 +195,7 @@ abstract class FileOp {
                                );
                        } else { // created/updated
                                $updateEntries[] = array(
-                                       'op'      => $fileOp->fileExists( $path, $oPredicates ) ? 'update' : 'create',
+                                       'op'      => $this->fileExists( $path, $oPredicates ) ? 'update' : 'create',
                                        'path'    => $path,
                                        'newSha1' => $nPredicates['sha1'][$path]
                                );
@@ -220,34 +204,6 @@ abstract class FileOp {
                return array_merge( $nullEntries, $updateEntries, $deleteEntries );
        }
 
-       /**
-        * Get the value of the parameter with the given name
-        *
-        * @param $name string
-        * @return mixed Returns null if the parameter is not set
-        */
-       final public function getParam( $name ) {
-               return isset( $this->params[$name] ) ? $this->params[$name] : null;
-       }
-
-       /**
-        * Check if this operation failed precheck() or attempt()
-        *
-        * @return bool
-        */
-       final public function failed() {
-               return $this->failed;
-       }
-
-       /**
-        * Get a new empty predicates array for precheck()
-        *
-        * @return Array
-        */
-       final public static function newPredicates() {
-               return array( 'exists' => array(), 'sha1' => array() );
-       }
-
        /**
         * Check preconditions of the operation without writing anything
         *
@@ -267,7 +223,14 @@ abstract class FileOp {
        }
 
        /**
-        * Attempt the operation, backing up files as needed; this must be reversible
+        * @return Status
+        */
+       protected function doPrecheck( array &$predicates ) {
+               return Status::newGood();
+       }
+
+       /**
+        * Attempt the operation
         *
         * @return Status
         */
@@ -286,6 +249,25 @@ abstract class FileOp {
                return $status;
        }
 
+       /**
+        * @return Status
+        */
+       protected function doAttempt() {
+               return Status::newGood();
+       }
+
+       /**
+        * Attempt the operation in the background
+        *
+        * @return Status
+        */
+       final public function attemptAsync() {
+               $this->async = true;
+               $result = $this->attempt();
+               $this->async = false;
+               return $result;
+       }
+
        /**
         * Get the file operation parameters
         *
@@ -295,36 +277,48 @@ abstract class FileOp {
                return array( array(), array() );
        }
 
+       /**
+        * Adjust params to FileBackendStore internal file calls
+        *
+        * @param $params Array
+        * @return Array (required params list, optional params list)
+        */
+       protected function setFlags( array $params ) {
+               return array( 'async' => $this->async ) + $params;
+       }
+
        /**
         * Get a list of storage paths read from for this operation
         *
         * @return Array
         */
-       public function storagePathsRead() {
-               return array();
+       final public function storagePathsRead() {
+               return array_map( 'FileBackend::normalizeStoragePath', $this->doStoragePathsRead() );
        }
 
        /**
-        * Get a list of storage paths written to for this operation
-        *
+        * @see FileOp::storagePathsRead()
         * @return Array
         */
-       public function storagePathsChanged() {
+       protected function doStoragePathsRead() {
                return array();
        }
 
        /**
-        * @return Status
+        * Get a list of storage paths written to for this operation
+        *
+        * @return Array
         */
-       protected function doPrecheck( array &$predicates ) {
-               return Status::newGood();
+       final public function storagePathsChanged() {
+               return array_map( 'FileBackend::normalizeStoragePath', $this->doStoragePathsChanged() );
        }
 
        /**
-        * @return Status
+        * @see FileOp::storagePathsChanged()
+        * @return Array
         */
-       protected function doAttempt() {
-               return Status::newGood();
+       protected function doStoragePathsChanged() {
+               return array();
        }
 
        /**
@@ -408,13 +402,22 @@ abstract class FileOp {
                }
        }
 
+       /**
+        * Get the backend this operation is for
+        *
+        * @return FileBackendStore
+        */
+       public function getBackend() {
+               return $this->backend;
+       }
+
        /**
         * Log a file operation failure and preserve any temp files
         *
         * @param $action string
         * @return void
         */
-       final protected function logFailure( $action ) {
+       final public function logFailure( $action ) {
                $params = $this->params;
                $params['failedAction'] = $action;
                try {
@@ -465,12 +468,11 @@ class StoreFileOp extends FileOp {
        }
 
        protected function doAttempt() {
-               $status = Status::newGood();
                // Store the file at the destination
                if ( !$this->destSameAsSource ) {
-                       $status->merge( $this->backend->storeInternal( $this->params ) );
+                       return $this->backend->storeInternal( $this->setFlags( $this->params ) );
                }
-               return $status;
+               return Status::newGood();
        }
 
        protected function getSourceSha1Base36() {
@@ -483,7 +485,7 @@ class StoreFileOp extends FileOp {
                return $hash;
        }
 
-       public function storagePathsChanged() {
+       protected function doStoragePathsChanged() {
                return array( $this->params['dst'] );
        }
 }
@@ -523,19 +525,18 @@ class CreateFileOp extends FileOp {
        }
 
        protected function doAttempt() {
-               $status = Status::newGood();
-               // Create the file at the destination
                if ( !$this->destSameAsSource ) {
-                       $status->merge( $this->backend->createInternal( $this->params ) );
+                       // Create the file at the destination
+                       return $this->backend->createInternal( $this->setFlags( $this->params ) );
                }
-               return $status;
+               return Status::newGood();
        }
 
        protected function getSourceSha1Base36() {
                return wfBaseConvert( sha1( $this->params['content'] ), 16, 36, 31 );
        }
 
-       public function storagePathsChanged() {
+       protected function doStoragePathsChanged() {
                return array( $this->params['dst'] );
        }
 }
@@ -575,22 +576,21 @@ class CopyFileOp extends FileOp {
        }
 
        protected function doAttempt() {
-               $status = Status::newGood();
                // Do nothing if the src/dst paths are the same
                if ( $this->params['src'] !== $this->params['dst'] ) {
                        // Copy the file into the destination
                        if ( !$this->destSameAsSource ) {
-                               $status->merge( $this->backend->copyInternal( $this->params ) );
+                               return $this->backend->copyInternal( $this->setFlags( $this->params ) );
                        }
                }
-               return $status;
+               return Status::newGood();
        }
 
-       public function storagePathsRead() {
+       protected function doStoragePathsRead() {
                return array( $this->params['src'] );
        }
 
-       public function storagePathsChanged() {
+       protected function doStoragePathsChanged() {
                return array( $this->params['dst'] );
        }
 }
@@ -632,26 +632,25 @@ class MoveFileOp extends FileOp {
        }
 
        protected function doAttempt() {
-               $status = Status::newGood();
                // Do nothing if the src/dst paths are the same
                if ( $this->params['src'] !== $this->params['dst'] ) {
                        if ( !$this->destSameAsSource ) {
                                // Move the file into the destination
-                               $status->merge( $this->backend->moveInternal( $this->params ) );
+                               return $this->backend->moveInternal( $this->setFlags( $this->params ) );
                        } else {
                                // Just delete source as the destination needs no changes
                                $params = array( 'src' => $this->params['src'] );
-                               $status->merge( $this->backend->deleteInternal( $params ) );
+                               return $this->backend->deleteInternal( $this->setFlags( $params ) );
                        }
                }
-               return $status;
+               return Status::newGood();
        }
 
-       public function storagePathsRead() {
+       protected function doStoragePathsRead() {
                return array( $this->params['src'] );
        }
 
-       public function storagePathsChanged() {
+       protected function doStoragePathsChanged() {
                return array( $this->params['src'], $this->params['dst'] );
        }
 }
@@ -686,15 +685,14 @@ class DeleteFileOp extends FileOp {
        }
 
        protected function doAttempt() {
-               $status = Status::newGood();
                if ( $this->needsDelete ) {
                        // Delete the source file
-                       $status->merge( $this->backend->deleteInternal( $this->params ) );
+                       return $this->backend->deleteInternal( $this->setFlags( $this->params ) );
                }
-               return $status;
+               return Status::newGood();
        }
 
-       public function storagePathsChanged() {
+       protected function doStoragePathsChanged() {
                return array( $this->params['src'] );
        }
 }
diff --git a/includes/filerepo/backend/FileOpBatch.php b/includes/filerepo/backend/FileOpBatch.php
new file mode 100644 (file)
index 0000000..049f2c5
--- /dev/null
@@ -0,0 +1,223 @@
+<?php
+/**
+ * @file
+ * @ingroup FileBackend
+ * @author Aaron Schulz
+ */
+
+/**
+ * Helper class for representing batch file operations.
+ * Do not use this class from places outside FileBackend.
+ *
+ * Methods should avoid throwing exceptions at all costs.
+ *
+ * @ingroup FileBackend
+ * @since 1.20
+ */
+class FileOpBatch {
+       /* Timeout related parameters */
+       const MAX_BATCH_SIZE = 1000; // integer
+
+       /**
+        * Attempt to perform a series of file operations.
+        * Callers are responsible for handling file locking.
+        *
+        * $opts is an array of options, including:
+        * 'force'        : Errors that would normally cause a rollback do not.
+        *                  The remaining operations are still attempted if any fail.
+        * 'allowStale'   : Don't require the latest available data.
+        *                  This can increase performance for non-critical writes.
+        *                  This has no effect unless the 'force' flag is set.
+        * 'nonJournaled' : Don't log this operation batch in the file journal.
+        * 'concurrency'  : Try to do this many operations in parallel when possible.
+        *
+        * The resulting Status will be "OK" unless:
+        *     a) unexpected operation errors occurred (network partitions, disk full...)
+        *     b) significant operation errors occured and 'force' was not set
+        *
+        * @param $performOps Array List of FileOp operations
+        * @param $opts Array Batch operation options
+        * @param $journal FileJournal Journal to log operations to
+        * @return Status
+        */
+       public static function attempt( array $performOps, array $opts, FileJournal $journal ) {
+               wfProfileIn( __METHOD__ );
+               $status = Status::newGood();
+
+               $n = count( $performOps );
+               if ( $n > self::MAX_BATCH_SIZE ) {
+                       $status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
+                       wfProfileOut( __METHOD__ );
+                       return $status;
+               }
+
+               $batchId = $journal->getTimestampedUUID();
+               $allowStale = !empty( $opts['allowStale'] );
+               $ignoreErrors = !empty( $opts['force'] );
+               $journaled = empty( $opts['nonJournaled'] );
+               $maxConcurrency = isset( $opts['concurrency'] ) ? $opts['concurrency'] : 1;
+
+               $entries = array(); // file journal entry list
+               $predicates = FileOp::newPredicates(); // account for previous ops in prechecks
+               $curBatch = array(); // concurrent FileOp sub-batch accumulation
+               $curBatchDeps = FileOp::newDependencies(); // paths used in FileOp sub-batch
+               $pPerformOps = array(); // ordered list of concurrent FileOp sub-batches
+               $lastBackend = null; // last op backend name
+               // Do pre-checks for each operation; abort on failure...
+               foreach ( $performOps as $index => $fileOp ) {
+                       $backendName = $fileOp->getBackend()->getName();
+                       $fileOp->setBatchId( $batchId ); // transaction ID
+                       $fileOp->allowStaleReads( $allowStale ); // consistency level
+                       // Decide if this op can be done concurrently within this sub-batch
+                       // or if a new concurrent sub-batch must be started after this one...
+                       if ( $fileOp->dependsOn( $curBatchDeps )
+                               || count( $curBatch ) >= $maxConcurrency
+                               || ( $backendName !== $lastBackend && count( $curBatch ) )
+                       ) {
+                               $pPerformOps[] = $curBatch; // push this batch
+                               $curBatch = array(); // start a new sub-batch
+                               $curBatchDeps = FileOp::newDependencies();
+                       }
+                       $lastBackend = $backendName;
+                       $curBatch[$index] = $fileOp; // keep index
+                       // Update list of affected paths in this batch
+                       $curBatchDeps = $fileOp->applyDependencies( $curBatchDeps );
+                       // Simulate performing the operation...
+                       $oldPredicates = $predicates;
+                       $subStatus = $fileOp->precheck( $predicates ); // updates $predicates
+                       $status->merge( $subStatus );
+                       if ( $subStatus->isOK() ) {
+                               if ( $journaled ) { // journal log entries
+                                       $entries = array_merge( $entries,
+                                               $fileOp->getJournalEntries( $oldPredicates, $predicates ) );
+                               }
+                       } else { // operation failed?
+                               $status->success[$index] = false;
+                               ++$status->failCount;
+                               if ( !$ignoreErrors ) {
+                                       wfProfileOut( __METHOD__ );
+                                       return $status; // abort
+                               }
+                       }
+               }
+               // Push the last sub-batch
+               if ( count( $curBatch ) ) {
+                       $pPerformOps[] = $curBatch;
+               }
+
+               // Log the operations in the file journal...
+               if ( count( $entries ) ) {
+                       $subStatus = $journal->logChangeBatch( $entries, $batchId );
+                       if ( !$subStatus->isOK() ) {
+                               wfProfileOut( __METHOD__ );
+                               return $subStatus; // abort
+                       }
+               }
+
+               if ( $ignoreErrors ) { // treat precheck() fatals as mere warnings
+                       $status->setResult( true, $status->value );
+               }
+
+               // Attempt each operation (in parallel if allowed and possible)...
+               if ( count( $pPerformOps ) < count( $performOps ) ) {
+                       self::runBatchParallel( $pPerformOps, $status );
+               } else {
+                       self::runBatchSeries( $performOps, $status );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+       /**
+        * Attempt a list of file operations in series.
+        * This will abort remaining ops on failure.
+        *
+        * @param $performOps Array
+        * @param $status Status
+        * @return bool Success
+        */
+       protected static function runBatchSeries( array $performOps, Status $status ) {
+               foreach ( $performOps as $index => $fileOp ) {
+                       if ( $fileOp->failed() ) {
+                               continue; // nothing to do
+                       }
+                       $subStatus = $fileOp->attempt();
+                       $status->merge( $subStatus );
+                       if ( $subStatus->isOK() ) {
+                               $status->success[$index] = true;
+                               ++$status->successCount;
+                       } else {
+                               $status->success[$index] = false;
+                               ++$status->failCount;
+                               // We can't continue (even with $ignoreErrors) as $predicates is wrong.
+                               // Log the remaining ops as failed for recovery...
+                               for ( $i = ($index + 1); $i < count( $performOps ); $i++ ) {
+                                       $performOps[$i]->logFailure( 'attempt_aborted' );
+                               }
+                               return false; // bail out
+                       }
+               }
+               return true;
+       }
+
+       /**
+        * Attempt a list of file operations sub-batches in series.
+        *
+        * The operations *in* each sub-batch will be done in parallel.
+        * The caller is responsible for making sure the operations
+        * within any given sub-batch do not depend on each other.
+        * This will abort remaining ops on failure.
+        *
+        * @param $performOps Array
+        * @param $status Status
+        * @return bool Success
+        */
+       protected static function runBatchParallel( array $pPerformOps, Status $status ) {
+               $aborted = false;
+               foreach ( $pPerformOps as $performOpsBatch ) {
+                       if ( $aborted ) { // check batch op abort flag...
+                               // We can't continue (even with $ignoreErrors) as $predicates is wrong.
+                               // Log the remaining ops as failed for recovery...
+                               foreach ( $performOpsBatch as $i => $fileOp ) {
+                                       $performOpsBatch[$i]->logFailure( 'attempt_aborted' );
+                               }
+                               continue;
+                       }
+                       $statuses = array();
+                       $opHandles = array();
+                       // Get the backend; all sub-batch ops belong to a single backend
+                       $backend = reset( $performOpsBatch )->getBackend();
+                       // If attemptAsync() returns synchronously, it was either an
+                       // error Status or the backend just doesn't support async ops.
+                       foreach ( $performOpsBatch as $i => $fileOp ) {
+                               if ( !$fileOp->failed() ) { // failed => already has Status
+                                       $subStatus = $fileOp->attemptAsync();
+                                       if ( $subStatus->value instanceof FileBackendStoreOpHandle ) {
+                                               $opHandles[$i] = $subStatus->value; // deferred
+                                       } else {
+                                               $statuses[$i] = $subStatus; // done already
+                                       }
+                               }
+                       }
+                       // Try to do all the operations concurrently...
+                       $statuses = $statuses + $backend->executeOpHandlesInternal( $opHandles );
+                       // Marshall and merge all the responses (blocking)...
+                       foreach ( $performOpsBatch as $i => $fileOp ) {
+                               if ( !$fileOp->failed() ) { // failed => already has Status
+                                       $subStatus = $statuses[$i];
+                                       $status->merge( $subStatus );
+                                       if ( $subStatus->isOK() ) {
+                                               $status->success[$i] = true;
+                                               ++$status->successCount;
+                                       } else {
+                                               $status->success[$i] = false;
+                                               ++$status->failCount;
+                                               $aborted = true; // set abort flag; we can't continue
+                                       }
+                               }
+                       }
+               }
+               return $status;
+       }
+}
index 41d30dd..0def61f 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * OpenStack Swift based file 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
+ * 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 FileBackend
  * @author Russ Nelson
@@ -47,6 +64,9 @@ class SwiftFileBackend extends FileBackendStore {
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
+               if ( !MWInit::classExists( 'CF_Constants' ) ) {
+                       throw new MWException( 'SwiftCloudFiles extension not installed.' );
+               }
                // Required settings
                $this->auth = new CF_Authentication(
                        $config['swiftUser'],
@@ -93,9 +113,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $this->getContainer( $container );
                        return true; // container exists
                } catch ( NoSuchContainerException $e ) {
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, array( 'path' => $storagePath ) );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__, array( 'path' => $storagePath ) );
                }
 
                return false;
@@ -126,12 +145,8 @@ class SwiftFileBackend extends FileBackendStore {
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-create', $params['dst'] );
                        return $status;
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -150,20 +165,32 @@ class SwiftFileBackend extends FileBackendStore {
                        $obj->set_etag( md5( $params['content'] ) );
                        // Use the same content type as StreamFile for security
                        $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
-                       // Actually write the object in Swift
-                       $obj->write( $params['content'] );
+                       if ( !empty( $params['async'] ) ) { // deferred
+                               $handle = $obj->write_async( $params['content'] );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $handle );
+                       } else { // actually write the object in Swift
+                               $obj->write( $params['content'] );
+                       }
                } catch ( BadContentTypeException $e ) {
                        $status->fatal( 'backend-fail-contenttype', $params['dst'] );
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                }
 
                return $status;
        }
 
+       /**
+        * @see SwiftFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseCreate( CF_Async_Op $cfOp, Status $status, array $params ) {
+               try {
+                       $cfOp->getLastResponse();
+               } catch ( BadContentTypeException $e ) {
+                       $status->fatal( 'backend-fail-contenttype', $params['dst'] );
+               }
+       }
+
        /**
         * @see FileBackendStore::doStoreInternal()
         * @return Status
@@ -189,12 +216,8 @@ class SwiftFileBackend extends FileBackendStore {
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        return $status;
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -217,22 +240,44 @@ class SwiftFileBackend extends FileBackendStore {
                        $obj->set_etag( md5_file( $params['src'] ) );
                        // Use the same content type as StreamFile for security
                        $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
-                       // Actually write the object in Swift
-                       $obj->load_from_filename( $params['src'], True ); // calls $obj->write()
+                       if ( !empty( $params['async'] ) ) { // deferred
+                               wfSuppressWarnings();
+                               $fp = fopen( $params['src'], 'rb' );
+                               wfRestoreWarnings();
+                               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 );
+                                       $status->value->resourcesToClose[] = $fp;
+                               }
+                       } else { // actually write the object in Swift
+                               $obj->load_from_filename( $params['src'], true ); // calls $obj->write()
+                       }
                } catch ( BadContentTypeException $e ) {
                        $status->fatal( 'backend-fail-contenttype', $params['dst'] );
                } catch ( IOException $e ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                }
 
                return $status;
        }
 
+       /**
+        * @see SwiftFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseStore( CF_Async_Op $cfOp, Status $status, array $params ) {
+               try {
+                       $cfOp->getLastResponse();
+               } catch ( BadContentTypeException $e ) {
+                       $status->fatal( 'backend-fail-contenttype', $params['dst'] );
+               } catch ( IOException $e ) {
+                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+               }
+       }
+
        /**
         * @see FileBackendStore::doCopyInternal()
         * @return Status
@@ -265,30 +310,104 @@ class SwiftFileBackend extends FileBackendStore {
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        return $status;
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
                // (b) Actually copy the file to the destination
                try {
-                       $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel );
+                       if ( !empty( $params['async'] ) ) { // deferred
+                               $handle = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $handle );
+                       } else { // actually write the object in Swift
+                               $sContObj->copy_object_to( $srcRel, $dContObj, $dstRel );
+                       }
+               } catch ( NoSuchObjectException $e ) { // source object does not exist
+                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
+               }
+
+               return $status;
+       }
+
+       /**
+        * @see SwiftFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseCopy( CF_Async_Op $cfOp, Status $status, array $params ) {
+               try {
+                       $cfOp->getLastResponse();
                } catch ( NoSuchObjectException $e ) { // source object does not exist
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               }
+       }
+
+       /**
+        * @see FileBackendStore::doMoveInternal()
+        * @return Status
+        */
+       protected function doMoveInternal( array $params ) {
+               $status = Status::newGood();
+
+               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
+               if ( $srcRel === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+                       return $status;
+               }
+
+               list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
+               if ( $dstRel === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+                       return $status;
+               }
+
+               // (a) Check the source/destination containers and destination object
+               try {
+                       $sContObj = $this->getContainer( $srcCont );
+                       $dContObj = $this->getContainer( $dstCont );
+                       if ( empty( $params['overwrite'] ) &&
+                               $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
+                       {
+                               $status->fatal( 'backend-fail-alreadyexists', $params['dst'] );
+                               return $status;
+                       }
+               } catch ( NoSuchContainerException $e ) {
+                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                       return $status;
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
+                       return $status;
+               }
+
+               // (b) Actually move the file to the destination
+               try {
+                       if ( !empty( $params['async'] ) ) { // deferred
+                               $handle = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Move', $handle );
+                       } else { // actually write the object in Swift
+                               $sContObj->move_object_to( $srcRel, $dContObj, $dstRel );
+                       }
+               } catch ( NoSuchObjectException $e ) { // source object does not exist
+                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                }
 
                return $status;
        }
 
+       /**
+        * @see SwiftFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseMove( CF_Async_Op $cfOp, Status $status, array $params ) {
+               try {
+                       $cfOp->getLastResponse();
+               } catch ( NoSuchObjectException $e ) { // source object does not exist
+                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+               }
+       }
+
        /**
         * @see FileBackendStore::doDeleteInternal()
         * @return Status
@@ -304,23 +423,40 @@ class SwiftFileBackend extends FileBackendStore {
 
                try {
                        $sContObj = $this->getContainer( $srcCont );
-                       $sContObj->delete_object( $srcRel );
+                       if ( !empty( $params['async'] ) ) { // deferred
+                               $handle = $sContObj->delete_object_async( $srcRel );
+                               $status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $handle );
+                       } else { // actually write the object in Swift
+                               $sContObj->delete_object( $srcRel );
+                       }
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-delete', $params['src'] );
                } catch ( NoSuchObjectException $e ) {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
                        }
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                }
 
                return $status;
        }
 
+       /**
+        * @see SwiftFileBackend::doExecuteOpHandlesInternal()
+        */
+       protected function _getResponseDelete( CF_Async_Op $cfOp, Status $status, array $params ) {
+               try {
+                       $cfOp->getLastResponse();
+               } catch ( NoSuchContainerException $e ) {
+                       $status->fatal( 'backend-fail-delete', $params['src'] );
+               } catch ( NoSuchObjectException $e ) {
+                       if ( empty( $params['ignoreMissingSource'] ) ) {
+                               $status->fatal( 'backend-fail-delete', $params['src'] );
+                       }
+               }
+       }
+
        /**
         * @see FileBackendStore::doPrepareInternal()
         * @return Status
@@ -335,12 +471,8 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status; // already exists
                } catch ( NoSuchContainerException $e ) {
                        // NoSuchContainerException thrown: container does not exist
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -355,12 +487,8 @@ class SwiftFileBackend extends FileBackendStore {
                                        array( $this->auth->username ) // write
                                ) );
                        }
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -391,11 +519,8 @@ class SwiftFileBackend extends FileBackendStore {
                                        // metadata, we can make use of that to avoid RTTs
                                        $contObj->mw_wasSecured = true; // avoid useless RTTs
                                }
-                       } catch ( InvalidResponseException $e ) {
-                               $status->fatal( 'backend-fail-connect', $this->name );
-                       } catch ( Exception $e ) { // some other exception?
-                               $status->fatal( 'backend-fail-internal', $this->name );
-                               $this->logException( $e, __METHOD__, $params );
+                       } catch ( CloudFilesException $e ) { // some other exception?
+                               $this->handleException( $e, $status, __METHOD__, $params );
                        }
                }
 
@@ -419,12 +544,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $contObj = $this->getContainer( $fullCont, true );
                } catch ( NoSuchContainerException $e ) {
                        return $status; // ok, nothing to do
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-internal', $this->name );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -434,12 +555,10 @@ class SwiftFileBackend extends FileBackendStore {
                                $this->deleteContainer( $fullCont );
                        } catch ( NoSuchContainerException $e ) {
                                return $status; // race?
-                       } catch ( InvalidResponseException $e ) {
-                               $status->fatal( 'backend-fail-connect', $this->name );
-                               return $status;
-                       } catch ( Exception $e ) { // some other exception?
-                               $status->fatal( 'backend-fail-internal', $this->name );
-                               $this->logException( $e, __METHOD__, $params );
+                       } catch ( NonEmptyContainerException $e ) {
+                               return $status; // race? consistency delay?
+                       } catch ( CloudFilesException $e ) { // some other exception?
+                               $this->handleException( $e, $status, __METHOD__, $params );
                                return $status;
                        }
                }
@@ -470,11 +589,9 @@ class SwiftFileBackend extends FileBackendStore {
                        );
                } catch ( NoSuchContainerException $e ) {
                } catch ( NoSuchObjectException $e ) {
-               } catch ( InvalidResponseException $e ) {
-                       $stat = null;
-               } catch ( Exception $e ) { // some other exception?
+               } catch ( CloudFilesException $e ) { // some other exception?
                        $stat = null;
-                       $this->logException( $e, __METHOD__, $params );
+                       $this->handleException( $e, null, __METHOD__, $params );
                }
 
                return $stat;
@@ -529,9 +646,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD request
                        $data = $obj->read( $this->headersFromParams( $params ) );
                } catch ( NoSuchContainerException $e ) {
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__, $params );
                }
 
                return $data;
@@ -548,9 +664,9 @@ class SwiftFileBackend extends FileBackendStore {
                        return ( count( $container->list_objects( 1, null, $prefix ) ) > 0 );
                } catch ( NoSuchContainerException $e ) {
                        return false;
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, array( 'cont' => $fullCont, 'dir' => $dir ) );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__,
+                               array( 'cont' => $fullCont, 'dir' => $dir ) );
                }
 
                return null; // error
@@ -625,9 +741,9 @@ class SwiftFileBackend extends FileBackendStore {
                                }
                        }
                } catch ( NoSuchContainerException $e ) {
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, array( 'cont' => $fullCont, 'dir' => $dir ) );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__,
+                               array( 'cont' => $fullCont, 'dir' => $dir ) );
                }
 
                return $dirs;
@@ -668,9 +784,9 @@ class SwiftFileBackend extends FileBackendStore {
                        $after = end( $files ); // update last item
                        reset( $files ); // reset pointer
                } catch ( NoSuchContainerException $e ) {
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, array( 'cont' => $fullCont, 'dir' => $dir ) );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__,
+                               array( 'cont' => $fullCont, 'dir' => $dir ) );
                }
 
                return $files;
@@ -706,12 +822,8 @@ class SwiftFileBackend extends FileBackendStore {
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-stream', $params['src'] );
                        return $status;
-               } catch ( InvalidResponseException $e ) {
-                       $status->fatal( 'backend-fail-connect', $this->name );
-                       return $status;
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-stream', $params['src'] );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                        return $status;
                }
 
@@ -719,11 +831,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $output = fopen( 'php://output', 'wb' );
                        $obj = new CF_Object( $cont, $srcRel, false, false ); // skip HEAD request
                        $obj->stream( $output, $this->headersFromParams( $params ) );
-               } catch ( InvalidResponseException $e ) { // 404? connection problem?
-                       $status->fatal( 'backend-fail-stream', $params['src'] );
-               } catch ( Exception $e ) { // some other exception?
-                       $status->fatal( 'backend-fail-stream', $params['src'] );
-                       $this->logException( $e, __METHOD__, $params );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
                }
 
                return $status;
@@ -762,11 +871,9 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                } catch ( NoSuchContainerException $e ) {
                        $tmpFile = null;
-               } catch ( InvalidResponseException $e ) {
+               } catch ( CloudFilesException $e ) { // some other exception?
                        $tmpFile = null;
-               } catch ( Exception $e ) { // some other exception?
-                       $tmpFile = null;
-                       $this->logException( $e, __METHOD__, $params );
+                       $this->handleException( $e, null, __METHOD__, $params );
                }
 
                return $tmpFile;
@@ -796,6 +903,39 @@ class SwiftFileBackend extends FileBackendStore {
                return $hdrs;
        }
 
+       /**
+        * @see FileBackendStore::doExecuteOpHandlesInternal()
+        * @return Array List of corresponding Status objects
+        */
+       protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
+               $statuses = array();
+
+               $cfOps = array(); // list of CF_Async_Op objects
+               foreach ( $fileOpHandles as $index => $fileOpHandle ) {
+                       $cfOps[$index] = $fileOpHandle->cfOp;
+               }
+               $batch = new CF_Async_Op_Batch( $cfOps );
+
+               $cfOps = $batch->execute();
+               foreach ( $cfOps as $index => $cfOp ) {
+                       $status = Status::newGood();
+                       try { // catch exceptions; update status
+                               $function = '_getResponse' . $fileOpHandles[$index]->call;
+                               $this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
+                       } catch ( CloudFilesException $e ) { // some other exception?
+                               $this->handleException( $e, $status,
+                                       __CLASS__ . ":$function", $fileOpHandles[$index]->params );
+                       }
+                       $statuses[$index] = $status;
+               }
+
+               foreach ( $fileOpHandles as $fileOpHandle ) {
+                       $fileOpHandle->closeResources();
+               }
+
+               return $statuses;
+       }
+
        /**
         * Set read/write permissions for a Swift container
         *
@@ -868,6 +1008,7 @@ class SwiftFileBackend extends FileBackendStore {
         * @param $container string Container name
         * @param $bypassCache bool Bypass all caches and load from Swift
         * @return CF_Container
+        * @throws NoSuchContainerException
         * @throws InvalidResponseException
         */
        protected function getContainer( $container, $bypassCache = false ) {
@@ -937,31 +1078,54 @@ class SwiftFileBackend extends FileBackendStore {
                                        $info['bytes']
                                );
                        }
-               } catch ( InvalidResponseException $e ) {
-               } catch ( Exception $e ) { // some other exception?
-                       $this->logException( $e, __METHOD__, array() );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, null, __METHOD__, array() );
                }
        }
 
        /**
-        * Log an unexpected exception for this backend
+        * Log an unexpected exception for this backend.
+        * This also sets the Status object to have a fatal error.
         *
         * @param $e Exception
+        * @param $status Status|null
         * @param $func string
         * @param $params Array
         * @return void
         */
-       protected function logException( Exception $e, $func, array $params ) {
+       protected function handleException( Exception $e, $status, $func, array $params ) {
+               if ( $status instanceof Status ) {
+                       if ( $e instanceof AuthenticationException ) {
+                               $status->fatal( 'backend-fail-connect', $this->name );
+                       } else {
+                               $status->fatal( 'backend-fail-internal', $this->name );
+                       }
+               }
+               if ( $e->getMessage() ) {
+                       trigger_error( "$func: " . $e->getMessage(), E_USER_WARNING );
+               }
                wfDebugLog( 'SwiftBackend',
                        get_class( $e ) . " in '{$func}' (given '" . FormatJson::encode( $params ) . "')" .
-                       ( $e instanceof InvalidResponseException
-                               ? ": {$e->getMessage()}"
-                               : ""
-                       )
+                       ( $e->getMessage() ? ": {$e->getMessage()}" : "" )
                );
        }
 }
 
+/**
+ * @see FileBackendStoreOpHandle
+ */
+class SwiftFileOpHandle extends FileBackendStoreOpHandle {
+       /** @var CF_Async_Op */
+       public $cfOp;
+
+       public function __construct( $backend, array $params, $call, CF_Async_Op $cfOp ) {
+               $this->backend = $backend;
+               $this->params = $params;
+               $this->call = $call;
+               $this->cfOp = $cfOp;
+       }
+}
+
 /**
  * SwiftFileBackend helper class to page through listings.
  * Swift also has a listing limit of 10,000 objects for sanity.
index 7843d6c..ae22a1c 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Location holder of files stored temporarily
+ *
+ * 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 FileBackend
  */
index 1eb9eca..078f3be 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Version of FileJournal that logs to a DB table.
+ *
+ * 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 FileJournal
  * @author Aaron Schulz
index f60b7f9..99f2887 100644 (file)
@@ -5,6 +5,23 @@
  */
 
 /**
+ * File operation journaling.
+ *
+ * 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 FileJournal
  * @author Aaron Schulz
index dcba1eb..0a0ba54 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Version of LockManager based on using DB table locks.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup LockManager
+ */
 
 /**
  * Version of LockManager based on using DB table locks.
index d35a1ae..21a3a4e 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Simple version of LockManager based on using FS lock files.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup LockManager
+ */
 
 /**
  * Simple version of LockManager based on using FS lock files.
@@ -27,7 +48,7 @@ class FSLockManager extends LockManager {
 
        /**
         * Construct a new instance from configuration.
-        * 
+        *
         * $config includes:
         *     'lockDirectory' : Directory containing the lock files
         *
@@ -80,7 +101,7 @@ class FSLockManager extends LockManager {
         *
         * @param $path string
         * @param $type integer
-        * @return Status 
+        * @return Status
         */
        protected function doSingleLock( $path, $type ) {
                $status = Status::newGood();
@@ -118,10 +139,10 @@ class FSLockManager extends LockManager {
 
        /**
         * Unlock a single resource key
-        * 
+        *
         * @param $path string
         * @param $type integer
-        * @return Status 
+        * @return Status
         */
        protected function doSingleUnlock( $path, $type ) {
                $status = Status::newGood();
@@ -138,8 +159,16 @@ class FSLockManager extends LockManager {
                                // If a LOCK_SH comes in while we have a LOCK_EX, we don't
                                // actually add a handler, so check for handler existence.
                                if ( isset( $this->handles[$path][$type] ) ) {
-                                       // Mark this handle to be unlocked and closed
-                                       $handlesToClose[] = $this->handles[$path][$type];
+                                       if ( $type === self::LOCK_EX
+                                               && isset( $this->locksHeld[$path][self::LOCK_SH] )
+                                               && !isset( $this->handles[$path][self::LOCK_SH] ) )
+                                       {
+                                               // EX lock came first: move this handle to the SH one
+                                               $this->handles[$path][self::LOCK_SH] = $this->handles[$path][$type];
+                                       } else {
+                                               // Mark this handle to be unlocked and closed
+                                               $handlesToClose[] = $this->handles[$path][$type];
+                                       }
                                        unset( $this->handles[$path][$type] );
                                }
                        }
@@ -151,7 +180,7 @@ class FSLockManager extends LockManager {
                                $status->merge( $this->closeLockHandles( $path, $handlesToClose ) );
                                $status->merge( $this->pruneKeyLockFiles( $path ) );
                        } else {
-                               // Unix: unlink() can be used on files currently open by this 
+                               // Unix: unlink() can be used on files currently open by this
                                // process and we must do so in order to avoid race conditions
                                $status->merge( $this->pruneKeyLockFiles( $path ) );
                                $status->merge( $this->closeLockHandles( $path, $handlesToClose ) );
@@ -164,14 +193,12 @@ class FSLockManager extends LockManager {
        private function closeLockHandles( $path, array $handlesToClose ) {
                $status = Status::newGood();
                foreach ( $handlesToClose as $handle ) {
-                       wfSuppressWarnings();
                        if ( !flock( $handle, LOCK_UN ) ) {
                                $status->fatal( 'lockmanager-fail-releaselock', $path );
                        }
                        if ( !fclose( $handle ) ) {
                                $status->warning( 'lockmanager-fail-closelock', $path );
                        }
-                       wfRestoreWarnings();
                }
                return $status;
        }
@@ -179,12 +206,10 @@ class FSLockManager extends LockManager {
        private function pruneKeyLockFiles( $path ) {
                $status = Status::newGood();
                if ( !count( $this->locksHeld[$path] ) ) {
-                       wfSuppressWarnings();
                        # No locks are held for the lock file anymore
                        if ( !unlink( $this->getLockPath( $path ) ) ) {
                                $status->warning( 'lockmanager-fail-deletelock', $path );
                        }
-                       wfRestoreWarnings();
                        unset( $this->locksHeld[$path] );
                        unset( $this->handles[$path] );
                }
index 742c9d0..4f78ede 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Version of LockManager based on using lock daemon servers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup LockManager
+ */
 
 /**
  * Manage locks using a lock daemon server.
index 9f29eb3..8b3e229 100644 (file)
@@ -5,6 +5,23 @@
  */
 
 /**
+ * Resource locking handling.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup LockManager
  * @author Aaron Schulz
index 8465d58..7caff62 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Lock manager registration handling.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup LockManager
+ */
+
 /**
  * Class to handle file lock manager registration
  * 
index 05e1eb8..c5a0bd1 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Deleted file in the 'filearchive' table
+ * Deleted file in the 'filearchive' table.
+ *
+ * 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 FileAbstraction
index d32a0e3..c9395c6 100644 (file)
@@ -9,6 +9,21 @@
 /**
  * Base code for files.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileAbstraction
  */
index 8014413..ef9c3a5 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Foreign file accessible through api.php requests.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup FileAbstraction
  */
@@ -39,9 +54,9 @@ class ForeignAPIFile extends File {
         */
        static function newFromTitle( Title $title, $repo ) {
                $data = $repo->fetchImageQuery( array(
-                       'titles' => 'File:' . $title->getDBKey(),
-                       'iiprop' => self::getProps(),
-                       'prop'   => 'imageinfo',
+                       'titles'            => 'File:' . $title->getDBKey(),
+                       'iiprop'            => self::getProps(),
+                       'prop'              => 'imageinfo',
                        'iimetadataversion' => MediaHandler::getMetadataVersion()
                ) );
 
index 191a712..fa7834a 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Foreign file with an accessible MediaWiki database
+ * Foreign file with an accessible MediaWiki database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup FileAbstraction
index 701a1ec..6ac6ae4 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Local file in the wiki's own database
+ * Local file in the wiki's own database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup FileAbstraction
@@ -248,6 +263,10 @@ class LocalFile extends File {
                $this->setProps( $props );
        }
 
+       /**
+        * @param $prefix string
+        * @return array
+        */
        function getCacheFields( $prefix = 'img_' ) {
                static $fields = array( 'size', 'width', 'height', 'bits', 'media_type',
                        'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user', 'user_text', 'description' );
@@ -296,6 +315,9 @@ class LocalFile extends File {
        /**
         * Decode a row from the database (either object or array) to an array
         * with timestamps and MIME types decoded, and the field prefix removed.
+        * @param $row
+        * @param $prefix string
+        * @throws MWException
         * @return array
         */
        function decodeRow( $row, $prefix = 'img_' ) {
@@ -473,6 +495,9 @@ class LocalFile extends File {
        /** getPath inherited */
        /** isVisible inhereted */
 
+       /**
+        * @return bool
+        */
        function isMissing() {
                if ( $this->missing === null ) {
                        list( $fileExists ) = $this->repo->fileExists( $this->getVirtualUrl() );
@@ -484,8 +509,8 @@ class LocalFile extends File {
        /**
         * Return the width of the image
         *
-        * Returns false on error
-        * @return bool
+        * @param $page int
+        * @return bool|int Returns false on error
         */
        public function getWidth( $page = 1 ) {
                $this->load();
@@ -505,8 +530,8 @@ class LocalFile extends File {
        /**
         * Return the height of the image
         *
-        * Returns false on error
-        * @return bool
+        * @param $page int
+        * @return bool|int Returns false on error
         */
        public function getHeight( $page = 1 ) {
                $this->load();
@@ -527,6 +552,7 @@ class LocalFile extends File {
         * Returns ID or name of user who uploaded the file
         *
         * @param $type string 'text' or 'id'
+        * @return int|string
         */
        function getUser( $type = 'text' ) {
                $this->load();
@@ -547,6 +573,9 @@ class LocalFile extends File {
                return $this->metadata;
        }
 
+       /**
+        * @return int
+        */
        function getBitDepth() {
                $this->load();
                return $this->bits;
@@ -554,6 +583,7 @@ class LocalFile extends File {
 
        /**
         * Return the size of the image file, in bytes
+        * @return int
         */
        public function getSize() {
                $this->load();
@@ -562,6 +592,7 @@ class LocalFile extends File {
 
        /**
         * Returns the mime type of the file.
+        * @return string
         */
        function getMimeType() {
                $this->load();
@@ -571,6 +602,7 @@ class LocalFile extends File {
        /**
         * Return the type of the media in the file.
         * Use the value returned by this function with the MEDIATYPE_xxx constants.
+        * @return string
         */
        function getMediaType() {
                $this->load();
@@ -785,6 +817,13 @@ class LocalFile extends File {
        /** purgeDescription inherited */
        /** purgeEverything inherited */
 
+       /**
+        * @param $limit null
+        * @param $start null
+        * @param $end null
+        * @param $inc bool
+        * @return array
+        */
        function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
                $dbr = $this->repo->getSlaveDB();
                $tables = array( 'oldimage' );
@@ -903,12 +942,12 @@ class LocalFile extends File {
         * @param $comment String: upload description
         * @param $pageText String: text to use for the new description page,
         *                  if a new description page is created
-        * @param $flags Integer: flags for publish()
-        * @param $props Array: File properties, if known. This can be used to reduce the
+        * @param $flags Integer|bool: flags for publish()
+        * @param $props Array|bool: File properties, if known. This can be used to reduce the
         *               upload time when uploading virtual URLs for which the file info
         *               is already known
-        * @param $timestamp String: timestamp for img_timestamp, or false to use the current time
-        * @param $user Mixed: User object or null to use $wgUser
+        * @param $timestamp String|bool: timestamp for img_timestamp, or false to use the current time
+        * @param $user User|null: User object or null to use $wgUser
         *
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
@@ -942,6 +981,13 @@ class LocalFile extends File {
 
        /**
         * Record a file upload in the upload log and the image table
+        * @param $oldver
+        * @param $desc string
+        * @param $license string
+        * @param $copyStatus string
+        * @param $source string
+        * @param $watch bool
+        * @param $timestamp string|bool
         * @return bool
         */
        function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
@@ -962,6 +1008,12 @@ class LocalFile extends File {
 
        /**
         * Record a file upload in the upload log and the image table
+        * @param $oldver
+        * @param $comment string
+        * @param $pageText string
+        * @param $props bool|array
+        * @param $timestamp bool|string
+        * @param $user null|User
         * @return bool
         */
        function recordUpload2(
@@ -1079,16 +1131,8 @@ class LocalFile extends File {
                                __METHOD__
                        );
                } else {
-                       # This is a new file
-                       # Update the image count
-                       $dbw->begin( __METHOD__ );
-                       $dbw->update(
-                               'site_stats',
-                               array( 'ss_images = ss_images+1' ),
-                               '*',
-                               __METHOD__
-                       );
-                       $dbw->commit( __METHOD__ );
+                       # This is a new file, so update the image count
+                       DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
                }
 
                $descTitle = $this->getTitle();
@@ -1231,19 +1275,21 @@ class LocalFile extends File {
                }
 
                wfDebugLog( 'imagemove', "Got request to move {$this->name} to " . $target->getText() );
-               $this->lock(); // begin
-
                $batch = new LocalFileMoveBatch( $this, $target );
-               $batch->addCurrent();
-               $batch->addOlds();
 
+               $this->lock(); // begin
+               $batch->addCurrent();
+               $archiveNames = $batch->addOlds();
                $status = $batch->execute();
+               $this->unlock(); // done
+
                wfDebugLog( 'imagemove', "Finished moving {$this->name}" );
 
                $this->purgeEverything();
-               $this->unlock(); // done
-
-               if ( $status->isOk() ) {
+               foreach ( $archiveNames as $archiveName ) {
+                       $this->purgeOldThumbnails( $archiveName );
+               }
+               if ( $status->isOK() ) {
                        // Now switch the object
                        $this->title = $target;
                        // Force regeneration of the name and hashpath
@@ -1273,30 +1319,23 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
-               $this->lock(); // begin
-
                $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
-               $batch->addCurrent();
 
+               $this->lock(); // begin
+               $batch->addCurrent();
                # Get old version relative paths
-               $dbw = $this->repo->getMasterDB();
-               $result = $dbw->select( 'oldimage',
-                       array( 'oi_archive_name' ),
-                       array( 'oi_name' => $this->getName() ) );
-               foreach ( $result as $row ) {
-                       $batch->addOld( $row->oi_archive_name );
-                       $this->purgeOldThumbnails( $row->oi_archive_name );
-               }
+               $archiveNames = $batch->addOlds();
                $status = $batch->execute();
+               $this->unlock(); // done
 
                if ( $status->isOK() ) {
-                       // Update site_stats
-                       $site_stats = $dbw->tableName( 'site_stats' );
-                       $dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ );
-                       $this->purgeEverything();
+                       DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => -1 ) ) );
                }
 
-               $this->unlock(); // done
+               $this->purgeEverything();
+               foreach ( $archiveNames as $archiveName ) {
+                       $this->purgeOldThumbnails( $archiveName );
+               }
 
                return $status;
        }
@@ -1320,15 +1359,14 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
-               $this->lock(); // begin
-
                $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
+
+               $this->lock(); // begin
                $batch->addOld( $archiveName );
-               $this->purgeOldThumbnails( $archiveName );
                $status = $batch->execute();
-
                $this->unlock(); // done
 
+               $this->purgeOldThumbnails( $archiveName );
                if ( $status->isOK() ) {
                        $this->purgeDescription();
                        $this->purgeHistory();
@@ -1353,25 +1391,21 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
-               $this->lock(); // begin
-
                $batch = new LocalFileRestoreBatch( $this, $unsuppress );
 
+               $this->lock(); // begin
                if ( !$versions ) {
                        $batch->addAll();
                } else {
                        $batch->addIds( $versions );
                }
-
                $status = $batch->execute();
-
                if ( $status->isGood() ) {
                        $cleanupStatus = $batch->cleanup();
                        $cleanupStatus->successCount = 0;
                        $cleanupStatus->failCount = 0;
                        $status->merge( $cleanupStatus );
                }
-
                $this->unlock(); // done
 
                return $status;
@@ -1406,16 +1440,25 @@ class LocalFile extends File {
                return $pout->getText();
        }
 
+       /**
+        * @return string
+        */
        function getDescription() {
                $this->load();
                return $this->description;
        }
 
+       /**
+        * @return bool|string
+        */
        function getTimestamp() {
                $this->load();
                return $this->timestamp;
        }
 
+       /**
+        * @return string
+        */
        function getSha1() {
                $this->load();
                // Initialise now if necessary
@@ -1438,6 +1481,9 @@ class LocalFile extends File {
                return $this->sha1;
        }
 
+       /**
+        * @return bool
+        */
        function isCacheable() {
                $this->load();
                return strlen( $this->metadata ) <= self::CACHE_FIELD_MAX_LEN; // avoid OOMs
@@ -1508,6 +1554,11 @@ class LocalFileDeleteBatch {
        var $reason, $srcRels = array(), $archiveUrls = array(), $deletionBatch, $suppress;
        var $status;
 
+       /**
+        * @param $file File
+        * @param $reason string
+        * @param $suppress bool
+        */
        function __construct( File $file, $reason = '', $suppress = false ) {
                $this->file = $file;
                $this->reason = $reason;
@@ -1519,11 +1570,39 @@ class LocalFileDeleteBatch {
                $this->srcRels['.'] = $this->file->getRel();
        }
 
+       /**
+        * @param $oldName string
+        */
        function addOld( $oldName ) {
                $this->srcRels[$oldName] = $this->file->getArchiveRel( $oldName );
                $this->archiveUrls[] = $this->file->getArchiveUrl( $oldName );
        }
 
+       /**
+        * Add the old versions of the image to the batch
+        * @return Array List of archive names from old versions
+        */
+       function addOlds() {
+               $archiveNames = array();
+
+               $dbw = $this->file->repo->getMasterDB();
+               $result = $dbw->select( 'oldimage',
+                       array( 'oi_archive_name' ),
+                       array( 'oi_name' => $this->file->getName() ),
+                       __METHOD__
+               );
+
+               foreach ( $result as $row ) {
+                       $this->addOld( $row->oi_archive_name );
+                       $archiveNames[] = $row->oi_archive_name;
+               }
+
+               return $archiveNames;
+       }
+
+       /**
+        * @return array
+        */
        function getOldRels() {
                if ( !isset( $this->srcRels['.'] ) ) {
                        $oldRels =& $this->srcRels;
@@ -1537,6 +1616,9 @@ class LocalFileDeleteBatch {
                return array( $oldRels, $deleteCurrent );
        }
 
+       /**
+        * @return array
+        */
        protected function getHashes() {
                $hashes = array();
                list( $oldRels, $deleteCurrent ) = $this->getOldRels();
@@ -1765,17 +1847,6 @@ class LocalFileDeleteBatch {
                        return $this->status;
                }
 
-               // Purge squid
-               if ( $wgUseSquid ) {
-                       $urls = array();
-
-                       foreach ( $this->srcRels as $srcRel ) {
-                               $urlRel = str_replace( '%2F', '/', rawurlencode( $srcRel ) );
-                               $urls[] = $this->file->repo->getZoneUrl( 'public' ) . '/' . $urlRel;
-                       }
-                       SquidUpdate::purge( $urls );
-               }
-
                // Delete image/oldimage rows
                $this->doDBDeletes();
 
@@ -1788,6 +1859,7 @@ class LocalFileDeleteBatch {
 
        /**
         * Removes non-existent files from a deletion batch.
+        * @param $batch array
         * @return array
         */
        function removeNonexistentFiles( $batch ) {
@@ -1824,6 +1896,10 @@ class LocalFileRestoreBatch {
 
        var $cleanupBatch, $ids, $all, $unsuppress = false;
 
+       /**
+        * @param $file File
+        * @param $unsuppress bool
+        */
        function __construct( File $file, $unsuppress = false ) {
                $this->file = $file;
                $this->cleanupBatch = $this->ids = array();
@@ -2062,9 +2138,7 @@ class LocalFileRestoreBatch {
                        if ( !$exists ) {
                                wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" );
 
-                               // Update site_stats
-                               $site_stats = $dbw->tableName( 'site_stats' );
-                               $dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ );
+                               DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
 
                                $this->file->purgeEverything();
                        } else {
@@ -2081,12 +2155,14 @@ class LocalFileRestoreBatch {
 
        /**
         * Removes non-existent files from a store batch.
+        * @param $triplets array
         * @return array
         */
        function removeNonexistentFiles( $triplets ) {
                $files = $filteredTriplets = array();
-               foreach ( $triplets as $file )
+               foreach ( $triplets as $file ) {
                        $files[$file[0]] = $file[0];
+               }
 
                $result = $this->file->repo->fileExistsBatch( $files );
 
@@ -2101,6 +2177,7 @@ class LocalFileRestoreBatch {
 
        /**
         * Removes non-existent files from a cleanup batch.
+        * @param $batch array
         * @return array
         */
        function removeNonexistentFromCleanup( $batch ) {
@@ -2171,7 +2248,7 @@ class LocalFileRestoreBatch {
 class LocalFileMoveBatch {
 
        /**
-        * @var File
+        * @var LocalFile
         */
        var $file;
 
@@ -2180,8 +2257,17 @@ class LocalFileMoveBatch {
         */
        var $target;
 
-       var $cur, $olds, $oldCount, $archive, $db;
+       var $cur, $olds, $oldCount, $archive;
+
+       /**
+        * @var DatabaseBase
+        */
+       var $db;
 
+       /**
+        * @param File $file
+        * @param Title $target
+        */
        function __construct( File $file, Title $target ) {
                $this->file = $file;
                $this->target = $target;
@@ -2191,7 +2277,7 @@ class LocalFileMoveBatch {
                $this->newName = $this->file->repo->getNameFromTitle( $this->target );
                $this->oldRel = $this->oldHash . $this->oldName;
                $this->newRel = $this->newHash . $this->newName;
-               $this->db = $file->repo->getMasterDb();
+               $this->db = $file->getRepo()->getMasterDb();
        }
 
        /**
@@ -2203,11 +2289,13 @@ class LocalFileMoveBatch {
 
        /**
         * Add the old versions of the image to the batch
+        * @return Array List of archive names from old versions
         */
        function addOlds() {
                $archiveBase = 'archive';
                $this->olds = array();
                $this->oldCount = 0;
+               $archiveNames = array();
 
                $result = $this->db->select( 'oldimage',
                        array( 'oi_archive_name', 'oi_deleted' ),
@@ -2216,6 +2304,7 @@ class LocalFileMoveBatch {
                );
 
                foreach ( $result as $row ) {
+                       $archiveNames[] = $row->oi_archive_name;
                        $oldName = $row->oi_archive_name;
                        $bits = explode( '!', $oldName, 2 );
 
@@ -2243,6 +2332,8 @@ class LocalFileMoveBatch {
                                "{$archiveBase}/{$this->newHash}{$timestamp}!{$this->newName}"
                        );
                }
+
+               return $archiveNames;
        }
 
        /**
@@ -2252,8 +2343,8 @@ class LocalFileMoveBatch {
        function execute() {
                $repo = $this->file->repo;
                $status = $repo->newGood();
-               $triplets = $this->getMoveTriplets();
 
+               $triplets = $this->getMoveTriplets();
                $triplets = $this->removeNonexistentFiles( $triplets );
 
                // Copy the files into their new location
@@ -2266,17 +2357,17 @@ class LocalFileMoveBatch {
                        return $statusMove;
                }
 
-               $this->db->begin( __METHOD__ );
+               $this->file->lock(); // begin
                $statusDb = $this->doDBUpdates();
                wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: {$statusDb->successCount} successes, {$statusDb->failCount} failures" );
                if ( !$statusDb->isGood() ) {
-                       $this->db->rollback( __METHOD__ );
+                       $this->file->unlockAndRollback();
                        // Something went wrong with the DB updates, so remove the target files
                        $this->cleanupTarget( $triplets );
                        $statusDb->ok = false;
                        return $statusDb;
                }
-               $this->db->commit( __METHOD__ );
+               $this->file->unlock(); // done
 
                // Everything went ok, remove the source files
                $this->cleanupSource( $triplets );
@@ -2360,6 +2451,7 @@ class LocalFileMoveBatch {
 
        /**
         * Removes non-existent files from move batch.
+        * @param $triplets array
         * @return array
         */
        function removeNonexistentFiles( $triplets ) {
index cec70d6..bd3ff1e 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Old file in the oldimage table
+ * Old file in the oldimage table.
+ *
+ * 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 FileAbstraction
index 7c5eab0..b217d60 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * File without associated database record
+ * File without associated database record.
+ *
+ * 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 FileAbstraction
index f9afbb2..0c3876c 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Core installer command line interface.
  *
+ * 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 Deployment
  */
index 046fa16..2cc539b 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * DBMS-specific installation helper.
  *
+ * 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 Deployment
  */
index 923b994..6483c4e 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * DBMS-specific updater helper.
  *
+ * 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 Deployment
  */
index a6c4fd6..76df7af 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * IBM_DB2-specific installer.
  *
+ * 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 Deployment
  */
index 580bff6..6b7e88d 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * IBM_DB2-specific updater.
  *
+ * 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 Deployment
  */
index 5801f26..9a389dd 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Installer-specific wikitext formating.
+ *
+ * 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 InstallDocFormatter {
        static function format( $text ) {
index b380787..f703c7a 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Base code for MediaWiki installer.
  *
+ * 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 Deployment
  */
@@ -24,7 +39,7 @@
 abstract class Installer {
 
        // This is the absolute minimum PHP version we can support
-       const MINIMUM_PHP_VERSION = '5.2.3';
+       const MINIMUM_PHP_VERSION = '5.3.2';
 
        /**
         * @var array
index 46c6a90..9ed486c 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Generator for LocalSettings.php 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
  * @ingroup Deployment
  */
index caec558..5230c81 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * MySQL-specific installer.
  *
+ * 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 Deployment
  */
index c9ac28b..e22f1d1 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * MySQL-specific updater.
  *
+ * 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 Deployment
  */
@@ -197,6 +212,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        // 1.20
                        array( 'addTable', 'config',                            'patch-config.sql' ),
                        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' ),
 
                        // 1.WD
                        array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
index 50f18c9..863a625 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Oracle-specific installer.
  *
+ * 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 Deployment
  */
index 536d54c..dc02afb 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Oracle-specific updater.
  *
+ * 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 Deployment
  */
index 5144686..641f6e3 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * PostgreSQL-specific installer.
  *
+ * 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 Deployment
  */
index a03c6c4..43005a8 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * PostgreSQL-specific updater.
  *
+ * 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 Deployment
  */
@@ -97,6 +112,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'ipblocks',      'ipb_create_account',   'SMALLINT NOT NULL DEFAULT 1' ),
                        array( 'addPgField', 'ipblocks',      'ipb_deleted',          'SMALLINT NOT NULL DEFAULT 0' ),
                        array( 'addPgField', 'ipblocks',      'ipb_enable_autoblock', 'SMALLINT NOT NULL DEFAULT 1' ),
+                       array( 'addPgField', 'ipblocks',      'ipb_parent_block_id',            'INTEGER DEFAULT NULL REFERENCES ipblocks(ipb_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED' ),
                        array( 'addPgField', 'filearchive',   'fa_deleted',           'SMALLINT NOT NULL DEFAULT 0' ),
                        array( 'addPgField', 'logging',       'log_deleted',          'SMALLINT NOT NULL DEFAULT 0' ),
                        array( 'addPgField', 'logging',       'log_id',               "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('logging_log_id_seq')" ),
@@ -194,6 +210,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        # New indexes
                        array( 'addPgIndex', 'archive',       'archive_user_text',      '(ar_user_text)' ),
                        array( 'addPgIndex', 'image',         'img_sha1',               '(img_sha1)' ),
+                       array( 'addPgIndex', 'ipblocks',      'ipb_parent_block_id',              '(ipb_parent_block_id)' ),
                        array( 'addPgIndex', 'oldimage',      'oi_sha1',                '(oi_sha1)' ),
                        array( 'addPgIndex', 'page',          'page_mediawiki_title',   '(page_title) WHERE page_namespace = 8' ),
                        array( 'addPgIndex', 'pagelinks',     'pagelinks_title',        '(pl_title)' ),
@@ -290,6 +307,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'changeFkeyDeferrable', 'imagelinks',       'il_from',         'page(page_id) ON DELETE CASCADE' ),
                        array( 'changeFkeyDeferrable', 'ipblocks',         'ipb_by',          'mwuser(user_id) ON DELETE CASCADE' ),
                        array( 'changeFkeyDeferrable', 'ipblocks',         'ipb_user',        'mwuser(user_id) ON DELETE SET NULL' ),
+                       array( 'changeFkeyDeferrable', 'ipblocks',         'ipb_parent_block_id',       'ipblocks(ipb_id) ON DELETE SET NULL' ),
                        array( 'changeFkeyDeferrable', 'langlinks',        'll_from',         'page(page_id) ON DELETE CASCADE' ),
                        array( 'changeFkeyDeferrable', 'logging',          'log_user',        'mwuser(user_id) ON DELETE SET NULL' ),
                        array( 'changeFkeyDeferrable', 'oldimage',         'oi_name',         'image(img_name) ON DELETE CASCADE ON UPDATE CASCADE' ),
index 89444bc..6e1a74f 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Sqlite-specific installer.
  *
+ * 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 Deployment
  */
index 967f1c8..f936fb6 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Sqlite-specific updater.
  *
+ * 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 Deployment
  */
@@ -76,6 +91,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        // 1.20
                        array( 'addTable', 'config',                            'patch-config.sql' ),
                        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' ),
 
                        // 1.WD
                        array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
index eeeb768..5bbe642 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Core installer web interface.
  *
+ * 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 Deployment
  */
index fdc1746..aabc1f3 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Output handler for the web installer.
  *
+ * 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 Deployment
  */
@@ -101,9 +116,15 @@ class WebInstallerOutput {
                // by '../skins/$skinName/images/', where $skinName is what appears
                // before the last '/' in each of the strings.
                $cssFileNames = array(
-                       "common/shared.css",
-                       "vector/screen.css",
-                       "common/config.css",
+
+                       // Basically the "skins.vector" ResourceLoader module styles
+                       'common/commonElements.css',
+                       'common/commonContent.css',
+                       'common/commonInterface.css',
+                       'vector/screen.css',
+
+                       // mw-config specific
+                       'common/config.css',
                );
 
                $css = '';
index 73a5ef2..b6e7717 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Base code for web installer pages.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Deployment
  */
index 2dacd85..076e23f 100644 (file)
@@ -1,7 +1,23 @@
 <?php
 /**
+ * Interwiki table entry.
+ *
+ * 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
- * Interwiki table entry
  */
 
 /**
@@ -165,7 +181,7 @@ class Interwiki {
 
                $db = wfGetDB( DB_SLAVE );
 
-               $row = $db->fetchRow( $db->select( 'interwiki', '*', array( 'iw_prefix' => $prefix ),
+               $row = $db->fetchRow( $db->select( 'interwiki', self::selectFields(), array( 'iw_prefix' => $prefix ),
                        __METHOD__ ) );
                $iw = Interwiki::loadFromArray( $row );
                if ( $iw ) {
@@ -289,7 +305,7 @@ class Interwiki {
                }
 
                $res = $db->select( 'interwiki',
-                       array( 'iw_prefix', 'iw_url', 'iw_api', 'iw_wikiid', 'iw_local', 'iw_trans' ),
+                       self::selectFields(),
                        $where, __METHOD__, array( 'ORDER BY' => 'iw_prefix' )
                );
                $retval = array();
@@ -390,4 +406,20 @@ class Interwiki {
                $msg = wfMessage( 'interwiki-desc-' . $this->mPrefix )->inContentLanguage();
                return !$msg->exists() ? '' : $msg;
        }
+
+       /**
+        * Return the list of interwiki fields that should be selected to create
+        * a new interwiki object.
+        * @return array
+        */
+       public static function selectFields() {
+               return array(
+                       'iw_prefix',
+                       'iw_url',
+                       'iw_api',
+                       'iw_wikiid',
+                       'iw_local',
+                       'iw_trans'
+               );
+       }
 }
index 2a14445..4e02258 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Job to fix double redirects after moving a page
+ * Job to fix double redirects after moving a page.
+ *
+ * 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 JobQueue
index 89b74a4..d359988 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Old job for notification emails.
  *
+ * 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 JobQueue
  */
index eb154ec..b4c925e 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Job for notification emails.
  *
+ * 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 JobQueue
  */
index ac70dcb..a53905f 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Job queue base code
+ * Job queue base 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
  * @defgroup JobQueue JobQueue
@@ -186,6 +201,11 @@ abstract class Job {
                $namespace = $row->job_namespace;
                $dbkey = $row->job_title;
                $title = Title::makeTitleSafe( $namespace, $dbkey );
+
+               if ( is_null( $title ) ) {
+                       return false;
+               }
+
                $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), $row->job_id );
 
                // Remove any duplicates it may have later in the queue
@@ -204,7 +224,7 @@ abstract class Job {
         * @param $id Int: Job identifier
         * @return Job
         */
-       static function factory( $command, $title, $params = false, $id = 0 ) {
+       static function factory( $command, Title $title, $params = false, $id = 0 ) {
                global $wgJobClasses;
                if( isset( $wgJobClasses[$command] ) ) {
                        $class = $wgJobClasses[$command];
index c4efcab..a717794 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Job to update links for a given title.
  *
+ * 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 JobQueue
  */
index 26f6e4b..55ccc27 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Job for asynchronous upload-by-url.
  *
+ * 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 JobQueue
  */
index f7373e4..4ef59ed 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Simple wrapper for json_econde and json_decode that falls back on Services_JSON class
+ * Simple wrapper for json_econde and json_decode that falls back on Services_JSON class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  */
index 792079a..e6672b4 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * PHP port of CSSJanus.
+ *
  * 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
@@ -15,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  */
 
 /**
index 4f4b28b..e9c2bad 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Minification of CSS stylesheets.
+ *
  * Copyright 2010 Wikimedia Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may
  * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  * OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
- */
-
-/**
- * Transforms CSS data
- *
- * This class provides minification, URL remapping, URL extracting, and data-URL embedding.
  *
  * @file
  * @version 0.1.1 -- 2010-09-11
  * @copyright Copyright 2010 Wikimedia Foundation
  * @license http://www.apache.org/licenses/LICENSE-2.0
  */
+
+/**
+ * Transforms CSS data
+ *
+ * This class provides minification, URL remapping, URL extracting, and data-URL embedding.
+ */
 class CSSMin {
 
        /* Constants */
index 2985c65..78d8180 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * List of HTTP status codes.
+ *
+ * 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
+ */
+
 /**
  * @todo document
  */
index 01e72e6..cfc7f53 100644 (file)
@@ -1,4 +1,10 @@
 <?php
+/**
+ * Simulation of Microsoft Internet Explorer's MIME type detection algorithm.
+ *
+ * @file
+ * @todo Define the exact license of this file.
+ */
 
 /**
  * This class simulates Microsoft Internet Explorer's terribly broken and
index 99461b0..e9cfa99 100644 (file)
@@ -1,4 +1,24 @@
 <?php
+/**
+ * Checks for validity of requested URL's extension.
+ *
+ * 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
+ */
 
 /**
  * Internet Explorer derives a cache filename from a URL, and then in certain
index baf9338..0b4be9a 100644 (file)
@@ -2,17 +2,19 @@
 /**
  * JavaScript Minifier
  *
+ * @file
+ * @author Paul Copperman <paul.copperman@gmail.com>
+ * @license Choose any of Apache, MIT, GPL, LGPL
+ */
+
+/**
  * This class is meant to safely minify javascript code, while leaving syntactically correct
  * programs intact. Other libraries, such as JSMin require a certain coding style to work
  * correctly. OTOH, libraries like jsminplus, that do parse the code correctly are rather
  * slow, because they construct a complete parse tree before outputting the code minified.
  * So this class is meant to allow arbitrary (but syntactically correct) input, while being
  * fast enough to be used for on-the-fly minifying.
- *
- * Author: Paul Copperman <paul.copperman@gmail.com>
- * License: choose any of Apache, MIT, GPL, LGPL
  */
-
 class JavaScriptMinifier {
 
        /* Class constants */
index 8ed08d7..7c4e32b 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * JSMinPlus version 1.4
  *
@@ -25,6 +24,7 @@
  *
  * Latest version of this script: http://files.tweakers.net/jsminplus/jsminplus.zip
  *
+ * @file
  */
 
 /* ***** BEGIN LICENSE BLOCK *****
index 0be0740..37560d8 100644 (file)
@@ -7,6 +7,21 @@
  * - formatting log entries based on database fields
  * - user is now part of the action 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
  * @author Niklas Laxström
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
index eccbcdb..ef63335 100644 (file)
@@ -515,16 +515,9 @@ class LogEventsList {
                                $canHide = $wgUser->isAllowed( 'deleterevision' );
                                // If event was hidden from sysops
                                if( !self::userCan( $row, LogPage::DELETED_RESTRICTED ) ) {
-                                       $del = Linker::revDeleteLinkDisabled( $canHide );
+                                       $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                                } else {
-                                       $target = SpecialPage::getTitleFor( 'Log', $row->log_type );
-                                       $query = array(
-                                               'target' => $target->getPrefixedDBkey(),
-                                               'type'   => 'logging',
-                                               'ids'    => $row->log_id,
-                                       );
-                                       $del = Linker::revDeleteLink( $query,
-                                               self::isDeleted( $row, LogPage::DELETED_RESTRICTED ), $canHide );
+                                       $del = Xml::check( 'showhiderevisions', false, array( 'name' => 'ids[' . $row->log_id . ']' ) );
                                }
                        }
                }
index e463c45..1ba6a3b 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Contains classes for formatting log entries
  *
+ * 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
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
@@ -712,4 +727,12 @@ class NewUsersLogFormatter extends LogFormatter {
                }
                return parent::getComment();
        }
+
+       public function getPreloadTitles() {
+               if ( $this->entry->getSubtype() === 'create2' ) {
+                       //add the user talk to LinkBatch for the userLink
+                       return array( Title::makeTitle( NS_USER_TALK, $this->entry->getTarget()->getText() ) );
+               }
+               return array();
+       }
 }
index 88f3484..3891f34 100644 (file)
@@ -68,7 +68,7 @@ class LogPage {
        }
 
        /**
-        * @return bool|int|null
+        * @return int log_id of the inserted log entry
         */
        protected function saveContent() {
                global $wgLogRestrictions;
@@ -105,7 +105,7 @@ class LogPage {
                } elseif( $this->sendToUDP ) {
                        # Don't send private logs to UDP
                        if( isset( $wgLogRestrictions[$this->type] ) && $wgLogRestrictions[$this->type] != '*' ) {
-                               return true;
+                               return $newId;
                        }
 
                        # Notify external application via UDP.
@@ -438,8 +438,7 @@ class LogPage {
         * @param $params Array: parameters passed later to wfMsg.* functions
         * @param $doer User object: the user doing the action
         *
-        * @return bool|int|null
-        * @TODO: make this use LogEntry::saveContent()
+        * @return int log_id of the inserted log entry
         */
        public function addEntry( $action, $target, $comment, $params = array(), $doer = null ) {
                global $wgContLang;
index 65c523d..339688d 100644 (file)
@@ -1,12 +1,31 @@
 <?php
-
 /**
- * Class containing static functions for working with
- * logs of patrol events
+ * Specific methods for the patrol log.
+ *
+ * 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 Rob Church <robchur@gmail.com>
  * @author Niklas Laxström
  */
+
+/**
+ * Class containing static functions for working with
+ * logs of patrol events
+ */
 class PatrolLog {
 
        /**
index 6886e95..a515c63 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Handler for Microsoft's bitmap format
+ * Handler for Microsoft's bitmap format.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Media
index 3e039ff..8cf30ab 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Generic handler for bitmap images
+ * Generic handler for bitmap images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Media
index d158fe4..0a19554 100644 (file)
@@ -1,13 +1,36 @@
 <?php
 /**
-Class to deal with reconciling and extracting metadata from bitmap images.
-This is meant to comply with http://www.metadataworkinggroup.org/pdf/mwg_guidance.pdf
+ * Extraction of metadata from different bitmap image types.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
 
-This sort of acts as an intermediary between MediaHandler::getMetadata
-and the various metadata extractors.
-
-@todo other image formats.
-*/
+/**
+ * Class to deal with reconciling and extracting metadata from bitmap images.
+ * This is meant to comply with http://www.metadataworkinggroup.org/pdf/mwg_guidance.pdf
+ *
+ * This sort of acts as an intermediary between MediaHandler::getMetadata
+ * and the various metadata extractors.
+ *
+ * @todo other image formats.
+ * @ingroup Media
+ */
 class BitmapMetadataHandler {
 
        private $metadata = array();
index 3c5d973..8cb5138 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Handler for bitmap images that will be resized by clients
+ * Handler for bitmap images that will be resized by clients.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Media
index 2f960d9..ed38bd1 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Handler for DjVu images
+ * Handler for DjVu images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Media
index 25aacdc..6aef562 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * DjVu image handler
+ * DjVu image handler.
  *
  * Copyright © 2006 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
@@ -21,6 +21,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @ingroup Media
  */
 
 /**
index 4fb13c6..f5dc020 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Extraction and validation of image metadata.
+ *
  * 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
index 7b9867f..65575ec 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Handler for bitmap images with exif metadata.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 2416252..c22ea08 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Formating of image metadata values into human readable form.
+ *
  * 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
index 32618e9..2ec523d 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Handler for GIF images.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 90bc726..5fc5c1a 100644 (file)
@@ -7,6 +7,21 @@
  * Deliberately not using MWExceptions to avoid external dependencies, encouraging
  * redistribution.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index c6833f3..b41ac32 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Media-handling base classes and generic functionality
+ * Media-handling base classes and generic functionality.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Media
index 666ce40..8fd3552 100644 (file)
@@ -1,8 +1,31 @@
 <?php
 /**
-*Class for some IPTC functions.
+ * Class for some IPTC functions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
 
-*/
+/**
+ * Class for some IPTC functions.
+ *
+ * @ingroup Media
+ */
 class IPTC {
 
        /**
index 7033409..a15b652 100644 (file)
@@ -1,5 +1,22 @@
 <?php
 /**
+ * Handler for JPEG images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 0522dfc..8d7e43b 100644 (file)
@@ -1,10 +1,34 @@
 <?php
 /**
-* Class for reading jpegs and extracting metadata.
-* see also BitmapMetadataHandler.
-*
-* Based somewhat on GIFMetadataExtrator.
-*/
+ * Extraction of JPEG image metadata.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+/**
+ * Class for reading jpegs and extracting metadata.
+ * see also BitmapMetadataHandler.
+ *
+ * Based somewhat on GIFMetadataExtrator.
+ *
+ * @ingroup Media
+ */
 class JpegMetadataExtractor {
 
        const MAX_JPEG_SEGMENTS = 200;
index 380731c..bf08de6 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Base class for the output of file transformation methods.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 8fe9ecb..afc7d6a 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Handler for PNG images.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index d3c44d4..9dcde40 100644 (file)
@@ -1,10 +1,26 @@
 <?php
 /**
  * PNG frame counter and metadata extractor.
+ *
  * Slightly derived from GIFMetadataExtractor.php
  * Deliberately not using MWExceptions to avoid external dependencies, encouraging
  * redistribution.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 5e72ab0..9c8fc5e 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Handler for SVG images.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 26e42d1..da7d428 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * SVGMetadataExtractor.php
+ * Extraction of SVG image metadata.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,9 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
  */
 
+/**
+ * @ingroup Media
+ */
 class SVGMetadataExtractor {
        static function getMetadata( $filename ) {
                $svg = new SVGReader( $filename );
@@ -32,6 +35,9 @@ class SVGMetadataExtractor {
        }
 }
 
+/**
+ * @ingroup Media
+ */
 class SVGReader {
        const DEFAULT_WIDTH = 512;
        const DEFAULT_HEIGHT = 512;
index 0f317e1..d95c907 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Handler for Tiff images.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index ce71290..555fa1f 100644 (file)
@@ -7,6 +7,21 @@
  * Specification in Gnome repository:
  *   http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Media
  */
index 0dbf563..adb85df 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Reader for XMP data containing properties relevant to images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
 /**
 * Class for reading xmp data containing properties relevant to
 * images, and spitting out an array that FormatExif accepts.
index 156d9b5..83b8a10 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Definitions for XMPReader class.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
 /**
 * This class is just a container for a big array
 * used by XMPReader to determine which XMP items to
index 600d99d..5ce3c00 100644 (file)
@@ -1,4 +1,26 @@
 <?php
+/**
+ * Methods for validating XMP properties.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
 /**
 * This contains some static methods for
 * validating XMP properties. See XMPInfo and XMPReader classes.
index dd4a76e..b9a6a69 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using PHP's APC accelerator.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * This is a wrapper for APC's shared memory functions
index ade8c0a..d03771e 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using DBA 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Cache that uses DBA as a backend.
index 75aad27..fb31d5c 100644 (file)
@@ -1,8 +1,31 @@
 <?php
+/**
+ * Object caching using the Ehcache RESTful web service.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Client for the Ehcache RESTful web service - http://ehcache.org/documentation/cache_server.html
  * TODO: Simplify configuration and add to the installer.
+ *
+ * @ingroup Cache
  */
 class EhcacheBagOStuff extends BagOStuff {
        var $servers, $cacheName, $connectTimeout, $timeout, $curlOptions, 
index 2aee6b1..abc6bcf 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Dummy object caching.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
index 3677330..26b949f 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using PHP arrays.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * This is a test of the interface, mainly. It stores things in an associative
index 1ddf3b9..e816078 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Memcached client for PHP.
+ *
  * +---------------------------------------------------------------------------+
  * | memcached client, PHP                                                     |
  * +---------------------------------------------------------------------------+
index d2c7a2d..79f3241 100644 (file)
@@ -1,7 +1,30 @@
 <?php
+/**
+ * Object caching using memcached.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * A wrapper class for the pure-PHP memcached client, exposing a BagOStuff interface.
+ *
+ * @ingroup Cache
  */
 class MemcachedPhpBagOStuff extends BagOStuff {
 
index 9063093..fd60e72 100644 (file)
@@ -1,9 +1,32 @@
 <?php
+/**
+ * Wrapper for object caching in different caches.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * A cache class that replicates all writes to multiple child caches. Reads 
  * are implemented by reading from the caches in the order they are given in 
  * the configuration until a cache gives a positive result.
+ *
+ * @ingroup Cache
  */
 class MultiWriteBagOStuff extends BagOStuff {
        var $caches;
index 6225bb2..a59ca05 100644 (file)
@@ -1,10 +1,31 @@
 <?php
 /**
- * Functions to get cache objects
+ * Functions to get cache objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
  * @ingroup Cache
  */
+
+/**
+ * Functions to get cache objects
+ *
+ * @ingroup Cache
+ */
 class ObjectCache {
        static $instances = array();
 
index 4dfa574..54a67e0 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using a SQL database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Class to store objects in the database
@@ -118,40 +139,64 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        public function get( $key ) {
-               # expire old entries if any
-               $this->garbageCollect();
-               $db = $this->getDB();
-               $tableName = $this->getTableByKey( $key );
-               $row = $db->selectRow( $tableName, array( 'value', 'exptime' ),
-                       array( 'keyname' => $key ), __METHOD__ );
+               $values = $this->getBatch( array( $key ) );
+               return $values[$key];
+       }
 
-               if ( !$row ) {
-                       $this->debug( 'get: no matching rows' );
-                       return false;
+       public function getBatch( array $keys ) {
+               $values = array(); // array of (key => value)
+
+               $keysByTableName = array();
+               foreach ( $keys as $key ) {
+                       $tableName = $this->getTableByKey( $key );
+                       if ( !isset( $keysByTableName[$tableName] ) ) {
+                               $keysByTableName[$tableName] = array();
+                       }
+                       $keysByTableName[$tableName][] = $key;
                }
 
-               $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+               $db = $this->getDB();
+               $this->garbageCollect(); // expire old entries if any
 
-               if ( $this->isExpired( $row->exptime ) ) {
-                       $this->debug( "get: key has expired, deleting" );
-                       try {
-                               $db->begin( __METHOD__ );
-                               # Put the expiry time in the WHERE condition to avoid deleting a
-                               # newly-inserted value
-                               $db->delete( $tableName,
-                                       array(
-                                               'keyname' => $key,
-                                               'exptime' => $row->exptime
-                                       ), __METHOD__ );
-                               $db->commit( __METHOD__ );
-                       } catch ( DBQueryError $e ) {
-                               $this->handleWriteError( $e );
+               $dataRows = array();
+               foreach ( $keysByTableName as $tableName => $tableKeys ) {
+                       $res = $db->select( $tableName,
+                               array( 'keyname', 'value', 'exptime' ),
+                               array( 'keyname' => $tableKeys ),
+                               __METHOD__ );
+                       foreach ( $res as $row ) {
+                               $dataRows[$row->keyname] = $row;
                        }
+               }
 
-                       return false;
+               foreach ( $keys as $key ) {
+                       if ( isset( $dataRows[$key] ) ) { // HIT?
+                               $row = $dataRows[$key];
+                               $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+                               if ( $this->isExpired( $row->exptime ) ) { // MISS
+                                       $this->debug( "get: key has expired, deleting" );
+                                       try {
+                                               $db->begin( __METHOD__ );
+                                               # Put the expiry time in the WHERE condition to avoid deleting a
+                                               # newly-inserted value
+                                               $db->delete( $this->getTableByKey( $key ),
+                                                       array( 'keyname' => $key, 'exptime' => $row->exptime ),
+                                                       __METHOD__ );
+                                               $db->commit( __METHOD__ );
+                                       } catch ( DBQueryError $e ) {
+                                               $this->handleWriteError( $e );
+                                       }
+                                       $values[$key] = false;
+                               } else { // HIT
+                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+                               }
+                       } else { // MISS
+                               $values[$key] = false;
+                               $this->debug( 'get: no matching rows' );
+                       }
                }
 
-               return $this->unserialize( $db->decodeBlob( $row->value ) );
+               return $values;
        }
 
        public function set( $key, $value, $exptime = 0 ) {
@@ -328,7 +373,7 @@ class SqlBagOStuff extends BagOStuff {
                                        if ( $maxExpTime !== false ) {
                                                $conds[] = 'exptime > ' . $db->addQuotes( $maxExpTime );
                                        }
-                                       $rows = $db->select( 
+                                       $rows = $db->select(
                                                $this->getTableByShard( $i ),
                                                array( 'keyname', 'exptime' ),
                                                $conds,
@@ -352,7 +397,7 @@ class SqlBagOStuff extends BagOStuff {
                                        $db->begin( __METHOD__ );
                                        $db->delete(
                                                $this->getTableByShard( $i ),
-                                               array( 
+                                               array(
                                                        'exptime >= ' . $db->addQuotes( $minExpTime ),
                                                        'exptime < ' . $db->addQuotes( $dbTimestamp ),
                                                        'keyname' => $keys
@@ -364,12 +409,12 @@ class SqlBagOStuff extends BagOStuff {
                                                if ( intval( $totalSeconds ) === 0 ) {
                                                        $percent = 0;
                                                } else {
-                                                       $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp ) 
+                                                       $remainingSeconds = wfTimestamp( TS_UNIX, $timestamp )
                                                                - wfTimestamp( TS_UNIX, $maxExpTime );
                                                        if ( $remainingSeconds > $totalSeconds ) {
                                                                $totalSeconds = $remainingSeconds;
                                                        }
-                                                       $percent = ( $i + $remainingSeconds / $totalSeconds ) 
+                                                       $percent = ( $i + $remainingSeconds / $totalSeconds )
                                                                / $this->shards * 100;
                                                }
                                                call_user_func( $progressCallback, $percent );
index 7f46494..4fd3cf4 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using WinCache.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Wrapper for WinCache object caching functions; identical interface
index 0ddf124..08f52b7 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Object caching using XCache.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
 
 /**
  * Wrapper for XCache object caching functions; identical interface
index 8de1327..4bfa9d3 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Link functions provided by MediaWiki core; experimental
  *
+ * 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 Parser
  */
 
 /**
index 8be9946..912de41 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Parser functions provided by MediaWiki core
  *
+ * 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 Parser
  */
 
 /**
index 7d488c4..296be66 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Tag hooks provided by MediaWiki core
  *
+ * 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 Parser
  */
 
 /**
index 2199004..1638fb0 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Date formatter
  *
+ * 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 Parser
  */
 
 /**
index b5d5cb4..def1aee 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Holder of replacement pairs for wiki links
  *
+ * 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 Parser
  */
 
 /**
index 56197ea..fa98dbf 100644 (file)
@@ -1,12 +1,29 @@
 <?php
 /**
- * @defgroup Parser Parser
+ * PHP parser that converts wiki markup to HTML.
+ *
+ * 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 Parser
- * File for Parser and related classes
  */
 
+/**
+ * @defgroup Parser Parser
+ */
 
 /**
  * PHP Parser - Processes wiki markup (which uses a more user-friendly
@@ -144,7 +161,7 @@ class Parser {
        var $mLinkHolders;
 
        var $mLinkID;
-       var $mIncludeSizes, $mPPNodeCount, $mDefaultSort;
+       var $mIncludeSizes, $mPPNodeCount, $mHighestExpansionDepth, $mDefaultSort;
        var $mTplExpandCache; # empty-frame expansion cache
        var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
        var $mExpensiveFunctionCount; # number of expensive parser function calls
@@ -287,6 +304,7 @@ class Parser {
                        'arg' => 0,
                );
                $this->mPPNodeCount = 0;
+               $this->mHighestExpansionDepth = 0;
                $this->mDefaultSort = false;
                $this->mHeadings = array();
                $this->mDoubleUnderscores = array();
@@ -445,9 +463,12 @@ class Parser {
                                array_values( $tidyregs ),
                                $text );
                }
-               global $wgExpensiveParserFunctionLimit;
-               if ( $this->mExpensiveFunctionCount > $wgExpensiveParserFunctionLimit ) {
-                       $this->limitationWarn( 'expensive-parserfunction', $this->mExpensiveFunctionCount, $wgExpensiveParserFunctionLimit );
+
+               if ( $this->mExpensiveFunctionCount > $this->mOptions->getExpensiveParserFunctionLimit() ) {
+                       $this->limitationWarn( 'expensive-parserfunction',
+                               $this->mExpensiveFunctionCount,
+                               $this->mOptions->getExpensiveParserFunctionLimit()
+                       );
                }
 
                wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) );
@@ -455,12 +476,13 @@ class Parser {
                # Information on include size limits, for the benefit of users who try to skirt them
                if ( $this->mOptions->getEnableLimitReport() ) {
                        $max = $this->mOptions->getMaxIncludeSize();
-                       $PFreport = "Expensive parser function count: {$this->mExpensiveFunctionCount}/$wgExpensiveParserFunctionLimit\n";
+                       $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" .
                                "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";
@@ -707,8 +729,8 @@ class Parser {
        }
 
        /**
-        * Get the target language for the content being parsed. This is usually the 
-        * language that the content is in. 
+        * Get the target language for the content being parsed. This is usually the
+        * language that the content is in.
         */
        function getTargetLanguage() {
                $target = $this->mOptions->getTargetLanguage();
@@ -1254,7 +1276,7 @@ class Parser {
                $text = $this->maybeMakeExternalImage( $url );
                if ( $text === false ) {
                        # Not an image, make a link
-                       $text = Linker::makeExternalLink( $url, 
+                       $text = Linker::makeExternalLink( $url,
                                $this->getConverterLanguage()->markNoConversion($url), true, 'free',
                                $this->getExternalLinkAttribs( $url ) );
                        # Register it in the output object...
@@ -1735,7 +1757,7 @@ class Parser {
                }
 
                if ( $this->getConverterLanguage()->hasVariants() ) {
-                       $selflink = $this->getConverterLanguage()->autoConvertToAllVariants( 
+                       $selflink = $this->getConverterLanguage()->autoConvertToAllVariants(
                                $this->mTitle->getPrefixedText() );
                } else {
                        $selflink = array( $this->mTitle->getPrefixedText() );
@@ -3054,7 +3076,7 @@ class Parser {
         * @private
         */
        function braceSubstitution( $piece, $frame ) {
-               global $wgNonincludableNamespaces, $wgContLang;
+               global $wgContLang;
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__.'-setup' );
 
@@ -3249,8 +3271,11 @@ class Parser {
 
                # Load from database
                if ( !$found && $title ) {
-                       $titleProfileIn = __METHOD__ . "-title-" . $title->getDBKey();
-                       wfProfileIn( $titleProfileIn ); // template in
+                       if ( !Profiler::instance()->isPersistent() ) {
+                               # Too many unique items can kill profiling DBs/collectors
+                               $titleProfileIn = __METHOD__ . "-title-" . $title->getDBKey();
+                               wfProfileIn( $titleProfileIn ); // template in
+                       }
                        wfProfileIn( __METHOD__ . '-loadtpl' );
                        if ( !$title->isExternal() ) {
                                if ( $title->isSpecialPage()
@@ -3284,7 +3309,7 @@ class Parser {
                                                $isHTML = true;
                                                $this->disableCache();
                                        }
-                               } elseif ( $wgNonincludableNamespaces && in_array( $title->getNamespace(), $wgNonincludableNamespaces ) ) {
+                               } elseif ( MWNamespace::isNonincludable( $title->getNamespace() ) ) {
                                        $found = false; # access denied
                                        wfDebug( __METHOD__.": template inclusion denied for " . $title->getPrefixedDBkey() );
                                } else {
@@ -3811,12 +3836,8 @@ class Parser {
         * @return Boolean: false if the limit has been exceeded
         */
        function incrementExpensiveFunctionCount() {
-               global $wgExpensiveParserFunctionLimit;
                $this->mExpensiveFunctionCount++;
-               if ( $this->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit ) {
-                       return true;
-               }
-               return false;
+               return $this->mExpensiveFunctionCount <= $this->mOptions->getExpensiveParserFunctionLimit();
        }
 
        /**
@@ -4377,8 +4398,7 @@ class Parser {
                ) );
 
                # Context links: [[|name]] and [[name (context)|]]
-               global $wgLegalTitleChars;
-               $tc = "[$wgLegalTitleChars]";
+               $tc = '[' . Title::legalChars() . ']';
                $nc = '[ _0-9A-Za-z\x80-\xff-]'; # Namespaces can use non-ascii!
 
                $p1 = "/\[\[(:?$nc+:|:|)($tc+?)( ?\\($tc+\\))\\|]]/";           # [[ns:page (context)|]]
index a8899cb..bb99039 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Cache for outputs of the PHP parser
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
+ * @ingroup Cache Parser
  */
 
 /**
index bf9611f..211fcd6 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * \brief Options for the PHP parser
+ * Options for the PHP parser
+ *
+ * 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 Parser
@@ -90,6 +105,11 @@ class ParserOptions {
         */
        var $mMaxTemplateDepth;
        
+       /**
+        * Maximum number of calls per parse to expensive parser functions
+        */
+       var $mExpensiveParserFunctionLimit;
+       
        /**
         * Remove HTML comments. ONLY APPLIES TO PREPROCESS OPERATIONS
         */
@@ -201,6 +221,8 @@ class ParserOptions {
        function getMaxPPNodeCount()                { return $this->mMaxPPNodeCount; }
        function getMaxPPExpandDepth()              { return $this->mMaxPPExpandDepth; }
        function getMaxTemplateDepth()              { return $this->mMaxTemplateDepth; }
+       /* @since 1.20 */
+       function getExpensiveParserFunctionLimit()  { return $this->mExpensiveParserFunctionLimit; }
        function getRemoveComments()                { return $this->mRemoveComments; }
        function getTemplateCallback()              { return $this->mTemplateCallback; }
        function getEnableLimitReport()             { return $this->mEnableLimitReport; }
@@ -286,6 +308,8 @@ class ParserOptions {
        function setMaxIncludeSize( $x )            { return wfSetVar( $this->mMaxIncludeSize, $x ); }
        function setMaxPPNodeCount( $x )            { return wfSetVar( $this->mMaxPPNodeCount, $x ); }
        function setMaxTemplateDepth( $x )          { return wfSetVar( $this->mMaxTemplateDepth, $x ); }
+       /* @since 1.20 */
+       function setExpensiveParserFunctionLimit( $x ) { return wfSetVar( $this->mExpensiveParserFunctionLimit, $x ); }
        function setRemoveComments( $x )            { return wfSetVar( $this->mRemoveComments, $x ); }
        function setTemplateCallback( $x )          { return wfSetVar( $this->mTemplateCallback, $x ); }
        function enableLimitReport( $x = true )     { return wfSetVar( $this->mEnableLimitReport, $x ); }
@@ -380,7 +404,7 @@ class ParserOptions {
                global $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages,
                        $wgAllowExternalImagesFrom, $wgEnableImageWhitelist, $wgAllowSpecialInclusion,
                        $wgMaxArticleSize, $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth,
-                       $wgCleanSignatures, $wgExternalLinkTarget;
+                       $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit;
 
                wfProfileIn( __METHOD__ );
 
@@ -394,6 +418,7 @@ class ParserOptions {
                $this->mMaxPPNodeCount = $wgMaxPPNodeCount;
                $this->mMaxPPExpandDepth = $wgMaxPPExpandDepth;
                $this->mMaxTemplateDepth = $wgMaxTemplateDepth;
+               $this->mExpensiveParserFunctionLimit = $wgExpensiveParserFunctionLimit;
                $this->mCleanSignatures = $wgCleanSignatures;
                $this->mExternalLinkTarget = $wgExternalLinkTarget;
 
index 1b1715b..d0d1ff2 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Output of the PHP parser
  *
+ * 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 Parser
  */
@@ -10,7 +25,6 @@
  * @todo document
  * @ingroup Parser
  */
-
 class CacheTime {
        var     $mVersion = Parser::VERSION,  # Compatibility check
                $mCacheTime = '',             # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
index efad33f..f25340f 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Fake parser that output the difference of two different parsers
  *
+ * 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 Parser
  */
 
 /**
index 244890f..9555bdb 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Modified version of the PHP parser with hooks for wiki links; experimental
  *
+ * 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 Parser
  */
 
 /**
index ae088fd..3d2f2f8 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * Interfaces for preprocessors
  *
+ * 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 Parser
  */
 
 /**
index 18bd01c..602d88f 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Preprocessor using PHP's dom extension
  *
+ * 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 Parser
  */
@@ -974,6 +989,9 @@ class PPFrame_DOM implements PPFrame {
                }
                wfProfileIn( __METHOD__ );
                ++$expansionDepth;
+               if ( $expansionDepth > $this->parser->mHighestExpansionDepth ) {
+                       $this->parser->mHighestExpansionDepth = $expansionDepth;
+               }
 
                if ( $root instanceof PPNode_DOM ) {
                        $root = $root->node;
index 4acb124..dc2d63a 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Preprocessor using PHP arrays
  *
+ * 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 Parser
  */
@@ -929,6 +944,9 @@ class PPFrame_Hash implements PPFrame {
                        return '<span class="error">Expansion depth limit exceeded</span>';
                }
                ++$expansionDepth;
+               if ( $expansionDepth > $this->parser->mHighestExpansionDepth ) {
+                       $this->parser->mHighestExpansionDepth = $expansionDepth;
+               }
 
                $outStack = array( '', '' );
                $iteratorStack = array( false, $root );
index a23168a..b30b096 100644 (file)
@@ -3,6 +3,21 @@
  * A preprocessor optimised for HipHop, using HipHop-specific syntax.
  * vim: ft=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 Parser
  */
@@ -1087,6 +1102,9 @@ class PPFrame_HipHop implements PPFrame {
                        return '<span class="error">Expansion depth limit exceeded</span>';
                }
                ++$expansionDepth;
+               if ( $expansionDepth > $this->parser->mHighestExpansionDepth ) {
+                       $this->parser->mHighestExpansionDepth = $expansionDepth;
+               }
 
                $outStack = array( '', '' );
                $iteratorStack = array( false, $root );
index 7ad80fa..b08aa14 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Holder for stripped items when parsing wiki markup.
+ *
+ * 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 Parser
+ */
 
 /**
  * @todo document, briefly.
@@ -10,6 +31,10 @@ class StripState {
        protected $regex;
 
        protected $tempType, $tempMergePrefix;
+       protected $circularRefGuard;
+       protected $recursionLevel = 0;
+
+       const UNSTRIP_RECURSION_LIMIT = 20;
 
        /**
         * @param $prefix string
@@ -21,6 +46,7 @@ class StripState {
                        'general' => array()
                );
                $this->regex = "/{$this->prefix}([^\x7f]+)" . Parser::MARKER_SUFFIX . '/';
+               $this->circularRefGuard = array();
        }
 
        /**
@@ -92,12 +118,10 @@ class StripState {
                }
 
                wfProfileIn( __METHOD__ );
+               $oldType = $this->tempType;
                $this->tempType = $type;
-               do {
-                       $oldText = $text;
-                       $text = preg_replace_callback( $this->regex, array( $this, 'unstripCallback' ), $text );
-               } while ( $text !== $oldText );
-               $this->tempType = null;
+               $text = preg_replace_callback( $this->regex, array( $this, 'unstripCallback' ), $text );
+               $this->tempType = $oldType;
                wfProfileOut( __METHOD__ );
                return $text;
        }
@@ -107,8 +131,22 @@ class StripState {
         * @return array
         */
        protected function unstripCallback( $m ) {
-               if ( isset( $this->data[$this->tempType][$m[1]] ) ) {
-                       return $this->data[$this->tempType][$m[1]];
+               $marker = $m[1];
+               if ( isset( $this->data[$this->tempType][$marker] ) ) {
+                       if ( isset( $this->circularRefGuard[$marker] ) ) {
+                               return '<span class="error">' . wfMsgForContent( 'parser-unstrip-loop-warning' ) . '</span>';
+                       }
+                       if ( $this->recursionLevel >= self::UNSTRIP_RECURSION_LIMIT ) {
+                               return '<span class="error">' . 
+                                       wfMsgForContent( 'parser-unstrip-recursion-limit', self::UNSTRIP_RECURSION_LIMIT ) . 
+                                       '</span>';
+                       }
+                       $this->circularRefGuard[$marker] = true;
+                       $this->recursionLevel++;
+                       $ret = $this->unstripType( $this->tempType, $this->data[$this->tempType][$marker] );
+                       $this->recursionLevel--;
+                       unset( $this->circularRefGuard[$marker] );
+                       return $ret;
                } else {
                        return $m[0];
                }
index 8bd80b2..ed2d436 100644 (file)
@@ -2,7 +2,23 @@
 /**
  * HTML validation and correction
  *
+ * 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 Parser
  */
 
 /**
@@ -14,6 +30,8 @@
  *
  * This re-uses some of the parser's UNIQ tricks, though some of it is private so it's
  * duplicated. Perhaps we should create an abstract marker hiding class.
+ *
+ * @ingroup Parser
  */
 class MWTidyWrapper {
 
index f2054b5..62be39e 100644 (file)
@@ -114,6 +114,16 @@ class Profiler {
                return false;
        }
 
+       /**
+        * Return whether this profiler stores data
+        *
+        * @see Profiler::logData()
+        * @return Boolean
+        */
+       public function isPersistent() {
+               return true;
+       }
+
        public function setProfileID( $id ) {
                $this->mProfileID = $id;
        }
@@ -479,7 +489,7 @@ class Profiler {
                }
                wfProfileOut( '-overhead-total' );
        }
-       
+
        /**
         * Counts the number of profiled function calls sitting under
         * the given point in the call graph. Not the most efficient algo.
@@ -549,7 +559,7 @@ class Profiler {
                        $rc = $dbw->affectedRows();
                        if ( $rc == 0 ) {
                                $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount,
-                                       'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ), 
+                                       'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ),
                                        __METHOD__, array ('IGNORE'));
                        }
                        // When we upgrade to mysql 4.1, the insert+update
index 82197fd..d1d1c5d 100644 (file)
@@ -32,6 +32,11 @@ class ProfilerSimple extends Profiler {
        var $zeroEntry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0);
        var $errorEntry;
 
+       public function isPersistent() {
+               /* Implement in output subclasses */
+               return false;
+       }
+
        protected function addInitialStack() {
                $this->errorEntry = $this->zeroEntry;
                $this->errorEntry['count'] = 1;
index f14139e..822e9fe 100644 (file)
@@ -61,7 +61,7 @@ class ProfilerSimpleTrace extends ProfilerSimple {
                                        str_repeat(" ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
                }
        }
-       
+
        function memoryDiff() {
                $diff = memory_get_usage() - $this->memory;
                $this->memory = memory_get_usage();
index 0de3a85..a95ccb0 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleUDP extends ProfilerSimple {
+       public function isPersistent() {
+               return true;
+       }
+
        public function logData() {
                global $wgUDPProfilerHost, $wgUDPProfilerPort;
 
index a498860..c0eb0fb 100644 (file)
@@ -30,6 +30,9 @@ class ProfilerStub extends Profiler {
        public function isStub() {
                return true;
        }
+       public function isPersistent() {
+               return false;
+       }
        public function profileIn( $fn ) {}
        public function profileOut( $fn ) {}
        public function getOutput() {}
index 71b2c59..42fd873 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Base class for resource loading system.
+ *
  * 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
@@ -239,9 +241,9 @@ class ResourceLoader {
                                );
                        }
 
-                       // Check $name for illegal characters
-                       if ( preg_match( '/[|,!]/', $name ) ) {
-                               throw new MWException( "ResourceLoader module name '$name' is invalid. Names may not contain pipes (|), commas (,) or exclamation marks (!)" );
+                       // Check $name for validity
+                       if ( !self::isValidModuleName( $name ) ) {
+                               throw new MWException( "ResourceLoader module name '$name' is invalid, see ResourceLoader::isValidModuleName()" );
                        }
 
                        // Attach module
@@ -599,7 +601,7 @@ class ResourceLoader {
        /**
         * Send out code for a response from file cache if possible
         *
-        * @param $fileCache ObjectFileCache: Cache object for this request URL
+        * @param $fileCache ResourceFileCache: Cache object for this request URL
         * @param $context ResourceLoaderContext: Context in which to generate a response
         * @return bool If this found a cache file and handled the response
         */
@@ -1097,4 +1099,17 @@ class ResourceLoader {
                ksort( $query );
                return $query;
        }
+
+       /**
+        * Check a module name for validity.
+        *
+        * Module names may not contain pipes (|), commas (,) or exclamation marks (!) and can be
+        * at most 255 bytes.
+        *
+        * @param $moduleName string Module name to check
+        * @return bool Whether $moduleName is a valid module name
+        */
+       public static function isValidModuleName( $moduleName ) {
+               return !preg_match( '/[|,!]/', $moduleName ) && strlen( $moduleName ) <= 255;
+       }
 }
index dd69bb0..4e28e76 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Context for resource loader 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
index 3d657e1..e8542ac 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module based on local JavaScript/CSS files.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
index e3b719b..61ed520 100644 (file)
@@ -1,4 +1,25 @@
 <?php
+/**
+ * Resource loader module for MediaWiki:Filepage.css
+ *
+ * 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
+ */
+
 /**
  * ResourceLoader definition for MediaWiki:Filepage.css
  */
index e1d6fb4..4eb38f6 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for populating language specific data.
+ *
  * 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
index 1a232ec..fa76a25 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Abstraction for resource loader 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
index 28f629a..8e81c8d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader for site customizations for users without JavaScript 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
  * the Free Software Foundation; either version 2 of the License, or
index 2527a0a..03fe1fe 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for site customizations.
+ *
  * 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
index 3384631..74724a6 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Module for resource loader initialization.
+ *
  * 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
index ccfc378..139048c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user preference customizations.
+ *
  * 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
index b5d96ca..1316f42 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user customizations.
+ *
  * 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
@@ -34,7 +36,7 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
                global $wgUser;
 
                $userName = $context->getUser();
-               if ( !$userName ) {
+               if ( $userName === null ) {
                        return array();
                }
 
index 9fa9bce..177302c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user customizations.
+ *
  * 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
@@ -35,7 +37,7 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
        protected function getPages( ResourceLoaderContext $context ) {
                $username = $context->getUser();
 
-               if ( !$username ) {
+               if ( $username === null ) {
                        return array();
                }
 
index 933c55e..4624cbc 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user preference customizations.
+ *
  * 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
index 852cc2c..62d096a 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user tokens.
+ *
  * 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
index 6b7bffa..a5ccccf 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Abstraction for resource loader modules which pull from wiki pages.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
index 2c55980..517270a 100644 (file)
@@ -216,7 +216,8 @@ class RevDel_RevisionItem extends RevDel_Item {
         * @return string
         */
        protected function getRevisionLink() {
-               $date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->revision->getTimestamp(), $this->list->getUser() );
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $date;
                }
@@ -238,12 +239,12 @@ class RevDel_RevisionItem extends RevDel_Item {
         */
        protected function getDiffLink() {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
-                       return wfMsgHtml('diff');
+                       return $this->list->msg( 'diff' )->escaped();
                } else {
                        return
                                Linker::link(
                                        $this->list->title,
-                                       wfMsgHtml('diff'),
+                                       $this->list->msg( 'diff' )->escaped(),
                                        array(),
                                        array(
                                                'diff' => $this->revision->getId(),
@@ -364,7 +365,8 @@ class RevDel_ArchiveItem extends RevDel_RevisionItem {
 
        protected function getRevisionLink() {
                $undelete = SpecialPage::getTitleFor( 'Undelete' );
-               $date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->revision->getTimestamp(), $this->list->getUser() );
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $date;
                }
@@ -377,10 +379,10 @@ class RevDel_ArchiveItem extends RevDel_RevisionItem {
 
        protected function getDiffLink() {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
-                       return wfMsgHtml( 'diff' );
+                       return $this->list->msg( 'diff' )->escaped();
                }
                $undelete = SpecialPage::getTitleFor( 'Undelete' );
-               return Linker::link( $undelete, wfMsgHtml('diff'), array(),
+               return Linker::link( $undelete, $this->list->msg( 'diff' )->escaped(), array(),
                        array(
                                'target' => $this->list->title->getPrefixedText(),
                                'diff' => 'prev',
@@ -596,7 +598,8 @@ class RevDel_FileItem extends RevDel_Item {
         * @return string
         */
        protected function getLink() {
-               $date = $this->list->getLanguage()->timeanddate( $this->file->getTimestamp(), true  );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->file->getTimestamp(), $this->list->getUser() );
                if ( $this->isDeleted() ) {
                        # Hidden files...
                        if ( !$this->canViewContent() ) {
@@ -629,7 +632,7 @@ class RevDel_FileItem extends RevDel_Item {
                        $link = Linker::userLink( $this->file->user, $this->file->user_text ) .
                                Linker::userToolLinks( $this->file->user, $this->file->user_text );
                } else {
-                       $link = wfMsgHtml( 'rev-deleted-user' );
+                       $link = $this->list->msg( 'rev-deleted-user' )->escaped();
                }
                if( $this->file->isDeleted( Revision::DELETED_USER ) ) {
                        return '<span class="history-deleted">' . $link . '</span>';
@@ -647,7 +650,7 @@ class RevDel_FileItem extends RevDel_Item {
                if( $this->file->userCan( File::DELETED_COMMENT, $this->list->getUser() ) ) {
                        $block = Linker::commentBlock( $this->file->description );
                } else {
-                       $block = ' ' . wfMsgHtml( 'rev-deleted-comment' );
+                       $block = ' ' . $this->list->msg( 'rev-deleted-comment' )->escaped();
                }
                if( $this->file->isDeleted( File::DELETED_COMMENT ) ) {
                        return "<span class=\"history-deleted\">$block</span>";
@@ -657,14 +660,9 @@ class RevDel_FileItem extends RevDel_Item {
 
        public function getHTML() {
                $data =
-                       wfMsg(
-                               'widthheight',
-                               $this->list->getLanguage()->formatNum( $this->file->getWidth() ),
-                               $this->list->getLanguage()->formatNum( $this->file->getHeight() )
-                       ) .
-                       ' (' .
-                       wfMsgExt( 'nbytes', 'parsemag', $this->list->getLanguage()->formatNum( $this->file->getSize() ) ) .
-                       ')';
+                       $this->list->msg( 'widthheight' )->numParams(
+                               $this->file->getWidth(), $this->file->getHeight() )->text() .
+                       ' (' . $this->list->msg( 'nbytes' )->numParams( $this->file->getSize() )->text() . ')';
 
                return '<li>' . $this->getLink() . ' ' . $this->getUserTools() . ' ' .
                        $data . ' ' . $this->getComment(). '</li>';
@@ -747,7 +745,8 @@ class RevDel_ArchivedFileItem extends RevDel_FileItem {
        }
 
        protected function getLink() {
-               $date = $this->list->getLanguage()->timeanddate( $this->file->getTimestamp(), true  );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->file->getTimestamp(), $this->list->getUser() );
                $undelete = SpecialPage::getTitleFor( 'Undelete' );
                $key = $this->file->getKey();
                # Hidden files...
@@ -872,15 +871,17 @@ class RevDel_LogItem extends RevDel_Item {
        }
 
        public function getHTML() {
-               $date = htmlspecialchars( $this->list->getLanguage()->timeanddate( $this->row->log_timestamp ) );
+               $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
+                       $this->row->log_timestamp, $this->list->getUser() ) );
                $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
                $formatter = LogFormatter::newFromRow( $this->row );
+               $formatter->setContext( $this->list->getContext() );
                $formatter->setAudience( LogFormatter::FOR_THIS_USER );
 
                // Log link for this page
                $loglink = Linker::link(
                        SpecialPage::getTitleFor( 'Log' ),
-                       wfMsgHtml( 'log' ),
+                       $this->list->msg( 'log' )->escaped(),
                        array(),
                        array( 'page' => $title->getPrefixedText() )
                );
index 31a3994..0f8b255 100644 (file)
@@ -477,7 +477,7 @@ class SpecialAllpages extends IncludableSpecialPage {
 
                        if( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
                                # $s is the first link of the next chunk
-                               $t = Title::MakeTitle($namespace, $s->page_title);
+                               $t = Title::makeTitle($namespace, $s->page_title);
                                $query = array( 'from' => $t->getText() );
 
                                if( $namespace )
index a58e62e..4d74fe1 100644 (file)
@@ -277,7 +277,7 @@ class SpecialBlock extends FormSpecialPage {
                        }
 
                        $this->alreadyBlocked = true;
-                       $this->preErrors[] = array( 'ipb-needreblock', (string)$block->getTarget() );
+                       $this->preErrors[] = array( 'ipb-needreblock', wfEscapeWikiText( (string)$block->getTarget() ) );
                }
 
                # We always need confirmation to do HideUser
@@ -349,7 +349,7 @@ class SpecialBlock extends FormSpecialPage {
 
                # Link to unblock the specified user, or to a blank unblock form
                if( $this->target instanceof User ) {
-                       $message = $this->msg( 'ipb-unblock-addr', $this->target->getName() )->parse();
+                       $message = $this->msg( 'ipb-unblock-addr', wfEscapeWikiText( $this->target->getName() ) )->parse();
                        $list = SpecialPage::getTitleFor( 'Unblock', $this->target->getName() );
                } else {
                        $message = $this->msg( 'ipb-unblock' )->parse();
@@ -904,7 +904,7 @@ class SpecialBlock extends FormSpecialPage {
        public function onSuccess() {
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'blockipsuccesssub' ) );
-               $out->addWikiMsg( 'blockipsuccesstext',  $this->target );
+               $out->addWikiMsg( 'blockipsuccesstext', wfEscapeWikiText( $this->target ) );
        }
 }
 
index e84118b..1b7494f 100644 (file)
@@ -54,6 +54,9 @@ class SpecialContributions extends SpecialPage {
                if ( $request->getVal( 'contribs' ) == 'newbie' ) {
                        $target = 'newbies';
                        $this->opts['contribs'] = 'newbie';
+               } elseif ( $par === 'newbies' ) { // b/c for WMF
+                       $target = 'newbies';
+                       $this->opts['contribs'] = 'newbie';
                } else {
                        $this->opts['contribs'] = 'user';
                }
@@ -654,7 +657,7 @@ class ContribsPager extends ReverseChronologicalPager {
                        } else {
                                $condition['rev_user_text'] = $this->target;
                                $index = 'usertext_timestamp';
-                       } 
+                       }
                }
                if ( $this->deletedOnly ) {
                        $condition[] = "rev_deleted != '0'";
index df7e7af..7677095 100644 (file)
@@ -75,7 +75,8 @@ class FewestrevisionsPage extends QueryPage {
 
                $nt = Title::makeTitleSafe( $result->namespace, $result->title );
                if( !$nt ) {
-                       return '<!-- bad title -->';
+                       return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                               Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
                }
 
                $text = htmlspecialchars( $wgContLang->convert( $nt->getPrefixedText() ) );
index c145351..d71ac6e 100644 (file)
@@ -87,13 +87,11 @@ class SpecialLockdb extends FormSpecialPage {
                }
                fwrite( $fp, $data['Reason'] );
                $timestamp = wfTimestampNow();
-               fwrite( $fp, "\n<p>" . wfMsgExt(
-                       'lockedbyandtime',
-                       array( 'content', 'parsemag' ),
+               fwrite( $fp, "\n<p>" . $this->msg( 'lockedbyandtime',
                        $this->getUser()->getName(),
-                       $wgContLang->date( $timestamp ),
-                       $wgContLang->time( $timestamp )
-               ) . "</p>\n" );
+                       $wgContLang->date( $timestamp, false, false ),
+                       $wgContLang->time( $timestamp, false, false )
+               )->inContentLanguage()->text() . "</p>\n" );
                fclose( $fp );
 
                return Status::newGood();
index 64190df..177b34d 100644 (file)
@@ -152,9 +152,7 @@ class SpecialLog extends SpecialPage {
                if ( $logBody ) {
                        $this->getOutput()->addHTML(
                                $pager->getNavigationBar() .
-                               $loglist->beginLogEventsList() .
-                               $logBody .
-                               $loglist->endLogEventsList() .
+                               $this->getRevisionButton( $loglist->beginLogEventsList() . $logBody . $loglist->endLogEventsList() ) .
                                $pager->getNavigationBar()
                        );
                } else {
@@ -162,6 +160,29 @@ class SpecialLog extends SpecialPage {
                }
        }
 
+       private function getRevisionButton( $formcontents ) {
+               # If the user doesn't have the ability to delete revisions, don't bother showing him/her the button.
+               if ( !$this->getUser()->isAllowed( 'deleterevision' ) ) {
+                       return $formcontents;
+               }
+
+               # Show button to hide log entries
+               global $wgScript;
+               $s = Html::openElement( 'form', array( 'action' => $wgScript, 'id' => 'mw-log-deleterevision-submit' ) ) . "\n";
+               $s .= Html::hidden( 'title', SpecialPage::getTitleFor( 'Revisiondelete' ) ) . "\n";
+               $s .= Html::hidden( 'target', SpecialPage::getTitleFor( 'Log' ) ) . "\n";
+               $s .= Html::hidden( 'type', 'logging' ) . "\n";
+               $button = Html::element( 'button',
+                       array( 'type' => 'submit', 'class' => "deleterevision-log-submit mw-log-deleterevision-button" ),
+                       $this->msg( 'showhideselectedversions' )->text()
+               ) . "\n";
+               $s .= $button . $formcontents . $button;
+               $s .= Html::closeElement( 'form' );
+
+               return $s;
+       }
+
+
        /**
         * Set page title and show header for this log type
         * @param $type string
index 1bcbac7..44097c8 100644 (file)
@@ -432,7 +432,7 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function feedItem( $row ) {
-               $title = Title::MakeTitle( intval( $row->rc_namespace ), $row->rc_title );
+               $title = Title::makeTitle( intval( $row->rc_namespace ), $row->rc_title );
                if( $title ) {
                        $date = $row->rc_timestamp;
                        $comments = $title->getTalkPage()->getFullURL();
index 0b6239b..307088e 100644 (file)
@@ -85,7 +85,7 @@ class RandomPage extends SpecialPage {
                $nsNames = array();
                foreach( $this->namespaces as $n ) {
                        if( $n === NS_MAIN ) {
-                               $nsNames[] = wfMsgNoTrans( 'blanknamespace' );
+                               $nsNames[] = $this->msg( 'blanknamespace' )->plain();
                        } else {
                                $nsNames[] = $wgContLang->getNsText( $n );
                        }
index c05aaad..a7a87f0 100644 (file)
@@ -190,8 +190,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        public function getFeedObject( $feedFormat ){
                $changesFeed = new ChangesFeed( $feedFormat, 'rcfeed' );
                $formatter = $changesFeed->getFeedObject(
-                       wfMsgForContent( 'recentchanges' ),
-                       wfMsgForContent( 'recentchanges-feed-description' ),
+                       $this->msg( 'recentchanges' )->inContentLanguage()->text(),
+                       $this->msg( 'recentchanges-feed-description' )->inContentLanguage()->text(),
                        $this->getTitle()->getFullURL()
                );
                return array( $changesFeed, $formatter );
@@ -565,7 +565,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $extraOpts = $this->getExtraOptions( $opts );
                $extraOptsCount = count( $extraOpts );
                $count = 0;
-               $submit = ' ' . Xml::submitbutton( wfMsg( 'allpagessubmit' ) );
+               $submit = ' ' . Xml::submitbutton( $this->msg( 'allpagessubmit' )->text() );
 
                $out = Xml::openElement( 'table', array( 'class' => 'mw-recentchanges-table' ) );
                foreach( $extraOpts as $name => $optionRow ) {
@@ -596,7 +596,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $panelString = implode( "\n", $panel );
 
                $this->getOutput()->addHTML(
-                       Xml::fieldset( wfMsg( 'recentchanges-legend' ), $panelString, array( 'class' => 'rcoptions' ) )
+                       Xml::fieldset( $this->msg( 'recentchanges-legend' )->text(), $panelString, array( 'class' => 'rcoptions' ) )
                );
 
                $this->setBottomText( $opts );
@@ -636,7 +636,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $this->getOutput()->addWikiText(
                        Html::rawElement( 'p',
                                array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
-                               "\n" . wfMsgForContentNoTrans( 'recentchangestext' ) . "\n"
+                               "\n" . $this->msg( 'recentchangestext' )->inContentLanguage()->plain() . "\n"
                        ), 
                        /* $lineStart */ false,
                        /* $interface */ false
@@ -663,16 +663,16 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        array( 'selected' => $opts['namespace'], 'all' => '' ),
                        array( 'name' => 'namespace', 'id' => 'namespace' )
                );
-               $nsLabel = Xml::label( wfMsg( 'namespace' ), 'namespace' );
+               $nsLabel = Xml::label( $this->msg( 'namespace' )->text(), 'namespace' );
                $invert = Xml::checkLabel(
-                       wfMsg( 'invert' ), 'invert', 'nsinvert',
+                       $this->msg( 'invert' )->text(), 'invert', 'nsinvert',
                        $opts['invert'],
-                       array( 'title' => wfMsg( 'tooltip-invert' ) )
+                       array( 'title' => $this->msg( 'tooltip-invert' )->text() )
                );
                $associated = Xml::checkLabel(
-                       wfMsg( 'namespace_association' ), 'associated', 'nsassociated',
+                       $this->msg( 'namespace_association' )->text(), 'associated', 'nsassociated',
                        $opts['associated'],
-                       array( 'title' => wfMsg( 'tooltip-namespace_association' ) )
+                       array( 'title' => $this->msg( 'tooltip-namespace_association' )->text() )
                );
                return array( $nsLabel, "$nsSelect $invert $associated" );
        }
@@ -684,10 +684,10 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * @return Array
         */
        protected function categoryFilterForm( FormOptions $opts ) {
-               list( $label, $input ) = Xml::inputLabelSep( wfMsg( 'rc_categories' ),
+               list( $label, $input ) = Xml::inputLabelSep( $this->msg( 'rc_categories' )->text(),
                        'categories', 'mw-categories', false, $opts['categories'] );
 
-               $input .= ' ' . Xml::checkLabel( wfMsg( 'rc_categories_any' ),
+               $input .= ' ' . Xml::checkLabel( $this->msg( 'rc_categories_any' )->text(),
                        'categories_any', 'mw-categories_any', $opts['categories_any'] );
 
                return array( $label, $input );
@@ -788,16 +788,18 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $options = $nondefaults + $defaults;
 
                $note = '';
-               if( !wfEmptyMsg( 'rclegend' ) ) {
-                       $note .= '<div class="mw-rclegend">' .
-                               wfMsgExt( 'rclegend', array( 'parseinline' ) ) . "</div>\n";
+               $msg = $this->msg( 'rclegend' );
+               if( !$msg->isDisabled() ) {
+                       $note .= '<div class="mw-rclegend">' . $msg->parse() . "</div>\n";
                }
+
+               $lang = $this->getLanguage();
+               $user = $this->getUser();
                if( $options['from'] ) {
-                       $note .= wfMsgExt( 'rcnotefrom', array( 'parseinline' ),
-                               $this->getLanguage()->formatNum( $options['limit'] ),
-                               $this->getLanguage()->timeanddate( $options['from'], true ),
-                               $this->getLanguage()->date( $options['from'], true ),
-                               $this->getLanguage()->time( $options['from'], true ) ) . '<br />';
+                       $note .= $this->msg( 'rcnotefrom' )->numParams( $options['limit'] )->params(
+                               $lang->userTimeAndDate( $options['from'], $user ),
+                               $lang->userDate( $options['from'], $user ),
+                               $lang->userTime( $options['from'], $user ) )->parse() . '<br />';
                }
 
                # Sort data for display and make sure it's unique after we've added user data.
@@ -810,21 +812,21 @@ class SpecialRecentChanges extends IncludableSpecialPage {
 
                // limit links
                foreach( $wgRCLinkLimits as $value ) {
-                       $cl[] = $this->makeOptionsLink( $this->getLanguage()->formatNum( $value ),
+                       $cl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'limit' => $value ), $nondefaults, $value == $options['limit'] );
                }
-               $cl = $this->getLanguage()->pipeList( $cl );
+               $cl = $lang->pipeList( $cl );
 
                // day links, reset 'from' to none
                foreach( $wgRCLinkDays as $value ) {
-                       $dl[] = $this->makeOptionsLink( $this->getLanguage()->formatNum( $value ),
+                       $dl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'days' => $value, 'from' => '' ), $nondefaults, $value == $options['days'] );
                }
-               $dl = $this->getLanguage()->pipeList( $dl );
+               $dl = $lang->pipeList( $dl );
 
 
                // show/hide links
-               $showhide = array( wfMsg( 'show' ), wfMsg( 'hide' ) );
+               $showhide = array( $this->msg( 'show' )->text(), $this->msg( 'hide' )->text() );
                $filters = array(
                        'hideminor'     => 'rcshowhideminor',
                        'hidebots'      => 'rcshowhidebots',
@@ -837,7 +839,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        $filters[$key] = $params['msg'];
                }
                // Disable some if needed
-               if ( !$this->getUser()->useRCPatrol() ) {
+               if ( !$user->useRCPatrol() ) {
                        unset( $filters['hidepatrolled'] );
                }
 
@@ -845,19 +847,18 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                foreach ( $filters as $key => $msg ) {
                        $link = $this->makeOptionsLink( $showhide[1 - $options[$key]],
                                array( $key => 1-$options[$key] ), $nondefaults );
-                       $links[] = wfMsgHtml( $msg, $link );
+                       $links[] = $this->msg( $msg )->rawParams( $link )->escaped();
                }
 
                // show from this onward link
                $timestamp = wfTimestampNow();
-               $now = $this->getLanguage()->timeanddate( $timestamp, true );
+               $now = $lang->userTimeAndDate( $timestamp, $user );
                $tl = $this->makeOptionsLink(
                        $now, array( 'from' => $timestamp ), $nondefaults
                );
 
-               $rclinks = wfMsgExt( 'rclinks', array( 'parseinline', 'replaceafter' ),
-                       $cl, $dl, $this->getLanguage()->pipeList( $links ) );
-               $rclistfrom = wfMsgExt( 'rclistfrom', array( 'parseinline', 'replaceafter' ), $tl );
+               $rclinks = $this->msg( 'rclinks' )->rawParams( $cl, $dl, $lang->pipeList( $links ) )->parse();
+               $rclistfrom = $this->msg( 'rclistfrom' )->rawParams( $tl )->parse();
                return "{$note}$rclinks<br />$rclistfrom";
        }
 
index 238e181..9010e10 100644 (file)
@@ -54,8 +54,9 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
        public function getFeedObject( $feedFormat ){
                $feed = new ChangesFeed( $feedFormat, false );
                $feedObj = $feed->getFeedObject(
-                       wfMsgForContent( 'recentchangeslinked-title', $this->getTargetTitle()->getPrefixedText() ),
-                       wfMsgForContent( 'recentchangeslinked-feed' ),
+                       $this->msg( 'recentchangeslinked-title', $this->getTargetTitle()->getPrefixedText() )
+                               ->inContentLanguage()->text(),
+                       $this->msg( 'recentchangeslinked-feed' )->inContentLanguage()->text(),
                        $this->getTitle()->getFullUrl()
                );
                return array( $feed, $feedObj );
@@ -224,10 +225,10 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                $opts->consumeValues( array( 'showlinkedto', 'target', 'tagfilter' ) );
                $extraOpts = array();
                $extraOpts['namespace'] = $this->namespaceFilterForm( $opts );
-               $extraOpts['target'] = array( wfMsgHtml( 'recentchangeslinked-page' ),
+               $extraOpts['target'] = array( $this->msg( 'recentchangeslinked-page' )->escaped(),
                        Xml::input( 'target', 40, str_replace('_',' ',$opts['target']) ) .
                        Xml::check( 'showlinkedto', $opts['showlinkedto'], array('id' => 'showlinkedto') ) . ' ' .
-                       Xml::label( wfMsg("recentchangeslinked-to"), 'showlinkedto' ) );
+                       Xml::label( $this->msg( 'recentchangeslinked-to' )->text(), 'showlinkedto' ) );
                $tagFilter = ChangeTags::buildTagFilterSelector( $opts['tagfilter'] );
                if ($tagFilter) {
                        $extraOpts['tagfilter'] = $tagFilter;
index 0388f5b..d089c73 100644 (file)
@@ -221,7 +221,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $links = array();
                        $links[] = Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Log' ),
-                               wfMsgHtml( 'viewpagelogs' ),
+                               $this->msg( 'viewpagelogs' )->escaped(),
                                array(),
                                array( 'page' => $this->targetObj->getPrefixedText() )
                        );
@@ -229,7 +229,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                # Give a link to the page history
                                $links[] = Linker::linkKnown(
                                        $this->targetObj,
-                                       wfMsgHtml( 'pagehist' ),
+                                       $this->msg( 'pagehist' )->escaped(),
                                        array(),
                                        array( 'action' => 'history' )
                                );
@@ -238,7 +238,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                        $undelete = SpecialPage::getTitleFor( 'Undelete' );
                                        $links[] = Linker::linkKnown(
                                                $undelete,
-                                               wfMsgHtml( 'deletedhist' ),
+                                               $this->msg( 'deletedhist' )->escaped(),
                                                array(),
                                                array( 'target' => $this->targetObj->getPrefixedDBkey() )
                                        );
@@ -276,7 +276,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $this->getOutput()->addWikiMsg( 'revdelete-no-file' );
                        return;
                }
-               if( !$oimage->userCan( File::DELETED_FILE, $this->getUser() ) ) {
+               $user = $this->getUser();
+               if( !$oimage->userCan( File::DELETED_FILE, $user ) ) {
                        if( $oimage->isDeleted( File::DELETED_RESTRICTED ) ) {
                                $this->getOutput()->permissionRequired( 'suppressrevision' );
                        } else {
@@ -284,21 +285,22 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        }
                        return;
                }
-               if ( !$this->getUser()->matchEditToken( $this->token, $archiveName ) ) {
+               if ( !$user->matchEditToken( $this->token, $archiveName ) ) {
+                       $lang = $this->getLanguage();
                        $this->getOutput()->addWikiMsg( 'revdelete-show-file-confirm',
                                $this->targetObj->getText(),
-                               $this->getLanguage()->date( $oimage->getTimestamp() ),
-                               $this->getLanguage()->time( $oimage->getTimestamp() ) );
+                               $lang->userDate( $oimage->getTimestamp(), $user ),
+                               $lang->userTime( $oimage->getTimestamp(), $user ) );
                        $this->getOutput()->addHTML(
                                Xml::openElement( 'form', array(
                                        'method' => 'POST',
                                        'action' => $this->getTitle()->getLocalUrl(
-                                               'target=' . urlencode( $oimage->getName() ) .
+                                               'target=' . urlencode( $this->targetObj->getPrefixedDBkey() ) .
                                                '&file=' . urlencode( $archiveName ) .
-                                               '&token=' . urlencode( $this->getUser()->getEditToken( $archiveName ) ) )
+                                               '&token=' . urlencode( $user->getEditToken( $archiveName ) ) )
                                        )
                                ) .
-                               Xml::submitButton( wfMsg( 'revdelete-show-file-submit' ) ) .
+                               Xml::submitButton( $this->msg( 'revdelete-show-file-submit' )->text() ) .
                                '</form>'
                        );
                        return;
@@ -377,22 +379,23 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $out = Xml::openElement( 'form', array( 'method' => 'post',
                                        'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ),
                                        'id' => 'mw-revdel-form-revisions' ) ) .
-                               Xml::fieldset( wfMsg( 'revdelete-legend' ) ) .
+                               Xml::fieldset( $this->msg( 'revdelete-legend' )->text() ) .
                                $this->buildCheckBoxes() .
                                Xml::openElement( 'table' ) .
                                "<tr>\n" .
                                        '<td class="mw-label">' .
-                                               Xml::label( wfMsg( 'revdelete-log' ), 'wpRevDeleteReasonList' ) .
+                                               Xml::label( $this->msg( 'revdelete-log' )->text(), 'wpRevDeleteReasonList' ) .
                                        '</td>' .
                                        '<td class="mw-input">' .
                                                Xml::listDropDown( 'wpRevDeleteReasonList',
-                                                       wfMsgForContent( 'revdelete-reason-dropdown' ),
-                                                       wfMsgForContent( 'revdelete-reasonotherlist' ), '', 'wpReasonDropDown', 1
+                                                       $this->msg( 'revdelete-reason-dropdown' )->inContentLanguage()->text(),
+                                                       $this->msg( 'revdelete-reasonotherlist' )->inContentLanguage()->text(),
+                                                       '', 'wpReasonDropDown', 1
                                                ) .
                                        '</td>' .
                                "</tr><tr>\n" .
                                        '<td class="mw-label">' .
-                                               Xml::label( wfMsg( 'revdelete-otherreason' ), 'wpReason' ) .
+                                               Xml::label( $this->msg( 'revdelete-otherreason' )->text(), 'wpReason' ) .
                                        '</td>' .
                                        '<td class="mw-input">' .
                                                Xml::input( 'wpReason', 60, $this->otherReason, array( 'id' => 'wpReason', 'maxlength' => 100 ) ) .
@@ -400,7 +403,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                "</tr><tr>\n" .
                                        '<td></td>' .
                                        '<td class="mw-submit">' .
-                                               Xml::submitButton( wfMsgExt('revdelete-submit','parsemag',$numRevisions),
+                                               Xml::submitButton( $this->msg( 'revdelete-submit', $numRevisions )->text(),
                                                        array( 'name' => 'wpSubmit' ) ) .
                                        '</td>' .
                                "</tr>\n" .
@@ -420,7 +423,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                $title = Title::makeTitle( NS_MEDIAWIKI, 'revdelete-reason-dropdown' );
                                $link = Linker::link(
                                        $title,
-                                       wfMsgHtml( 'revdelete-edit-reasonlist' ),
+                                       $this->msg( 'revdelete-edit-reasonlist' )->escaped(),
                                        array(),
                                        array( 'action' => 'edit' )
                                );
@@ -459,7 +462,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        }
                        foreach( $this->checks as $item ) {
                                list( $message, $name, $field ) = $item;
-                               $innerHTML = Xml::checkLabel( wfMsg($message), $name, $name, $bitfield & $field );
+                               $innerHTML = Xml::checkLabel( $this->msg( $message )->text(), $name, $name, $bitfield & $field );
                                if( $field == Revision::DELETED_RESTRICTED )
                                        $innerHTML = "<b>$innerHTML</b>";
                                $line = Xml::tags( 'td', array( 'class' => 'mw-input' ), $innerHTML );
@@ -468,9 +471,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // Otherwise, use tri-state radios
                } else {
                        $html .= '<tr>';
-                       $html .= '<th class="mw-revdel-checkbox">'.wfMsgHtml('revdelete-radio-same').'</th>';
-                       $html .= '<th class="mw-revdel-checkbox">'.wfMsgHtml('revdelete-radio-unset').'</th>';
-                       $html .= '<th class="mw-revdel-checkbox">'.wfMsgHtml('revdelete-radio-set').'</th>';
+                       $html .= '<th class="mw-revdel-checkbox">' . $this->msg( 'revdelete-radio-same' )->escaped() . '</th>';
+                       $html .= '<th class="mw-revdel-checkbox">' . $this->msg( 'revdelete-radio-unset' )->escaped() . '</th>';
+                       $html .= '<th class="mw-revdel-checkbox">' . $this->msg( 'revdelete-radio-set' )->escaped() . '</th>';
                        $html .= "<th></th></tr>\n";
                        foreach( $this->checks as $item ) {
                                list( $message, $name, $field ) = $item;
@@ -483,7 +486,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                $line = '<td class="mw-revdel-checkbox">' . Xml::radio( $name, -1, $selected == -1 ) . '</td>';
                                $line .= '<td class="mw-revdel-checkbox">' . Xml::radio( $name, 0, $selected == 0 ) . '</td>';
                                $line .= '<td class="mw-revdel-checkbox">' . Xml::radio( $name, 1, $selected == 1 ) . '</td>';
-                               $label = wfMsgHtml($message);
+                               $label = $this->msg( $message )->escaped();
                                if( $field == Revision::DELETED_RESTRICTED ) {
                                        $label = "<b>$label</b>";
                                }
@@ -512,7 +515,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $comment = $listReason;
                if( $comment != 'other' && $this->otherReason != '' ) {
                        // Entry from drop down menu + additional comment
-                       $comment .= wfMsgForContent( 'colon-separator' ) . $this->otherReason;
+                       $comment .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->otherReason;
                } elseif( $comment == 'other' ) {
                        $comment = $this->otherReason;
                }
index a6d75bb..079130f 100644 (file)
@@ -233,13 +233,13 @@ class SpecialSearch extends SpecialPage {
                        } else {
                                $out->addHTML(
                                        Xml::openElement( 'fieldset' ) .
-                                       Xml::element( 'legend', null, wfMsg( 'search-external' ) ) .
-                                       Xml::element( 'p', array( 'class' => 'mw-searchdisabled' ), wfMsg( 'searchdisabled' ) ) .
-                                       wfMsg( 'googlesearch',
+                                       Xml::element( 'legend', null, $this->msg( 'search-external' )->text() ) .
+                                       Xml::element( 'p', array( 'class' => 'mw-searchdisabled' ), $this->msg( 'searchdisabled' )->text() ) .
+                                       $this->msg( 'googlesearch' )->rawParams(
                                                htmlspecialchars( $term ),
-                                               htmlspecialchars( 'UTF-8' ),
-                                               htmlspecialchars( wfMsg( 'searchbutton' ) )
-                                       ) .
+                                               'UTF-8',
+                                               $this->msg( 'searchbutton' )->escaped()
+                                       )->text() .
                                        Xml::closeElement( 'fieldset' )
                                );
                        }
@@ -286,7 +286,7 @@ class SpecialSearch extends SpecialPage {
                                $stParams
                        );
 
-                       $this->didYouMeanHtml = '<div class="searchdidyoumean">'.wfMsg('search-suggest',$suggestLink).'</div>';
+                       $this->didYouMeanHtml = '<div class="searchdidyoumean">' . $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() . '</div>';
                }
                // start rendering the page
                $out->addHtml(
@@ -584,13 +584,8 @@ class SpecialSearch extends SpecialPage {
                                $redirectText = null;
 
                        $redirect = "<span class='searchalttitle'>" .
-                               wfMsg(
-                                       'search-redirect',
-                                       Linker::linkKnown(
-                                               $redirectTitle,
-                                               $redirectText
-                                       )
-                               ) .
+                               $this->msg( 'search-redirect' )->rawParams(
+                                       Linker::linkKnown( $redirectTitle, $redirectText ) )->text() .
                                "</span>";
                }
 
@@ -601,12 +596,8 @@ class SpecialSearch extends SpecialPage {
                                $sectionText = null;
 
                        $section = "<span class='searchalttitle'>" .
-                               wfMsg(
-                                       'search-section', Linker::linkKnown(
-                                               $sectionTitle,
-                                               $sectionText
-                                       )
-                               ) .
+                               $this->msg( 'search-section' )->rawParams(
+                                       Linker::linkKnown( $sectionTitle, $sectionText ) )->text() .
                                "</span>";
                }
 
@@ -621,7 +612,7 @@ class SpecialSearch extends SpecialPage {
                        $score = '';
                } else {
                        $percent = sprintf( '%2.1f', $result->getScore() * 100 );
-                       $score = wfMsg( 'search-result-score', $lang->formatNum( $percent ) )
+                       $score = $this->msg( 'search-result-score' )->numParams( $percent )->text()
                                . ' - ';
                }
 
@@ -629,25 +620,17 @@ class SpecialSearch extends SpecialPage {
                $byteSize = $result->getByteSize();
                $wordCount = $result->getWordCount();
                $timestamp = $result->getTimestamp();
-               $size = wfMsgExt(
-                       'search-result-size',
-                       array( 'parsemag', 'escape' ),
-                       $lang->formatSize( $byteSize ),
-                       $lang->formatNum( $wordCount )
-               );
+               $size = $this->msg( 'search-result-size', $lang->formatSize( $byteSize ) )
+                       ->numParams( $wordCount )->escaped();
 
                if( $t->getNamespace() == NS_CATEGORY ) {
                        $cat = Category::newFromTitle( $t );
-                       $size = wfMsgExt(
-                               'search-result-category-size',
-                               array( 'parsemag', 'escape' ),
-                               $lang->formatNum( $cat->getPageCount() ),
-                               $lang->formatNum( $cat->getSubcatCount() ),
-                               $lang->formatNum( $cat->getFileCount() )
-                       );
+                       $size = $this->msg( 'search-result-category-size' )
+                               ->numParams( $cat->getPageCount(), $cat->getSubcatCount(), $cat->getFileCount() )
+                               ->escaped();
                }
 
-               $date = $lang->timeanddate( $timestamp );
+               $date = $lang->userTimeAndDate( $timestamp, $this->getUser() );
 
                // link to related articles if supported
                $related = '';
@@ -656,14 +639,15 @@ class SpecialSearch extends SpecialPage {
                        $stParams = array_merge(
                                $this->powerSearchOptions(),
                                array(
-                                       'search' => wfMsgForContent( 'searchrelated' ) . ':' . $t->getPrefixedText(),
-                                       'fulltext' => wfMsg( 'search' )
+                                       'search' => $this->msg( 'searchrelated' )->inContentLanguage()->text() .
+                                               ':' . $t->getPrefixedText(),
+                                       'fulltext' => $this->msg( 'search' )->text()
                                )
                        );
 
                        $related = ' -- ' . Linker::linkKnown(
                                $st,
-                               wfMsg('search-relatedarticle'),
+                               $this->msg( 'search-relatedarticle' )->text(),
                                array(),
                                $stParams
                        );
@@ -675,7 +659,7 @@ class SpecialSearch extends SpecialPage {
                        if( $img ) {
                                $thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) );
                                if( $thumb ) {
-                                       $desc = wfMsg( 'parentheses', $img->getShortDesc() );
+                                       $desc = $this->msg( 'parentheses' )->rawParams( $img->getShortDesc() )->escaped();
                                        wfProfileOut( __METHOD__ );
                                        // Float doesn't seem to interact well with the bullets.
                                        // Table messes up vertical alignment of the bullets.
@@ -719,12 +703,12 @@ class SpecialSearch extends SpecialPage {
                $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
                $out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>".
-                       wfMsg('search-interwiki-caption')."</div>\n";
+                       $this->msg( 'search-interwiki-caption' )->text()  . "</div>\n";
                $out .= "<ul class='mw-search-iwresults'>\n";
 
                // work out custom project captions
                $customCaptions = array();
-               $customLines = explode("\n",wfMsg('search-interwiki-custom')); // format per line <iwprefix>:<caption>
+               $customLines = explode( "\n", $this->msg( 'search-interwiki-custom' )->text() ); // format per line <iwprefix>:<caption>
                foreach($customLines as $line) {
                        $parts = explode(":",$line,2);
                        if(count($parts) == 2) // validate line
@@ -787,13 +771,8 @@ class SpecialSearch extends SpecialPage {
                                $redirectText = null;
 
                        $redirect = "<span class='searchalttitle'>" .
-                               wfMsg(
-                                       'search-redirect',
-                                       Linker::linkKnown(
-                                               $redirectTitle,
-                                               $redirectText
-                                       )
-                               ) .
+                               $this->msg( 'search-redirect' )->rawParams(
+                                       Linker::linkKnown( $redirectTitle, $redirectText ) )->text() .
                                "</span>";
                }
 
@@ -807,13 +786,13 @@ class SpecialSearch extends SpecialPage {
                                // default is to show the hostname of the other wiki which might suck
                                // if there are many wikis on one hostname
                                $parsed = wfParseUrl( $t->getFullURL() );
-                               $caption = wfMsg('search-interwiki-default', $parsed['host']);
+                               $caption = $this->msg( 'search-interwiki-default', $parsed['host'] )->text();
                        }
                        // "more results" link (special page stuff could be localized, but we might not know target lang)
                        $searchTitle = Title::newFromText($t->getInterwiki().":Special:Search");
                        $searchLink = Linker::linkKnown(
                                $searchTitle,
-                               wfMsg('search-interwiki-more'),
+                               $this->msg( 'search-interwiki-more' )->text(),
                                array(),
                                array(
                                        'search' => $query,
@@ -866,7 +845,7 @@ class SpecialSearch extends SpecialPage {
                        }
                        $name = str_replace( '_', ' ', $name );
                        if( $name == '' ) {
-                               $name = wfMsg( 'blanknamespace' );
+                               $name = $this->msg( 'blanknamespace' )->text();
                        }
                        $rows[$subject] .=
                                Xml::openElement(
@@ -902,7 +881,7 @@ class SpecialSearch extends SpecialPage {
                // Show redirects check only if backend supports it
                if( $this->getSearchEngine()->supports( 'list-redirects' ) ) {
                        $showSections['redirects'] =
-                               Xml::checkLabel( wfMsg( 'powersearch-redir' ), 'redirs', 'redirs', $this->searchRedirects );
+                               Xml::checkLabel( $this->msg( 'powersearch-redir' )->text(), 'redirs', 'redirs', $this->searchRedirects );
                }
 
                wfRunHooks( 'SpecialSearchPowerBox', array( &$showSections, $term, $opts ) );
@@ -918,18 +897,18 @@ class SpecialSearch extends SpecialPage {
                                'fieldset',
                                array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
                        ) .
-                       Xml::element( 'legend', null, wfMsg('powersearch-legend') ) .
-                       Xml::tags( 'h4', null, wfMsgExt( 'powersearch-ns', array( 'parseinline' ) ) ) .
+                       Xml::element( 'legend', null, $this->msg('powersearch-legend' )->text() ) .
+                       Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() ) .
                        Xml::tags(
                                'div',
                                array( 'id' => 'mw-search-togglebox' ),
-                               Xml::label( wfMsg( 'powersearch-togglelabel' ), 'mw-search-togglelabel' ) .
+                               Xml::label( $this->msg( 'powersearch-togglelabel' )->text(), 'mw-search-togglelabel' ) .
                                        Xml::element(
                                                'input',
                                                array(
                                                        'type'=>'button',
                                                        'id' => 'mw-search-toggleall',
-                                                       'value' => wfMsg( 'powersearch-toggleall' )
+                                                       'value' => $this->msg( 'powersearch-toggleall' )->text()
                                                )
                                        ) .
                                        Xml::element(
@@ -937,7 +916,7 @@ class SpecialSearch extends SpecialPage {
                                                array(
                                                        'type'=>'button',
                                                        'id' => 'mw-search-togglenone',
-                                                       'value' => wfMsg( 'powersearch-togglenone' )
+                                                       'value' => $this->msg( 'powersearch-togglenone' )->text()
                                                )
                                        )
                        ) .
@@ -1035,8 +1014,8 @@ class SpecialSearch extends SpecialPage {
                                $this->makeSearchLink(
                                        $bareterm,
                                        array(),
-                                       wfMsg( $profile['message'] ),
-                                       wfMsg( $profile['tooltip'], $tooltipParam ),
+                                       $this->msg( $profile['message'] )->text(),
+                                       $this->msg( $profile['tooltip'], $tooltipParam )->text(),
                                        $profile['parameters']
                                )
                        );
@@ -1047,24 +1026,19 @@ class SpecialSearch extends SpecialPage {
                // Results-info
                if ( $resultsShown > 0 ) {
                        if ( $totalNum > 0 ){
-                               $top = wfMsgExt( 'showingresultsheader', array( 'parseinline' ),
-                                       $lang->formatNum( $this->offset + 1 ),
-                                       $lang->formatNum( $this->offset + $resultsShown ),
-                                       $lang->formatNum( $totalNum ),
-                                       wfEscapeWikiText( $term ),
-                                       $lang->formatNum( $resultsShown )
-                               );
+                               $top = $this->msg( 'showingresultsheader' )
+                                       ->numParams( $this->offset + 1, $this->offset + $resultsShown, $totalNum )
+                                       ->params( wfEscapeWikiText( $term ) )
+                                       ->numParams( $resultsShown )
+                                       ->parse();
                        } elseif ( $resultsShown >= $this->limit ) {
-                               $top = wfMsgExt( 'showingresults', array( 'parseinline' ),
-                                       $lang->formatNum( $this->limit ),
-                                       $lang->formatNum( $this->offset + 1 )
-                               );
+                               $top = $this->msg( 'showingresults' )
+                                       ->numParams( $this->limit, $this->offset + 1 )
+                                       ->parse();
                        } else {
-                               $top =  wfMsgExt( 'showingresultsnum', array( 'parseinline' ),
-                                       $lang->formatNum( $this->limit ),
-                                       $lang->formatNum( $this->offset + 1 ),
-                                       $lang->formatNum( $resultsShown )
-                               );
+                               $top = $this->msg( 'showingresultsnum' )
+                                       ->numParams( $this->limit, $this->offset + 1, $resultsShown )
+                                       ->parse();
                        }
                        $out .= Xml::tags( 'div', array( 'class' => 'results-info' ),
                                Xml::tags( 'ul', null, Xml::tags( 'li', null, $top ) )
@@ -1091,7 +1065,7 @@ class SpecialSearch extends SpecialPage {
                        'autofocus'
                ) ) . "\n";
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
-               $out .= Xml::submitButton( wfMsg( 'searchbutton' ) ) . "\n";
+               $out .= Xml::submitButton( $this->msg( 'searchbutton' )->text() ) . "\n";
                return $out . $this->didYouMeanHtml;
        }
 
@@ -1115,7 +1089,7 @@ class SpecialSearch extends SpecialPage {
                $stParams = array_merge(
                        array(
                                'search' => $term,
-                               'fulltext' => wfMsg( 'search' )
+                               'fulltext' => $this->msg( 'search' )->text()
                        ),
                        $opt
                );
@@ -1153,7 +1127,7 @@ class SpecialSearch extends SpecialPage {
         */
        protected function startsWithAll( $term ) {
 
-               $allkeyword = wfMsgForContent('searchall');
+               $allkeyword = $this->msg( 'searchall' )->inContentLanguage()->text();
 
                $p = explode( ':', $term );
                if( count( $p ) > 1 ) {
index 0837fc3..1fc8ea5 100644 (file)
@@ -44,10 +44,10 @@ class SpecialTags extends SpecialPage {
                $out->wrapWikiMsg( "<div class='mw-tags-intro'>\n$1\n</div>", 'tags-intro' );
 
                // Write the headers
-               $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, wfMsgExt( 'tags-tag', 'parseinline' ) ) .
-                               Xml::tags( 'th', null, wfMsgExt( 'tags-display-header', 'parseinline' ) ) .
-                               Xml::tags( 'th', null, wfMsgExt( 'tags-description-header', 'parseinline' ) ) .
-                               Xml::tags( 'th', null, wfMsgExt( 'tags-hitcount-header', 'parseinline' ) )
+               $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
+                               Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
+                               Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
+                               Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
                        );
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'change_tag', array( 'ct_tag', 'count(*) AS hitcount' ),
@@ -76,18 +76,18 @@ class SpecialTags extends SpecialPage {
 
                $disp = ChangeTags::tagDescription( $tag );
                $disp .= ' ';
-               $editLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag" ), wfMsgHtml( 'tags-edit' ) );
+               $editLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag" ), $this->msg( 'tags-edit' )->escaped() );
                $disp .= $this->msg( 'parentheses' )->rawParams( $editLink )->escaped();
                $newRow .= Xml::tags( 'td', null, $disp );
 
-               $msg = wfMessage( "tag-$tag-description" );
+               $msg = $this->msg( "tag-$tag-description" );
                $desc = !$msg->exists() ? '' : $msg->parse();
                $desc .= ' ';
-               $editDescLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag-description" ), wfMsgHtml( 'tags-edit' ) );
+               $editDescLink = Linker::link( Title::makeTitle( NS_MEDIAWIKI, "Tag-$tag-description" ), $this->msg( 'tags-edit' )->escaped() );
                $desc .= $this->msg( 'parentheses' )->rawParams( $editDescLink )->escaped();
                $newRow .= Xml::tags( 'td', null, $desc );
 
-               $hitcount = wfMsgExt( 'tags-hitcount', array( 'parsemag' ), $this->getLanguage()->formatNum( $hitcount ) );
+               $hitcount = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
                $hitcount = Linker::link( SpecialPage::getTitleFor( 'Recentchanges' ), $hitcount, array(), array( 'tagfilter' => $tag ) );
                $newRow .= Xml::tags( 'td', null, $hitcount );
 
index fab21cd..fb2005b 100644 (file)
@@ -60,14 +60,14 @@ class SpecialUnblock extends SpecialPage {
                        switch( $this->type ){
                                case Block::TYPE_USER:
                                case Block::TYPE_IP:
-                                       $out->addWikiMsg( 'unblocked',  $this->target );
+                                       $out->addWikiMsg( 'unblocked', wfEscapeWikiText( $this->target ) );
                                        break;
                                case Block::TYPE_RANGE:
-                                       $out->addWikiMsg( 'unblocked-range', $this->target );
+                                       $out->addWikiMsg( 'unblocked-range', wfEscapeWikiText( $this->target ) );
                                        break;
                                case Block::TYPE_ID:
                                case Block::TYPE_AUTO:
-                                       $out->addWikiMsg( 'unblocked-id', $this->target );
+                                       $out->addWikiMsg( 'unblocked-id', wfEscapeWikiText( $this->target ) );
                                        break;
                        }
                }
index 0a826b9..cf148c1 100644 (file)
@@ -1045,7 +1045,7 @@ class SpecialUndelete extends SpecialPage {
                }
                $out->wrapWikiMsg(
                        "<div class='mw-undelete-pagetitle'>\n$1\n</div>\n",
-                       array( 'undeletepagetitle', $this->mTargetObj->getPrefixedText() )
+                       array( 'undeletepagetitle', wfEscapeWikiText( $this->mTargetObj->getPrefixedText() ) )
                );
 
                $archive = new PageArchive( $this->mTargetObj );
index d747448..ab2bf0a 100644 (file)
@@ -39,7 +39,7 @@ class SpecialUserlogout extends UnlistedSpecialPage {
                 */
                if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&amp;' ) !== false ) {
                        wfDebug( "Special:Userlogout request {$_SERVER['REQUEST_URI']} looks suspicious, denying.\n" );
-                       throw new HttpError( 400, wfMessage( 'suspicious-userlogout' ), wfMessage( 'loginerror' ) );
+                       throw new HttpError( 400, $this->msg( 'suspicious-userlogout' ), $this->msg( 'loginerror' ) );
                }
 
                $this->setHeaders();
index 3947f3a..8c244c4 100644 (file)
@@ -423,12 +423,12 @@ class UserrightsPage extends SpecialPage {
                $grouplist = '';
                $count = count( $list );
                if( $count > 0 ) {
-                       $grouplist = $this->msg( 'userrights-groupsmember', $count )->parse();
+                       $grouplist = $this->msg( 'userrights-groupsmember', $count, $user->getName() )->parse();
                        $grouplist = '<p>' . $grouplist  . ' ' . $this->getLanguage()->listToText( $list ) . "</p>\n";
                }
                $count = count( $autolist );
                if( $count > 0 ) {
-                       $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count )->parse();
+                       $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )->parse();
                        $grouplist .= '<p>' . $autogrouplistintro  . ' ' . $this->getLanguage()->listToText( $autolist ) . "</p>\n";
                }
 
index 25b93b1..2475189 100644 (file)
@@ -39,7 +39,7 @@ class WantedFilesPage extends WantedQueryPage {
                # Specifically setting to use "Wanted Files" (NS_MAIN) as title, so as to get what
                # category would be used on main namespace pages, for those tricky wikipedia
                # admins who like to do {{#ifeq:{{NAMESPACE}}|foo|bar|....}}.
-               $catMessage = wfMessage( 'broken-file-category' )
+               $catMessage = $this->msg( 'broken-file-category' )
                        ->title( Title::newFromText( "Wanted Files", NS_MAIN ) )
                        ->inContentLanguage();
                
index 0c5f11c..eafdde4 100644 (file)
@@ -116,6 +116,7 @@ class SpecialWatchlist extends SpecialPage {
                /* bool  */ 'hideOwn'   => (int)$user->getBoolOption( 'watchlisthideown' ),
                /* ?     */ 'namespace' => 'all',
                /* ?     */ 'invert'    => false,
+               /* bool  */ 'associated' => false,
                );
                $this->customFilters = array();
                wfRunHooks( 'SpecialWatchlistFilters', array( $this, &$this->customFilters ) );
@@ -148,13 +149,20 @@ class SpecialWatchlist extends SpecialPage {
 
                # Get namespace value, if supplied, and prepare a WHERE fragment
                $nameSpace = $request->getIntOrNull( 'namespace' );
-               $invert = $request->getIntOrNull( 'invert' );
+               $invert = $request->getBool( 'invert' );
+               $associated = $request->getBool( 'associated' );
                if ( !is_null( $nameSpace ) ) {
+                       $eq_op = $invert ? '!=' : '=';\r
+                       $bool_op = $invert ? 'AND' : 'OR';
                        $nameSpace = intval( $nameSpace ); // paranioa
-                       if ( $invert ) {
-                               $nameSpaceClause = "rc_namespace != $nameSpace";
+                       if ( !$associated ) {
+                               $nameSpaceClause = "rc_namespace $eq_op $nameSpace";
                        } else {
-                               $nameSpaceClause = "rc_namespace = $nameSpace";
+                               $associatedNS = MWNamespace::getAssociated( $nameSpace );\r
+                               $nameSpaceClause =
+                                       "rc_namespace $eq_op $nameSpace " .\r
+                                       $bool_op .\r
+                                       " rc_namespace $eq_op $associatedNS";
                        }
                } else {
                        $nameSpace = '';
@@ -162,6 +170,7 @@ class SpecialWatchlist extends SpecialPage {
                }
                $values['namespace'] = $nameSpace;
                $values['invert'] = $invert;
+               $values['associated'] = $associated;
 
                if( is_null( $values['days'] ) || !is_numeric( $values['days'] ) ) {
                        $big = 1000; /* The magical big */
@@ -262,7 +271,14 @@ class SpecialWatchlist extends SpecialPage {
                $tables = array( 'recentchanges', 'watchlist' );
                $fields = array( $dbr->tableName( 'recentchanges' ) . '.*' );
                $join_conds = array(
-                       'watchlist' => array('INNER JOIN',"wl_user='{$user->getId()}' AND wl_namespace=rc_namespace AND wl_title=rc_title"),
+                       'watchlist' => array(
+                               'INNER JOIN',
+                               array(
+                                       'wl_user' => $user->getId(),
+                                       'wl_namespace=rc_namespace',
+                                       'wl_title=rc_title'
+                               ),
+                       ),
                );
                $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
                if( $wgShowUpdatedMarker ) {
@@ -338,7 +354,20 @@ class SpecialWatchlist extends SpecialPage {
                                'class' => 'namespaceselector',
                        )
                ) . '&#160;';
-               $form .= Xml::checkLabel( $this->msg( 'invert' )->text(), 'invert', 'nsinvert', $invert ) . '&#160;';
+               $form .= Xml::checkLabel(
+                       $this->msg( 'invert' )->text(),
+                       'invert',
+                       'nsinvert',
+                       $invert,
+                       array( 'title' => $this->msg( 'tooltip-invert' )->text() )
+               ) . '&#160;';
+               $form .= Xml::checkLabel(
+                       $this->msg( 'namespace_association' )->text(),
+                       'associated',
+                       'associated',
+                       $associated,
+                       array( 'title' => $this->msg( 'tooltip-namespace_association' )->text() )
+               ) . '&#160;';
                $form .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . '</p>';
                $form .= Html::hidden( 'days', $values['days'] );
                foreach ( $filters as $key => $msg ) {
index 59284af..bf5c487 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Template used when there is no LocalSettings.php file
+ * Template used when there is no LocalSettings.php 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
  * @ingroup Templates
index c93b02c..b22c144 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Html form for account creation
+ * Html form for account creation.
+ *
+ * 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 Templates
index efe826f..5a2c633 100644 (file)
@@ -1,6 +1,21 @@
 <?php
 /**
- * Html form for user login
+ * Html form for user login.
+ *
+ * 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 Templates
index 09412f0..479083e 100644 (file)
@@ -16,3 +16,4 @@ quiet: yes
 quote-nbsp: yes
 fix-backslash: no
 fix-uri: no
+new-inline-tags: video,audio,source,track
index f6078dc..83ffed9 100644 (file)
@@ -972,24 +972,100 @@ abstract class UploadBase {
         * @return bool
         */
        public function checkSvgScriptCallback( $element, $attribs ) {
-               $stripped = $this->stripXmlNamespace( $element );
+               $strippedElement = $this->stripXmlNamespace( $element );
 
-               if( $stripped == 'script' ) {
+               /*
+                * check for elements that can contain javascript
+                */
+               if( $strippedElement == 'script' ) {
                        wfDebug( __METHOD__ . ": Found script element '$element' in uploaded file.\n" );
                        return true;
                }
 
+               # e.g., <svg xmlns="http://www.w3.org/2000/svg"> <handler xmlns:ev="http://www.w3.org/2001/xml-events" ev:event="load">alert(1)</handler> </svg>
+               if( $strippedElement == 'handler' ) {
+                       wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
+                       return true;
+               }
+
+               # SVG reported in Feb '12 that used xml:stylesheet to generate javascript block
+               if( $strippedElement == 'stylesheet' ) {
+                       wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
+                       return true;
+               }
+
                foreach( $attribs as $attrib => $value ) {
                        $stripped = $this->stripXmlNamespace( $attrib );
+                       $value = strtolower($value);
+
                        if( substr( $stripped, 0, 2 ) == 'on' ) {
-                               wfDebug( __METHOD__ . ": Found script attribute '$attrib'='value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found event-handler attribute '$attrib'='$value' in uploaded file.\n" );
                                return true;
                        }
+
+                       # href with javascript target
                        if( $stripped == 'href' && strpos( strtolower( $value ), 'javascript:' ) !== false ) {
-                               wfDebug( __METHOD__ . ": Found script href attribute '$attrib'='$value' in uploaded file.\n" );
+                               wfDebug( __METHOD__ . ": Found script in href attribute '$attrib'='$value' in uploaded file.\n" );
+                               return true;
+                       }
+
+                       # href with embeded svg as target
+                       if( $stripped == 'href' && preg_match( '!data:[^,]*image/svg[^,]*,!sim', $value ) ) {
+                               wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+                               return true;
+                       }
+
+                       # href with embeded (text/xml) svg as target
+                       if( $stripped == 'href' && preg_match( '!data:[^,]*text/xml[^,]*,!sim', $value ) ) {
+                               wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
+                               return true;
+                       }
+
+                       # use set/animate to add event-handler attribute to parent
+                       if( ( $strippedElement == 'set' || $strippedElement == 'animate' ) && $stripped == 'attributename' && substr( $value, 0, 2 ) == 'on' ) {
+                               wfDebug( __METHOD__ . ": Found svg setting event-handler attribute with \"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
                                return true;
                        }
+
+                       # use set to add href attribute to parent element
+                       if( $strippedElement == 'set' && $stripped == 'attributename' && strpos( $value, 'href' ) !== false ) {
+                               wfDebug( __METHOD__ . ": Found svg setting href attibute '$value' in uploaded file.\n" );
+                               return true;
+                       }
+
+                       # use set to add a remote / data / script target to an element
+                       if( $strippedElement == 'set' && $stripped == 'to' &&  preg_match( '!(http|https|data|script):!sim', $value ) ) {
+                               wfDebug( __METHOD__ . ": Found svg setting attibute to '$value' in uploaded file.\n" );
+                               return true;
+                       }
+
+
+                       # use handler attribute with remote / data / script 
+                       if( $stripped == 'handler' &&  preg_match( '!(http|https|data|script):!sim', $value ) ) {
+                               wfDebug( __METHOD__ . ": Found svg setting handler with remote/data/script '$attrib'='$value' in uploaded file.\n" );
+                               return true;
+                       }
+
+                       # use CSS styles to bring in remote code
+                       # catch url("http:..., url('http:..., url(http:..., but not url("#..., url('#..., url(#....
+                       if( $stripped == 'style' && preg_match_all( '!((?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*["\']?\s*[^#]+.*?\))!sim', $value, $matches ) ) {
+                               foreach ($matches[1] as $match) {
+                                       if (!preg_match( '!(?:font|clip-path|fill|filter|marker|marker-end|marker-mid|marker-start|mask|stroke)\s*:\s*url\s*\(\s*(#|\'#|"#)!sim', $match ) ) {
+                                               wfDebug( __METHOD__ . ": Found svg setting a style with remote url '$attrib'='$value' in uploaded file.\n" );
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       # image filters can pull in url, which could be svg that executes scripts
+                       if( $strippedElement == 'image' && $stripped == 'filter' && preg_match( '!url\s*\(!sim', $value ) ) {
+                               wfDebug( __METHOD__ . ": Found image filter with url: \"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
+                               return true;
+                       }
+
                }
+
+               return false; //No scripts detected
        }
 
        private function stripXmlNamespace( $name ) {
index ee3bc69..922b7de 100644 (file)
 藍澱
 皆可作澱
 澱山
+海淀山後
 澱澱
 掛鈎
 薴悴
index e14823a..2010878 100644 (file)
--- a/index.php
+++ b/index.php
@@ -40,7 +40,7 @@
 # has structures (try/catch, foo()->bar(), etc etc) which throw parse errors in
 # 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.2.3' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'index.php' );
 }
index 1f69cbf..a3140b2 100644 (file)
        'rw' => 'Kinyarwanda',  # Kinyarwanda, should possibly be Kinyarwandi
        'sa' => 'संस्कृतम्',  # Sanskrit
        'sah' => 'Саха тыла', # Sakha
+       'sat' => 'Santali',     # Santali
        'sc' => 'Sardu',                # Sardinian
        'scn' => 'Sicilianu',   # Sicilian
        'sco' => 'Scots',       # Scots
index 127aa4d..06a0800 100644 (file)
@@ -552,7 +552,6 @@ Nyoë pat nakeuh log seunampôh nibak ôn nyoë:",
 
 # Diffs
 'history-title' => 'Riwayat geunantoë nibak "$1"',
-'difference' => '(Bida antara geunantoë)',
 'lineno' => 'Baréh $1:',
 'compareselectedversions' => 'Peubandéng curak teupiléh',
 'editundo' => 'peubateuë',
index 6671a0c..6cb091e 100644 (file)
@@ -431,7 +431,6 @@ $1',
 
 # Diffs
 'history-title' => 'تاريخ مراجعة "$1"',
-'difference' => '(الفرق بين المراجعتين)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
 'editundo' => 'تراجع',
index 652b707..d821a3b 100644 (file)
@@ -1150,7 +1150,6 @@ Let op dat die gebruik van navigasieskakels hierdie kolom se waardes sal herstel
 
 # Diffs
 'history-title' => 'Weergawegeskiedenis van "$1"',
-'difference' => '(Verskil tussen weergawes)',
 'difference-multipage' => '(Verskil tussen bladsye)',
 'lineno' => 'Lyn $1:',
 'compareselectedversions' => 'Vergelyk gekose weergawes',
index 76f8a1c..c46c19f 100644 (file)
@@ -885,7 +885,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 
 # Diffs
 'history-title' => 'Historiku i redaktimeve për "$1"',
-'difference' => '(Dallimet midis verzioneve)',
 'lineno' => 'Rreshti $1:',
 'compareselectedversions' => 'Krahasoni versionet e zgjedhme',
 'editundo' => 'ktheje',
index 5e1147b..a66a474 100644 (file)
@@ -75,7 +75,7 @@ $messages = array(
 'tog-enotifminoredits' => 'ለአነስተኛ የገጽ እርማቶችም ኤመልዕክት ይላክልኝ',
 'tog-enotifrevealaddr' => 'ኤመልዕክት አድራሻዬን በማሳወቂያ መልዕክቶች ውስጥ አሳይ',
 'tog-shownumberswatching' => 'የሚከታተሉ ተጠቃሚዎችን ቁጥር አሳይ',
-'tog-oldsig' => ' የቀድሞው ፊርማ ቅደመ እይታ',
+'tog-oldsig' => 'የቀድሞው ፊርማ ቅደመ እይታ',
 'tog-fancysig' => 'ጥሬ ፊርማ (ያለራስገዝ ማያያዣ)',
 'tog-externaleditor' => 'በቀዳሚነት ውጪያዊ አራሚን ተጠቀም',
 'tog-externaldiff' => 'በቀዳሚነት የውጭ ልዩነት-ማሳያን ተጠቀም',
@@ -696,7 +696,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 
 # Diffs
 'history-title' => 'የ«$1» እትሞች ታሪክ',
-'difference' => '(በ2ቱ እትሞቹ ዘንድ ያለው ልዩነት)',
 'lineno' => 'መስመር፡ $1፦',
 'compareselectedversions' => 'የተመረጡትን እትሞች ለማነፃፀር',
 'editundo' => 'ለውጡ ይገለበጥ',
index 7c674a1..cc2df0a 100644 (file)
@@ -1034,7 +1034,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
 
 # Diffs
 'history-title' => 'Historial de versions de "$1"',
-'difference' => '(Esferencias entre versions)',
 'difference-multipage' => '(Diferencia entre pachinas)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Confrontar as versions trigatas',
index 5024511..dab4c9b 100644 (file)
@@ -538,7 +538,6 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 
 # Diffs
 'history-title' => 'Ednīƿunge stǣr for "$1"',
-'difference' => '(Scēadung betwēonan hweorfungum)',
 'lineno' => 'Līne $1:',
 'compareselectedversions' => 'Corena fadunga metan',
 'editundo' => 'undōn',
index 98daa7f..0a34a77 100644 (file)
@@ -15,303 +15,302 @@ $fallback = 'hi';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => ' कड़ी अधोरेखित करना:',
-'tog-justify'                 => 'परिच्छेद समान करॊ',
-'tog-hideminor'               => 'हाल के बदलाव सॆं छोटॊ बदलाव छुपाबॊ',
-'tog-hidepatrolled'           => 'निगरानी मॆं करलॊ गेलॊ संपादनॊ कॆ हाल के बदलावॊ मॆं नै देखाबॊ',
-'tog-newpageshidepatrolled'   => 'निगरानी वाला पन्ना कॆ नया पन्ने वाला सूची मॆं नै देखाबॊ',
-'tog-extendwatchlist'         => 'ध्यान सूची मॆं सब्भे बदलाव दर्शाबॊ, सिर्फ हाले के नै',
-'tog-usenewrc'                => 'हाल मॆं होलॊ वर्धित बदलाव (जावास्क्रीप्ट के जरूरत छै)',
-'tog-numberheadings'          => 'शीर्षक स्वयं-क्रमांकित करॊ',
-'tog-showtoolbar'             => 'एडिट टूलबार दर्शाबॊ (जावास्क्रीप्ट)',
-'tog-editondblclick'          => 'दू-बार क्लीक करी कॆ पन्ना संपादित करॊ (जावास्क्रीप्ट)',
-'tog-editsection'             => '[संपादित करॊ] कड़ी द्वारा विभाग संपादन करै के अनुमती दहॊ',
+'tog-underline' => ' कड़ी अधोरेखित करना:',
+'tog-justify' => 'परिच्छेद समान करॊ',
+'tog-hideminor' => 'हाल के बदलाव सॆं छोटॊ बदलाव छुपाबॊ',
+'tog-hidepatrolled' => 'निगरानी मॆं करलॊ गेलॊ संपादनॊ कॆ हाल के बदलावॊ मॆं नै देखाबॊ',
+'tog-newpageshidepatrolled' => 'निगरानी वाला पन्ना कॆ नया पन्ने वाला सूची मॆं नै देखाबॊ',
+'tog-extendwatchlist' => 'ध्यान सूची मॆं सब्भे बदलाव दर्शाबॊ, सिर्फ हाले के नै',
+'tog-usenewrc' => 'हाल मॆं होलॊ वर्धित बदलाव (जावास्क्रीप्ट के जरूरत छै)',
+'tog-numberheadings' => 'शीर्षक स्वयं-क्रमांकित करॊ',
+'tog-showtoolbar' => 'एडिट टूलबार दर्शाबॊ (जावास्क्रीप्ट)',
+'tog-editondblclick' => 'दू-बार क्लीक करी कॆ पन्ना संपादित करॊ (जावास्क्रीप्ट)',
+'tog-editsection' => '[संपादित करॊ] कड़ी द्वारा विभाग संपादन करै के अनुमती दहॊ',
 'tog-editsectiononrightclick' => 'विभाग शीर्षक पर दायाँ क्लीक करीकॆ संपादन करै के अनुमती दॆ (जावास्क्रीप्ट)',
-'tog-showtoc'                 => 'अनुक्रम दर्शाबॊ (जोन पन्ना पर तीन सॆं ज्यादा विभाग छै)',
-'tog-rememberpassword'        => 'इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)',
-'tog-watchcreations'          => 'हमरॊ तैयार करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
-'tog-watchdefault'            => 'हमरॊ संपादित करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
-'tog-watchmoves'              => 'हमरॊ हटैलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
-'tog-watchdeletion'           => 'हमरॊ हटैलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
-'tog-previewontop'            => 'एडिट बॉक्स के उपर झलक दिखाबॊ',
-'tog-previewonfirst'          => 'पहलॊ सम्पादन पर पूर्वावलोकन देखॊ',
-'tog-nocache'                 => 'ब्राउजर पन्ना केचिंग अक्षम करॊ',
-'tog-enotifwatchlistpages'    => 'हमरॊ ध्यानसूची मॆं दर्ज़ पन्ना बदलला के बाद हमरा इ-मेल करॊ',
-'tog-enotifusertalkpages'     => 'हमरॊ सदस्य वार्ता पृष्ठ पर बदलाव होला सॆं हमरा इ-मेल करॊ',
-'tog-enotifminoredits'        => 'तनी-मनी बदलावॊ लेली भी हमरा इ-मेल भेजॊ',
+'tog-showtoc' => 'अनुक्रम दर्शाबॊ (जोन पन्ना पर तीन सॆं ज्यादा विभाग छै)',
+'tog-rememberpassword' => 'इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)',
+'tog-watchcreations' => 'हमरॊ तैयार करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
+'tog-watchdefault' => 'हमरॊ संपादित करलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
+'tog-watchmoves' => 'हमरॊ हटैलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
+'tog-watchdeletion' => 'हमरॊ हटैलॊ पन्ना हमरॊ ध्यानसूचीमॆं रखियै',
+'tog-previewontop' => 'एडिट बॉक्स के उपर झलक दिखाबॊ',
+'tog-previewonfirst' => 'पहलॊ सम्पादन पर पूर्वावलोकन देखॊ',
+'tog-nocache' => 'ब्राउजर पन्ना केचिंग अक्षम करॊ',
+'tog-enotifwatchlistpages' => 'हमरॊ ध्यानसूची मॆं दर्ज़ पन्ना बदलला के बाद हमरा इ-मेल करॊ',
+'tog-enotifusertalkpages' => 'हमरॊ सदस्य वार्ता पृष्ठ पर बदलाव होला सॆं हमरा इ-मेल करॊ',
+'tog-enotifminoredits' => 'तनी-मनी बदलावॊ लेली भी हमरा इ-मेल भेजॊ',
 
 'underline-never' => 'कहियो नै',
 
 # 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|श्रेणी|श्रेणी}}',
-'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 }}',
 'listingcontinuesabbrev' => 'आगे.',
 
-'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'   => '$1 के $2 पर इ पन्ना पर अन्तिम बार परिवर्तन भेलै.',
-'jumpto'           => 'हिन्नॆ जा:',
+'personaltools' => 'वैयक्तिक औज़ार',
+'talk' => 'चर्चा',
+'views' => 'दर्शाव',
+'toolbox' => 'साधनपेटी',
+'otherlanguages' => 'इतर भाषा',
+'redirectedfrom' => '($1 सॆं भेजनॊ गेलॊ)',
+'redirectpagesub' => 'पुन: निर्देशित पन्ना',
+'lastmodifiedat' => '$1 के $2 पर इ पन्ना पर अन्तिम बार परिवर्तन भेलै.',
+'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'    => 'अस्वीकरण',
+'aboutsite' => '{{SITENAME}} केरॊ बारे मॆं',
+'aboutpage' => 'Project:परिचय',
+'copyright' => 'सामग्री $1 के तहत उपलब्ध छै.',
+'copyrightpage' => '{{ns:project}}:सर्वाधिकार',
+'disclaimers' => 'अस्वीकरण',
 'disclaimerpage' => 'Project:साधारण अस्वीकरण',
-'edithelp'       => 'संपादन मॆं सहायता',
-'edithelppage'   => 'Help:संपादन',
-'helppage'       => 'Help:सहायता',
-'mainpage'       => 'मुख्य पृष्ठ',
-'privacy'        => 'गोपनीयता नीति',
-'privacypage'    => 'Project:गोपनीयता नीति',
+'edithelp' => 'संपादन मॆं सहायता',
+'edithelppage' => 'Help:संपादन',
+'helppage' => 'Help:सहायता',
+'mainpage' => 'मुख्य पृष्ठ',
+'privacy' => 'गोपनीयता नीति',
+'privacypage' => 'Project:गोपनीयता नीति',
 
 'badaccess' => 'अनुमति त्रुटि',
 
-'retrievedfrom'       => '"$1" सॆं लेलॊ गेलॊ',
-'youhavenewmessages'  => 'तोरा लेली छै $1  ($2)',
-'newmessageslink'     => 'नया संदेश',
+'retrievedfrom' => '"$1" सॆं लेलॊ गेलॊ',
+'youhavenewmessages' => 'तोरा लेली छै $1  ($2)',
+'newmessageslink' => 'नया संदेश',
 'newmessagesdifflink' => 'पिछला बदलाव',
-'editsection'         => 'संपादन',
-'editold'             => 'संपादन',
-'editlink'            => 'संपादन',
-'viewsourcelink'      => 'स्रोत देखॊ.',
-'editsectionhint'     => 'विभाग संपादन: $1',
-'toc'                 => 'विषय सूची',
-'showtoc'             => 'देखाबॊ',
-'hidetoc'             => 'छुपाबॊ',
-'site-rss-feed'       => '$1 केरॊ आरएसएस फ़ीड',
-'site-atom-feed'      => '$1 केरॊ अणु फ़ीड',
-'page-rss-feed'       => '$1 केरॊ आरएसएस फ़ीड',
-'page-atom-feed'      => '"$1" अणु फ़ीड',
-'red-link-title'      => '$1 (पृष्ठ मौजूद नै छै)',
+'editsection' => 'संपादन',
+'editold' => 'संपादन',
+'editlink' => 'संपादन',
+'viewsourcelink' => 'स्रोत देखॊ.',
+'editsectionhint' => 'विभाग संपादन: $1',
+'toc' => 'विषय सूची',
+'showtoc' => 'देखाबॊ',
+'hidetoc' => 'छुपाबॊ',
+'site-rss-feed' => '$1 केरॊ आरएसएस फ़ीड',
+'site-atom-feed' => '$1 केरॊ अणु फ़ीड',
+'page-rss-feed' => '$1 केरॊ आरएसएस फ़ीड',
+'page-atom-feed' => '"$1" अणु फ़ीड',
+'red-link-title' => '$1 (पृष्ठ मौजूद नै छै)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'पन्ना',
-'nstab-user'     => 'सदस्य पन्ना',
-'nstab-special'  => 'खास पन्ना',
-'nstab-project'  => 'परियोजना पृष्ठ',
-'nstab-image'    => 'फाईल',
+'nstab-main' => 'पन्ना',
+'nstab-user' => 'सदस्य पन्ना',
+'nstab-special' => 'खास पन्ना',
+'nstab-project' => 'परियोजना पृष्ठ',
+'nstab-image' => 'फाईल',
 'nstab-template' => 'टेम्प्लेट',
 'nstab-category' => 'श्रेणी',
 
 # General errors
-'missing-article'    => 'आँकड़ाकोष मॆं $2 के अंदर कहीं भी "$1" नै मिललै.
+'missing-article' => 'आँकड़ाकोष मॆं $2 के अंदर कहीं भी "$1" नै मिललै.
 
 आमतौर पर मिटैलॊ जाय चुकलॊ पन्ना के इतिहास कड़ी के इस्तेमाल करला पर ऐसनॊ होय छै.
 
 अगर ऐसनॊ नै छै, तॆ शायद आपनॆ तंत्रांश केरॊ त्रुटि खोजी लेनॆ छियॊ.
 कृपया पता समेत [[Special:ListUsers/sysop|administrator]] कॆ ऐकरॊ ब्यौरा दहॊ.',
 'missingarticle-rev' => '(आवृत्ती#: $1)',
-'badtitletext'       => 'आपनॆ द्वारा आग्रहत लेख केरॊ शीर्षक अयोग्य, ख़ाली या गलती सॆं जुडलॊ आंतर-भाषिय या आंतर-विकि शीर्षक छेकै . एकरा मॆ एक या एक सॆं ज्यादा ऐनहॊ कॅरेक्टर छै जे शीर्षक मॆं इस्तेमाल नै करलॊ जाबॆ सकॆ छै.',
-'viewsource'         => 'स्रोत देखॊ',
+'badtitletext' => 'आपनॆ द्वारा आग्रहत लेख केरॊ शीर्षक अयोग्य, ख़ाली या गलती सॆं जुडलॊ आंतर-भाषिय या आंतर-विकि शीर्षक छेकै . एकरा मॆ एक या एक सॆं ज्यादा ऐनहॊ कॅरेक्टर छै जे शीर्षक मॆं इस्तेमाल नै करलॊ जाबॆ सकॆ छै.',
+'viewsource' => 'स्रोत देखॊ',
 
 # Login and logout pages
-'yourname'                => 'सदस्यनाम:',
-'yourpassword'            => 'कूटशब्द :',
-'remembermypassword'      => 'इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)',
-'login'                   => 'लॉग इन',
+'yourname' => 'सदस्यनाम:',
+'yourpassword' => 'कूटशब्द :',
+'remembermypassword' => 'इ कंप्यूटर पर हमरॊ लॉग-इन सूचना याद रखॊ (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} लेली)',
+'login' => 'लॉग इन',
 'nav-login-createaccount' => 'सत्रारंभ / खाता खोलॊ',
-'userlogin'               => 'लॉग इन / खाता बनाबॊ',
-'logout'                  => ' सत्रांत (लॉग आउट)',
-'userlogout'              => 'सत्रांत (लॉग आउट)',
-'nologinlink'             => 'एगो खाता बनाबॊ',
-'mailmypassword'          => 'इमेल द्वारा नया कूटशब्द भेजॊ',
+'userlogin' => 'लॉग इन / खाता बनाबॊ',
+'logout' => ' सत्रांत (लॉग आउट)',
+'userlogout' => 'सत्रांत (लॉग आउट)',
+'nologinlink' => 'एगो खाता बनाबॊ',
+'mailmypassword' => 'इमेल द्वारा नया कूटशब्द भेजॊ',
 
 # 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'    => 'द्वितीय-स्तर शीर्षक',
-'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-preview'                  => 'सारांश पूर्वावलोकन:',
-'newarticle'                       => '(नया)',
-'newarticletext'                   => 'आपनॆ जे लेख चाहै छियै वू अखनी तलक लिखलॊ नै गेलॊ छै. इ लेख लिखै लेली नीचे टाइप करॊ. सहायता लेली [[{{MediaWiki:Helppage}}|ऐन्जां]] क्लीक करॊ.
+'summary' => 'सारांश:',
+'subject' => 'विषय/शीर्षक',
+'minoredit' => 'इ एगॊ छोटा परिवर्तन छेकै',
+'watchthis' => 'इ पन्ना ध्यानसूची में डालॊ',
+'savearticle' => 'पन्ना सँजोवॊ',
+'preview' => 'पूर्वावलोकन',
+'showpreview' => 'पूर्वावलोकन देखाबॊ',
+'showdiff' => 'बदलाव देखाबॊ',
+'anoneditwarning' => "'''सावधान:''' आपनॆ लॉग-इन नै करनॆ छियै. इ पृष्ठ के संपादन इतिहास मॆं आपनॆ के आइ.पी. पता अंकित करलॊ जैतै.",
+'summary-preview' => 'सारांश पूर्वावलोकन:',
+'newarticle' => '(नया)',
+'newarticletext' => 'आपनॆ जे लेख चाहै छियै वू अखनी तलक लिखलॊ नै गेलॊ छै. इ लेख लिखै लेली नीचे टाइप करॊ. सहायता लेली [[{{MediaWiki:Helppage}}|ऐन्जां]] क्लीक करॊ.
 
 जों आपनॆ यहां पर गलती सॆं आबी गेलॊ छियै तॆ आपनॊ ब्राउज़र कॆ बॅक (back) पर क्लीक करॊ.',
-'noarticletext'                    => '
+'noarticletext' => '
 Hindi (hi)फ़िलहाल इस पन्ने पर कोई सामग्री नहीं है।
 आपनॆ अन्य पन्ना मॆं [[Special:Search/{{PAGENAME}}|इ सामग्री के खोज]] करॆ सकॆ छियै,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित चिट्ठा मॆं खोज करॆ सकै छियै],
 या [{{fullurl:{{FULLPAGENAME}}|action=edit}} इ पन्ना कॆ संपादित करॆ सकॆ छियै]</span>.',
-'previewnote'                      => "'''याद रखॊ, इ केवल एगॊ झलक छेकै आरू अभी तलक सुरक्षित  नै करलॊ गेलॊ छै!'''",
-'editing'                          => '$1 केरॊ सम्पादन चली रहलॊ छै.',
-'editingsection'                   => '$1 सम्पादन (अनुभाग)',
-'copyrightwarning'                 => "कृपया ध्यान दहॊ कि {{SITENAME}} कॆ करलॊ गेलॊ सब्भॆ योगदान $2 के शर्तों के तहत होतै (अधिक जानकारी लेली $1 देखॊ)।
+'previewnote' => "'''याद रखॊ, इ केवल एगॊ झलक छेकै आरू अभी तलक सुरक्षित  नै करलॊ गेलॊ छै!'''",
+'editing' => '$1 केरॊ सम्पादन चली रहलॊ छै.',
+'editingsection' => '$1 सम्पादन (अनुभाग)',
+'copyrightwarning' => "कृपया ध्यान दहॊ कि {{SITENAME}} कॆ करलॊ गेलॊ सब्भॆ योगदान $2 के शर्तों के तहत होतै (अधिक जानकारी लेली $1 देखॊ)।
 अगर आप योगदान कॆ लगातार बदलतॆं आरू पुनः वितरित होतॆं नै देखॆ सकॆ छियै तॆ यहाँ योगदान नै करॊ. <br />
 आपनॆ इ भी प्रमाणित करी रहलॊ छियै कि इ आपनॆ खुद लिखनॆ छियै या जनार्पीत या कोनो अन्य मुक्त स्रोत सॆं प्रतिलिपित करलॊ गेलॊ छै. '''सर्वाधिकारयुक्त लेखॊ कॆ, बिना अनुमति के, यहाँ नै डालॊ!'''",
-'templatesused'                    => ' {{PLURAL:$1|Template|Templates}} इ पृष्ठ पर प्रयुक्त साँचा:',
-'templatesusedpreview'             => '{{PLURAL:$1|Template|Templates}} इ झलक मॆ प्रयुक्त साँचा:',
-'template-protected'               => '(सुरक्षित)',
-'template-semiprotected'           => '(अर्ध-सुरक्षीत)',
-'hiddencategories'                 => 'इ लेख निम्नलिखित {{PLURAL:$1|1 छुपैलॊ श्रेणी मॆ|$1 छुपैलॊ श्रेणी मॆ}} छै:',
+'templatesused' => ' {{PLURAL:$1|Template|Templates}} इ पृष्ठ पर प्रयुक्त साँचा:',
+'templatesusedpreview' => '{{PLURAL:$1|Template|Templates}} इ झलक मॆ प्रयुक्त साँचा:',
+'template-protected' => '(सुरक्षित)',
+'template-semiprotected' => '(अर्ध-सुरक्षीत)',
+'hiddencategories' => 'इ लेख निम्नलिखित {{PLURAL:$1|1 छुपैलॊ श्रेणी मॆ|$1 छुपैलॊ श्रेणी मॆ}} छै:',
 'permissionserrorstext-withaction' => 'आपनॆकॆ $2 केरॊ अनुमति नै छै, निम्नलिखित {{PLURAL:$1|कारण लेली|कारणॊ लेली}}:',
 
 # History pages
-'viewpagelogs'           => 'इ पन्ना के लॉग देखॊ',
-'currentrev-asof'        => '$1 केरॊ समय के संस्करण',
-'revisionasof'           => '$1 केरॊ संस्करण',
-'previousrevision'       => 'पुरानॊ संशोधन',
-'nextrevision'           => 'नया संशोधन →',
-'currentrevisionlink'    => 'हाल के संशोधन',
-'cur'                    => 'चालू',
-'last'                   => 'पिछला',
-'histlegend'             => 'फर्क चयन: फर्क देखै लेली पुराना अवतरणॊ के आगे देलॊ गेलॊ रेडियो बॉक्सपर क्लीक करॊ तथा एन्टर करॊ अथवा नीचॆं देलॊ बटन पर क्लीक करॊ<br />
+'viewpagelogs' => 'इ पन्ना के लॉग देखॊ',
+'currentrev-asof' => '$1 केरॊ समय के संस्करण',
+'revisionasof' => '$1 केरॊ संस्करण',
+'previousrevision' => 'पुरानॊ संशोधन',
+'nextrevision' => 'नया संशोधन →',
+'currentrevisionlink' => 'हाल के संशोधन',
+'cur' => 'चालू',
+'last' => 'पिछला',
+'histlegend' => 'फर्क चयन: फर्क देखै लेली पुराना अवतरणॊ के आगे देलॊ गेलॊ रेडियो बॉक्सपर क्लीक करॊ तथा एन्टर करॊ अथवा नीचॆं देलॊ बटन पर क्लीक करॊ<br />
 लिजेंड: (चालू) = सद्य अवतरण के बीच मॆ फर्क,
 (आखिरी) = पिछला अवतरण के बीच मॆं फर्क, छो = छोटा बदलाव',
 '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|all pages that link to "$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'  => 'सुझाव सहित',
+'searchresults' => 'खोज परिणाम',
+'searchresults-title' => '"$1" लेली खोज परिणाम',
+'searchresulttext' => '{{SITENAME}} मॆं खोज करै लेली सहायता खातिर [[{{MediaWiki:Helppage}}|{{int:help}}]] देखॊ.',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' खातिर आपनॆ करलॊ गेलॊ खोज ([[Special:Prefixindex/$1| "$1" सॆं शुरु होय वाला सब पन्ना]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
+'searchsubtitleinvalid' => "तोरॊ खोज '''$1''' के परिणाम",
+'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'                 => "'''सूचना''': मूलतः कुछ ही नामस्थानॊ मॆं खोजलॊ जाय छै. अगर आपने कॆ सब नामस्थानॊ मॆं खोजना छै तॆ खोजशब्दॊ के पहले ''all:'' लगायकॆ खोजै के कोशिश करॊ या फिर कोनो नामस्थान के नाम लिखॊ.",
-'powersearch'               => 'उन्नत खोज',
-'powersearch-legend'        => 'उन्नत खोज',
-'powersearch-ns'            => 'नामस्थानॊ मॆ खोजॊ:',
-'powersearch-redir'         => 'अनुप्रेषितॊ के सूची दर्शाबॊ.',
-'powersearch-field'         => 'लेली खोजॊ',
+'nonefound' => "'''सूचना''': मूलतः कुछ ही नामस्थानॊ मॆं खोजलॊ जाय छै. अगर आपने कॆ सब नामस्थानॊ मॆं खोजना छै तॆ खोजशब्दॊ के पहले ''all:'' लगायकॆ खोजै के कोशिश करॊ या फिर कोनो नामस्थान के नाम लिखॊ.",
+'powersearch' => 'उन्नत खोज',
+'powersearch-legend' => 'उन्नत खोज',
+'powersearch-ns' => 'नामस्थानॊ मॆ खोजॊ:',
+'powersearch-redir' => 'अनुप्रेषितॊ के सूची दर्शाबॊ.',
+'powersearch-field' => 'लेली खोजॊ',
 
 # Preferences page
-'preferences'   => 'वरीयता',
+'preferences' => 'वरीयता',
 'mypreferences' => 'हमरॊ वरीयता',
 
 # Groups
@@ -326,84 +325,84 @@ Hindi (hi)फ़िलहाल इस पन्ने पर कोई सा
 'action-edit' => ' ई पन्ना के सम्पादन करॊ',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|बदलाव|बदलाव}}',
-'recentchanges'                  => 'हाल मॆं होलॊ बदलाव',
-'recentchanges-legend'           => 'हाल केरॊ परिवर्तन संबंधी विकल्प',
+'nchanges' => '$1 {{PLURAL:$1|बदलाव|बदलाव}}',
+'recentchanges' => 'हाल मॆं होलॊ बदलाव',
+'recentchanges-legend' => 'हाल केरॊ परिवर्तन संबंधी विकल्प',
 'recentchanges-feed-description' => 'इ फ़ीड मॆ होय वाला विकि पर हाल मॆ होलॊ बदलाव देखियै.',
-'rcnote'                         => "$5, $4 के पहले के {{PLURAL:$2|'''१''' दिन|'''$2''' दिनों}} मॆं  {{PLURAL:$1|होलॊ '''१''' बदलाव इ प्रकार छै.| होलॊ '''$1''' बदलाव इ प्रकार छै}}",
-'rclistfrom'                     => '$1 सॆं नया बदलाव देखलाबॊ',
-'rcshowhideminor'                => 'छोटॊ बदलाव $1',
-'rcshowhidebots'                 => 'बोट सीनी $1',
-'rcshowhideliu'                  => 'लॉग्ड इन सदस्यॊ के बदलाव $1',
-'rcshowhideanons'                => 'अनामक सदस्यॊ के बदलाव $1',
-'rcshowhidemine'                 => 'हमरॊ बदलाव $1',
-'rclinks'                        => 'पिछला $2 दिना मॆं होलॊ $1 बदलाव देखियै.<br />$3',
-'diff'                           => 'अंतर',
-'hist'                           => 'इतिहास',
-'hide'                           => 'छुपाबॊ',
-'show'                           => 'देखाबॊ',
-'minoreditletter'                => ' छो.',
-'newpageletter'                  => 'न',
-'boteditletter'                  => 'बो',
-'rc-enhanced-expand'             => 'विस्तृत जानकारी देखाबॊ (ऐकरा लेली जावास्क्रिप्ट चाहियॊ)',
-'rc-enhanced-hide'               => 'विस्तृत जानकारी छिपाबॊ',
+'rcnote' => "$5, $4 के पहले के {{PLURAL:$2|'''१''' दिन|'''$2''' दिनों}} मॆं  {{PLURAL:$1|होलॊ '''१''' बदलाव इ प्रकार छै.| होलॊ '''$1''' बदलाव इ प्रकार छै}}",
+'rclistfrom' => '$1 सॆं नया बदलाव देखलाबॊ',
+'rcshowhideminor' => 'छोटॊ बदलाव $1',
+'rcshowhidebots' => 'बोट सीनी $1',
+'rcshowhideliu' => 'लॉग्ड इन सदस्यॊ के बदलाव $1',
+'rcshowhideanons' => 'अनामक सदस्यॊ के बदलाव $1',
+'rcshowhidemine' => 'हमरॊ बदलाव $1',
+'rclinks' => 'पिछला $2 दिना मॆं होलॊ $1 बदलाव देखियै.<br />$3',
+'diff' => 'अंतर',
+'hist' => 'इतिहास',
+'hide' => 'छुपाबॊ',
+'show' => 'देखाबॊ',
+'minoreditletter' => ' छो.',
+'newpageletter' => 'न',
+'boteditletter' => 'बो',
+'rc-enhanced-expand' => 'विस्तृत जानकारी देखाबॊ (ऐकरा लेली जावास्क्रिप्ट चाहियॊ)',
+'rc-enhanced-hide' => 'विस्तृत जानकारी छिपाबॊ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'इ पृष्ठ संबंधी बदलाव',
-'recentchangeslinked-title'   => '"$1" मॆं होलॊ बदलाव',
+'recentchangeslinked' => 'इ पृष्ठ संबंधी बदलाव',
+'recentchangeslinked-title' => '"$1" मॆं होलॊ बदलाव',
 'recentchangeslinked-summary' => "कोनो पन्ना के हवाले कत्तॆ भी पन्ना मौजूद हुऎ सकॆ छै, इ सूची उ पन्ना (या कोनो श्रेणी के सदस्यॊ) मॆं होलॊ हाल के बदलाव देखाबै छै.
 [[Special:Watchlist|आपनॆ के ध्यानसूची]] मॆं मौजूद पन्ना '''मोटा''' अक्षरॊ मॆं दिखतै.",
-'recentchangeslinked-page'    => 'पृष्ठ नाम:',
-'recentchangeslinked-to'      => 'ऐकरॊ बदला मॆं देलॊ पन्ना सीनी सॆं जुडलॊ पन्ना सीनी के बदलाव दिखलाबॊ',
+'recentchangeslinked-page' => 'पृष्ठ नाम:',
+'recentchangeslinked-to' => 'ऐकरॊ बदला मॆं देलॊ पन्ना सीनी सॆं जुडलॊ पन्ना सीनी के बदलाव दिखलाबॊ',
 
 # Upload
-'upload'        => 'फाईल अपलोड',
+'upload' => 'फाईल अपलोड',
 'uploadlogpage' => 'अपलोड सूची',
 'uploadedimage' => '"[[$1]]" कॆ अपलोड करलॊ गेलै',
 
 # File description page
-'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 सॆ छै आरू संभवतः अन्य परियोजना भी एकरॊ इस्तेमाल करी रहलॊ होतै.',
+'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|बाइट|बाइट}}',
-'nmembers'      => '{{PLURAL:$1|एगॊ सदस्य|$1 सदस्य}}',
-'prefixindex'   => 'इ उपसर्ग वाल सब्भे पन्ना',
-'newpages'      => 'नया पन्ना',
-'move'          => 'स्थानांतरण',
-'movethispage'  => 'इ पन्ना स्थानांतरित करॊ',
+'nbytes' => '{{PLURAL:$1|बाइट|बाइट}}',
+'nmembers' => '{{PLURAL:$1|एगॊ सदस्य|$1 सदस्य}}',
+'prefixindex' => 'इ उपसर्ग वाल सब्भे पन्ना',
+'newpages' => 'नया पन्ना',
+'move' => 'स्थानांतरण',
+'movethispage' => 'इ पन्ना स्थानांतरित करॊ',
 'pager-newer-n' => '{{PLURAL:$1|नया 1|नया सीनी $1}}',
 'pager-older-n' => '{{PLURAL:$1|पुराना 1|पुरानॊ सीनी $1}}',
 
 # Book sources
-'booksources'               => 'पुस्तक स्रोत',
+'booksources' => 'पुस्तक स्रोत',
 'booksources-search-legend' => 'पुस्तक स्रोत खोजॊ',
-'booksources-go'            => 'जा',
+'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
@@ -419,169 +418,169 @@ Hindi (hi)फ़िलहाल इस पन्ने पर कोई सा
 'emailuser' => 'इ सदस्य कॆ ई-मेल भेजॊ',
 
 # Watchlist
-'watchlist'         => 'हमरॊ ध्यानसूची',
-'mywatchlist'       => 'हमरॊ ध्यानसूची',
-'addedwatchtext'    => '"[[:$1]]" आपनॆके [[Special:Watchlist|ध्यानसूची]] मॆं "<nowiki>$1</nowiki>" केरॊ समावेश करी देलॊ गेलॊ छै.
+'watchlist' => 'हमरॊ ध्यानसूची',
+'mywatchlist' => 'हमरॊ ध्यानसूची',
+'addedwatchtext' => '"[[:$1]]" आपनॆके [[Special:Watchlist|ध्यानसूची]] मॆं "<nowiki>$1</nowiki>" केरॊ समावेश करी देलॊ गेलॊ छै.
 भविष्य मॆं इ पन्ना तथा इ पन्ने केरॊ वार्ता मॆं होय वाला बदलाव आपनॆकॆ ध्यानसूची मॆं दिखतै तथा [[Special:RecentChanges|हाल मॆं होलॊ बदलावॊ के सूची]] मॆं ई पन्ना बोल्ड दिखतै ताकि  आपनॆ आसानी सॆं एकरॊ ध्यान रखॆ सकियै.
 
 <p>अगर आपनॆकॆ इ पन्ना कॆ अपनॊ ध्यानसूची सॆं निकालना छै तॆ [[Special:RecentChanges|टटका परिवर्तन]] पर क्लिक करॊ.',
-'removedwatchtext'  => '"[[:$1]]" नामक पन्ना कॆ आपनॆ के [[Special:Watchlist|ध्यानसूची]] सॆं हटाय देलॊ गेलॊ छै.',
-'watch'             => 'ध्यान रखॊ',
-'watchthispage'     => 'ई पन्ना ध्यानसूची में डालॊ',
-'unwatch'           => 'ध्यान हटाबॊ',
+'removedwatchtext' => '"[[:$1]]" नामक पन्ना कॆ आपनॆ के [[Special:Watchlist|ध्यानसूची]] सॆं हटाय देलॊ गेलॊ छै.',
+'watch' => 'ध्यान रखॊ',
+'watchthispage' => 'ई पन्ना ध्यानसूची में डालॊ',
+'unwatch' => 'ध्यान हटाबॊ',
 'watchlist-details' => 'वार्ता पन्ना केरॊ अलावा {{PLURAL:$1|$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
-'watching'   => 'ध्यान दय रहलॊ छै...',
+'watching' => 'ध्यान दय रहलॊ छै...',
 'unwatching' => 'ध्यान हटाय रहलॊ छियै...',
 
 # Delete
-'deletepage'             => 'पन्ना हटाबॊ',
-'confirmdeletetext'      => 'आपनॆ एगॊ लेख ओकरॊ सब्भॆ अवतरणॊ के साथ हटाय लॆ चाहै छहॊ.
+'deletepage' => 'पन्ना हटाबॊ',
+'confirmdeletetext' => 'आपनॆ एगॊ लेख ओकरॊ सब्भॆ अवतरणॊ के साथ हटाय लॆ चाहै छहॊ.
 आपनॆ सॆं अनुरोध छै कि आपनॆ जे करी रहलॊ छियै वू मीडिया विकि के [[{{MediaWiki:Policy-url}}|नीतिनुसार]] छै इ बात के पुष्टि करी लॆ तथा क्रिया करला सॆं पहले आपनॊ क्रिया के परिणाम जानी लॆ.',
-'actioncomplete'         => 'कार्य पूर्ण',
-'actionfailed'           => 'क्रिया विफल',
-'deletedtext'            => '"$1" कॆ हटैलॊ गेलॊ छै.
+'actioncomplete' => 'कार्य पूर्ण',
+'actionfailed' => 'क्रिया विफल',
+'deletedtext' => '"$1" कॆ हटैलॊ गेलॊ छै.
 हाल में हटैलॊ गेलॊ लेखॊ के सूची लेली $2 देखॊ.',
-'dellogpage'             => 'हटाबै के सूची',
-'dellogpagetext'         => 'नीचॆ हाल मॆं हटैलॊ गेलॊ पन्ना के सूची छै.',
-'deletionlog'            => 'हटाबै के सूची',
-'reverted'               => 'पुराने अवतरण कॆ पूर्ववत करलॊ गेलै',
-'deletecomment'          => 'कारण:',
-'deleteotherreason'      => 'दोसरॊ/अतिरिक्त कारण:',
-'deletereasonotherlist'  => 'दोसरॊ कारण',
-'deletereason-dropdown'  => '*हटाबै के सामान्य कारण
+'dellogpage' => 'हटाबै के सूची',
+'dellogpagetext' => 'नीचॆ हाल मॆं हटैलॊ गेलॊ पन्ना के सूची छै.',
+'deletionlog' => 'हटाबै के सूची',
+'reverted' => 'पुराने अवतरण कॆ पूर्ववत करलॊ गेलै',
+'deletecomment' => 'कारण:',
+'deleteotherreason' => 'दोसरॊ/अतिरिक्त कारण:',
+'deletereasonotherlist' => 'दोसरॊ कारण',
+'deletereason-dropdown' => '*हटाबै के सामान्य कारण
 ** लेखक के बिनती
 ** कॉपीराईट
 ** वॅन्डॅलिजम',
 'delete-edit-reasonlist' => 'हटाबै के कारण कॆ संपादित करॊ',
-'delete-toobig'          => 'इ पन्ना केरॊ संपादन इतिहास $1 सॆं अधिक {{PLURAL:$1|संस्करण|संस्करण}} होला के वजह सॆं बहुत बड़ा छै.
+'delete-toobig' => 'इ पन्ना केरॊ संपादन इतिहास $1 सॆं अधिक {{PLURAL:$1|संस्करण|संस्करण}} होला के वजह सॆं बहुत बड़ा छै.
 {{SITENAME}} के अनपेक्षित रूप सॆं बंद होला सॆं रोकै लेली ऐसनॊ पन्ना कॆ हटाबै के अनुमति नै छै.',
-'delete-warning-toobig'  => 'इस लेख केरॊ संपादन इतिहास काफ़ी लंबा चौड़ा छै, ऐकरॊ $1 सॆं अधिक {{PLURAL:$1|संस्करण|संस्करण}} छै.
+'delete-warning-toobig' => 'इस लेख केरॊ संपादन इतिहास काफ़ी लंबा चौड़ा छै, ऐकरॊ $1 सॆं अधिक {{PLURAL:$1|संस्करण|संस्करण}} छै.
 एकरा हटैला सॆं {{SITENAME}} के आँकड़ाकोष के गतिविधियॊ मॆं व्यवधान आबॆ सकॆ छै;
 कृपया सोची समझी कॆ आगू बढ़ॊ.',
 
 # Rollback
-'rollback'          => 'संपादन पीछू लॆ जाय',
-'rollback_short'    => 'पूर्ववत करॊ',
-'rollbacklink'      => 'वापस लॆ',
-'rollbackfailed'    => 'पूर्ववत स्थिति निष्फल',
-'cantrollback'      => 'पुराना अवतरण पूर्ववत नै करॆ सकॆ छियै;
+'rollback' => 'संपादन पीछू लॆ जाय',
+'rollback_short' => 'पूर्ववत करॊ',
+'rollbacklink' => 'वापस लॆ',
+'rollbackfailed' => 'पूर्ववत स्थिति निष्फल',
+'cantrollback' => 'पुराना अवतरण पूर्ववत नै करॆ सकॆ छियै;
 इ पन्ना के आखिरी योगदानकर्ता इ लेख के एकमात्र लेखक छेकै.',
-'alreadyrolled'     => '[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा करलॊ गेलॊ  [[:$1]] के पिछला संपादन कॆ वापस पुरानॊ स्थिति पर नै लानलॊ जाबॆ सकॆ छै;
+'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा करलॊ गेलॊ  [[:$1]] के पिछला संपादन कॆ वापस पुरानॊ स्थिति पर नै लानलॊ जाबॆ सकॆ छै;
 कोय आरू इ बीच या तॆ इ पन्ना कॆ फिर सॆं संपादित करी देनॆ छै या पहले ही पन्ना पुरानॊ स्थिति पर लानलॊ जाय चुकलॊ छै.
 
 इ पन्ना के ताज़ातरीन संपादन [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) नॆ करनॆ छै.',
-'editcomment'       => "संपादन टिप्पणी छेलै: \"''\$1''\".",
-'revertpage'        => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) केरॊ संपादनॊ कॆ हटायकॆ [[User:$1|$1]] के आखिरी अवतरण कॆ पूर्ववत करलॊ गेलै.',
+'editcomment' => "संपादन टिप्पणी छेलै: \"''\$1''\".",
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) केरॊ संपादनॊ कॆ हटायकॆ [[User:$1|$1]] के आखिरी अवतरण कॆ पूर्ववत करलॊ गेलै.',
 'revertpage-nouser' => '(प्रयोक्ता नाम हटैलॊ गेलॊ छै) द्वारा करलॊ संपादन कॆ वापस पुरानॊ स्थिति मॆं लाना कॆ ऐकरॊ पहले केरॊ [[User:$1|$1]] द्वारा बनैलॊ संस्करण कॆ फिर सॆं ताज़ा संस्करण बनाबॊ.',
-'rollback-success'  => '$1 केरॊ संपादन हटाबॊ;
+'rollback-success' => '$1 केरॊ संपादन हटाबॊ;
 $2 द्वारा संपादित आखिरी अवतरण कॆ पुनर्स्थापित करलॊ गेलै.',
 
 # Edit tokens
 'sessionfailure-title' => 'निष्फल सत्र',
-'sessionfailure'       => 'ऐसनॊ प्रतीत होय छै कि आपनॆ के लोगिन सत्र के साथ कोनो समस्या छै.
+'sessionfailure' => 'ऐसनॊ प्रतीत होय छै कि आपनॆ के लोगिन सत्र के साथ कोनो समस्या छै.
 सत्र अपहरण सॆं बचाबै लेली सावधानी के तौर पर आपनॆ के इ क्रियाकलाप रद्द करी देलॊ गेलॊ छै.
 कृपया "back" पर वार करॊ आरू पृष्ठ कॆ दुबारा सॆं लोड करॊ, तबॆ दुबारा कोशिश करॊ.',
 
 # 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-default'             => 'सब्भॆ सदस्यॊ कॆ अनुमति दॆ',
-'protect-fallback'            => '"$1" इजाज़त जरूरी छै',
+'protect-cascadeon' => 'ई पन्ना अभी सुरक्षित छै कैन्हेंकि वू {{PLURAL:$1|इ पन्ना के | इ पन्ना के}} सुरक्षा-सीढीपर छै. आपनॆ इ पन्ना के सुरक्षा-स्तर बदलॆ सकॆ छियै, पर एकरा सॆं सुरक्षा-सीढी मॆं बदलाव नै होतै.',
+'protect-default' => 'सब्भॆ सदस्यॊ कॆ अनुमति दॆ',
+'protect-fallback' => '"$1" इजाज़त जरूरी छै',
 'protect-level-autoconfirmed' => 'नयॊ व अपंजीकृत सदस्यॊ कॆ अवरोधित करॊ',
-'protect-level-sysop'         => 'सिर्फ प्रचालक',
-'protect-summary-cascade'     => 'सीढी',
-'protect-expiring'            => 'समाप्ती $1 (UTC)',
-'protect-expiry-indefinite'   => 'बेमियादी',
-'protect-cascade'             => 'इस पन्ना सॆं जुडलॊ पन्ना सुरक्षित करॊ (सुरक्षा-सीढी)',
-'protect-cantedit'            => 'आपनॆ इ पन्ना के सुरक्षा-स्तर बदलॆ नै सकॆ छियै कैन्हेकि आपनॆ कॆ ऐसनॊ करै के अनुमति नै छै.',
-'restriction-type'            => 'इजाज़त:',
-'restriction-level'           => 'सुरक्षा-स्तर',
-'minimum-size'                => 'कम सॆं कम आकार',
-'maximum-size'                => 'जादा सॆं जादा आकार:',
-'pagesize'                    => '(बाईट्स)',
+'protect-level-sysop' => 'सिर्फ प्रचालक',
+'protect-summary-cascade' => 'सीढी',
+'protect-expiring' => 'समाप्ती $1 (UTC)',
+'protect-expiry-indefinite' => 'बेमियादी',
+'protect-cascade' => 'इस पन्ना सॆं जुडलॊ पन्ना सुरक्षित करॊ (सुरक्षा-सीढी)',
+'protect-cantedit' => 'आपनॆ इ पन्ना के सुरक्षा-स्तर बदलॆ नै सकॆ छियै कैन्हेकि आपनॆ कॆ ऐसनॊ करै के अनुमति नै छै.',
+'restriction-type' => 'इजाज़त:',
+'restriction-level' => 'सुरक्षा-स्तर',
+'minimum-size' => 'कम सॆं कम आकार',
+'maximum-size' => 'जादा सॆं जादा आकार:',
+'pagesize' => '(बाईट्स)',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'संपादन',
-'restriction-move'   => 'स्थानांतरण',
+'restriction-edit' => 'संपादन',
+'restriction-move' => 'स्थानांतरण',
 'restriction-create' => 'सृजन करॊ',
 'restriction-upload' => 'अपलोड',
 
 # Restriction levels
-'restriction-level-sysop'         => 'पूर्ण सुरक्षित',
+'restriction-level-sysop' => 'पूर्ण सुरक्षित',
 'restriction-level-autoconfirmed' => 'अर्ध सुरक्षित',
-'restriction-level-all'           => 'कोय्यॊ लेवल(स्तर)',
+'restriction-level-all' => 'कोय्यॊ लेवल(स्तर)',
 
 # Undelete
-'undelete'          => 'हटैलॊ पन्ना वापस लानॊ',
-'undeletepage'      => 'हटैलॊ पन्ना देखॊ आरू पुनर्स्थापित करॊ',
+'undelete' => 'हटैलॊ पन्ना वापस लानॊ',
+'undeletepage' => 'हटैलॊ पन्ना देखॊ आरू पुनर्स्थापित करॊ',
 'undeletepagetitle' => "'''नीचे [[:$1]] केरॊ हटैलॊ गेलॊ अवतरण भी दर्शैलॊ गेलॊ छै.'''",
-'viewdeletedpage'   => 'हटैलॊ पन्ना वापस लानॊ',
-'undeletelink'      => 'देखॊ/पुनर्स्थापित करॊ',
+'viewdeletedpage' => 'हटैलॊ पन्ना वापस लानॊ',
+'undeletelink' => 'देखॊ/पुनर्स्थापित करॊ',
 
 # Namespace form on various pages
-'namespace'      => 'नामस्थान:',
-'invert'         => 'विपरीत प्रवरण',
+'namespace' => 'नामस्थान:',
+'invert' => 'विपरीत प्रवरण',
 'blanknamespace' => '(मुख्य)',
 
 # Contributions
-'contributions'       => 'सदस्य योगदान',
+'contributions' => 'सदस्य योगदान',
 'contributions-title' => '$1 लेली सदस्यॊ के योगदान',
-'mycontris'           => 'हमरॊ योगदान',
-'contribsub2'         => '$1 लेली ($2)',
-'uctop'               => '(उपर)',
-'month'               => 'इ महिना सॆं (आरू पुरानॊ):',
-'year'                => 'इ साल सॆं (आरू पुरानॊ):',
+'mycontris' => 'हमरॊ योगदान',
+'contribsub2' => '$1 लेली ($2)',
+'uctop' => '(उपर)',
+'month' => 'इ महिना सॆं (आरू पुरानॊ):',
+'year' => 'इ साल सॆं (आरू पुरानॊ):',
 
-'sp-contributions-newbies'  => 'सिर्फ नया सदस्यॊ के योगदान दर्शाबॊ',
+'sp-contributions-newbies' => 'सिर्फ नया सदस्यॊ के योगदान दर्शाबॊ',
 'sp-contributions-blocklog' => 'ब्लॉक सूची',
-'sp-contributions-search'   => 'योगदान लेली खोज',
+'sp-contributions-search' => 'योगदान लेली खोज',
 'sp-contributions-username' => 'आईपी एड्रेस या सदस्यनाम:',
-'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 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ता:2 weeks,१ महिना:1 month,३ महिना:3 months,६ महिना:6 months,१ साल:1 year,अनंत:infinite',
-'ipblocklist'              => 'अवरोधित आईपी पता व सदस्यनाम',
-'blocklink'                => 'अवरोधित करॊ',
-'unblocklink'              => 'अवरोध हटाएँ (अनब्लॉक)',
-'change-blocklink'         => 'ब्लॉक बदलॊ',
-'contribslink'             => 'योगदान',
-'blocklogpage'             => 'ब्लॉक सूची',
-'blocklogentry'            => '"[[$1]]" कॆ $2 $3 तलक बदलाव करै सॆं रोकी देलॊ गेलॊ छै.',
-'unblocklogentry'          => '$1 ब्लॉक निकाली देलॊ गेलॊ छै.',
+'blockip' => 'अवरोधित करॊ',
+'ipboptions' => '२ घंटा:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ता:2 weeks,१ महिना:1 month,३ महिना:3 months,६ महिना:6 months,१ साल:1 year,अनंत:infinite',
+'ipblocklist' => 'अवरोधित आईपी पता व सदस्यनाम',
+'blocklink' => 'अवरोधित करॊ',
+'unblocklink' => 'अवरोध हटाएँ (अनब्लॉक)',
+'change-blocklink' => 'ब्लॉक बदलॊ',
+'contribslink' => 'योगदान',
+'blocklogpage' => 'ब्लॉक सूची',
+'blocklogentry' => '"[[$1]]" कॆ $2 $3 तलक बदलाव करै सॆं रोकी देलॊ गेलॊ छै.',
+'unblocklogentry' => '$1 ब्लॉक निकाली देलॊ गेलॊ छै.',
 'block-log-flags-nocreate' => 'खाता निर्माण पर रोक',
 
 # Move page
-'movepagetext'     => "नीचॆं देलॊ पर्चा पन्ना के नाम बदली देतै, ऐकरॊ सारा इतिहास भी नयॊ नाम सॆं दिखना शुरू होय जैतै.
+'movepagetext' => "नीचॆं देलॊ पर्चा पन्ना के नाम बदली देतै, ऐकरॊ सारा इतिहास भी नयॊ नाम सॆं दिखना शुरू होय जैतै.
 पुराना शीर्षक नया नाम कॆ अनुप्रेषित करी लेतै.
 मूल शीर्षक दन्नॆ जाय वाला अग्रेषणॊ कॆ आपनॆ स्वचालित रूपॊ सॆं बदलॆ सकॆ छियै.
 यदि आपनॆ ऐन्हॊ नै करै छियै तॆ कृपया [[Special:DoubleRedirects|दोहरा]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटलॊ पुनर्निर्देशन]] लेली ज़रूर जाँच करॊ.
@@ -603,20 +602,20 @@ $2 द्वारा संपादित आखिरी अवतरण क
 * नीचॆं देलॊ गेलॊ चेक बॉक्स आपनॆ निकाली देनॆ छियै.
 
 इ मामला मॆं आपनॆकॆ स्वयं इ पन्ना जोडै लॆ पड़तै.",
-'movearticle'      => 'पन्ना केरॊ स्थानांतरण',
-'newtitle'         => 'नया शीर्षक दन्नॆ:',
-'move-watch'       => 'ध्यान रखॊ स्रोत आरू लक्ष्य फाइल के',
-'movepagebtn'      => 'पन्ना स्थांतरण करॊ',
-'pagemovedsub'     => 'स्थानांतरण सफल रहलै',
-'movepage-moved'   => '\'\'\'"$1" कॆ "$2" पर  स्थानांतरीत करलॊ गेलै\'\'\'',
-'articleexists'    => 'इ नाम के एगॊ पन्ना पहले सॆं मौजूद छै,या फेरू आपनॆ अमान्य नाम चुननॆ छियै. कृपया दोसरॊ नाम चुनॊ.',
-'talkexists'       => "'''पन्ना के नाम बदली देलॊ गेलॊ छै, पर ओकरा सॆं संबंधित वार्ता पृष्ठ नै बदललॊ गेलॊ छै कैन्हेंकि वू पहले सॆं बनलॊ छै.
+'movearticle' => 'पन्ना केरॊ स्थानांतरण',
+'newtitle' => 'नया शीर्षक दन्नॆ:',
+'move-watch' => 'ध्यान रखॊ स्रोत आरू लक्ष्य फाइल के',
+'movepagebtn' => 'पन्ना स्थांतरण करॊ',
+'pagemovedsub' => 'स्थानांतरण सफल रहलै',
+'movepage-moved' => '\'\'\'"$1" कॆ "$2" पर  स्थानांतरीत करलॊ गेलै\'\'\'',
+'articleexists' => 'इ नाम के एगॊ पन्ना पहले सॆं मौजूद छै,या फेरू आपनॆ अमान्य नाम चुननॆ छियै. कृपया दोसरॊ नाम चुनॊ.',
+'talkexists' => "'''पन्ना के नाम बदली देलॊ गेलॊ छै, पर ओकरा सॆं संबंधित वार्ता पृष्ठ नै बदललॊ गेलॊ छै कैन्हेंकि वू पहले सॆं बनलॊ छै.
 कृपया एकरा स्वयं बदली दहॊ'''",
-'movedto'          => ' स्थानांतरीत करलॊ गेलै',
-'movetalk'         => 'संबंधित वार्ता पृष्ठ भी बदलॊ',
-'movelogpage'      => 'स्थानांतरण सूची',
-'movereason'       => 'कारण:',
-'revertmove'       => 'पुरानॊ अवतरण पर लॆ चलॊ (रिवर्ट)',
+'movedto' => ' स्थानांतरीत करलॊ गेलै',
+'movetalk' => 'संबंधित वार्ता पृष्ठ भी बदलॊ',
+'movelogpage' => 'स्थानांतरण सूची',
+'movereason' => 'कारण:',
+'revertmove' => 'पुरानॊ अवतरण पर लॆ चलॊ (रिवर्ट)',
 
 # Export
 'export' => 'पन्ना कॆ निर्यात करॊ',
@@ -625,68 +624,68 @@ $2 द्वारा संपादित आखिरी अवतरण क
 '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-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'                => 'इ पन्ना के आरएसएस फ़ीड',
-'tooltip-feed-atom'               => 'इ पन्ना के अणु फ़ीड',
-'tooltip-t-contributions'         => 'इ सदस्य के योगदान केरॊ सूची देखियै',
-'tooltip-t-emailuser'             => 'इस सदस्य कॆ इमेल भेजॊ',
-'tooltip-t-upload'                => 'फाईल लादॊ (अपलोड )',
-'tooltip-t-specialpages'          => 'ख़ास पन्ना केरॊ सूची',
-'tooltip-t-print'                 => 'इ पन्ना के छापे लायक संस्करण.',
-'tooltip-t-permalink'             => 'इ पन्ना के संसोधन खातिर स्थायी लिंक',
-'tooltip-ca-nstab-main'           => 'सामग्री पन्ना देखॊ',
-'tooltip-ca-nstab-user'           => 'सदस्य पन्ना देखियै',
-'tooltip-ca-nstab-special'        => 'इ एगॊ खास पन्ना छै, आपनॆ एकरा बदलॆ नो सकै छियै.',
-'tooltip-ca-nstab-project'        => 'प्रोजेक्ट पन्ना देखियै',
-'tooltip-ca-nstab-image'          => 'फाइल के पन्ना देखॊ',
-'tooltip-ca-nstab-template'       => 'टेम्प्लेट देखियें',
-'tooltip-ca-nstab-category'       => 'श्रेणी पन्ना देखॊ',
-'tooltip-minoredit'               => 'ऐकरा छोटा बदलाव के तौर पर दर्ज करॊ',
-'tooltip-save'                    => 'आपनॊ बदलाव कॆ सुरक्षित करॊ',
-'tooltip-preview'                 => 'आपनॊ बदलावॊ के झलक देखॊ, कृपया सँजोला सॆं पहिनै ऐकरॊ इस्तेमाल करॊ !',
-'tooltip-diff'                    => 'इ पाठ्य मॆं आपनॊ द्वारा करलॊ बदलाव देखॊ.',
+'tooltip-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' => 'इ पन्ना के आरएसएस फ़ीड',
+'tooltip-feed-atom' => 'इ पन्ना के अणु फ़ीड',
+'tooltip-t-contributions' => 'इ सदस्य के योगदान केरॊ सूची देखियै',
+'tooltip-t-emailuser' => 'इस सदस्य कॆ इमेल भेजॊ',
+'tooltip-t-upload' => 'फाईल लादॊ (अपलोड )',
+'tooltip-t-specialpages' => 'ख़ास पन्ना केरॊ सूची',
+'tooltip-t-print' => 'इ पन्ना के छापे लायक संस्करण.',
+'tooltip-t-permalink' => 'इ पन्ना के संसोधन खातिर स्थायी लिंक',
+'tooltip-ca-nstab-main' => 'सामग्री पन्ना देखॊ',
+'tooltip-ca-nstab-user' => 'सदस्य पन्ना देखियै',
+'tooltip-ca-nstab-special' => 'इ एगॊ खास पन्ना छै, आपनॆ एकरा बदलॆ नो सकै छियै.',
+'tooltip-ca-nstab-project' => 'प्रोजेक्ट पन्ना देखियै',
+'tooltip-ca-nstab-image' => 'फाइल के पन्ना देखॊ',
+'tooltip-ca-nstab-template' => 'टेम्प्लेट देखियें',
+'tooltip-ca-nstab-category' => 'श्रेणी पन्ना देखॊ',
+'tooltip-minoredit' => 'ऐकरा छोटा बदलाव के तौर पर दर्ज करॊ',
+'tooltip-save' => 'आपनॊ बदलाव कॆ सुरक्षित करॊ',
+'tooltip-preview' => 'आपनॊ बदलावॊ के झलक देखॊ, कृपया सँजोला सॆं पहिनै ऐकरॊ इस्तेमाल करॊ !',
+'tooltip-diff' => 'इ पाठ्य मॆं आपनॊ द्वारा करलॊ बदलाव देखॊ.',
 'tooltip-compareselectedversions' => 'इ पन्ना के चुनलॊ अवतरणॊ मॆं फर्क देखाबॊ.',
-'tooltip-watch'                   => 'इ पन्ना कॆ आपनॊ ध्यानसूची मॆं डालॊ.',
-'tooltip-rollback'                => ' "वापस लॆ चलॊ" इ पन्ना के पिछला योगदाता के बदलाव एक्के चटका में ग़ायब करी दै छै.',
-'tooltip-undo'                    => '"पुरानॊ स्थिति पर लानॊ" इ बदलाव कॆ वापस लॆ जाय कॆ संपादन पर्चा कॆ झलक रीति मॆं दिखलाबै छै.
+'tooltip-watch' => 'इ पन्ना कॆ आपनॊ ध्यानसूची मॆं डालॊ.',
+'tooltip-rollback' => ' "वापस लॆ चलॊ" इ पन्ना के पिछला योगदाता के बदलाव एक्के चटका में ग़ायब करी दै छै.',
+'tooltip-undo' => '"पुरानॊ स्थिति पर लानॊ" इ बदलाव कॆ वापस लॆ जाय कॆ संपादन पर्चा कॆ झलक रीति मॆं दिखलाबै छै.
 एकरॊ जरिया सारांश मॆं पुरानॊ स्थिति मॆं लानै के कारण लिखलॊ जाबॆ पारॆ.',
 
 # Browsing diffs
 'previousdiff' => ' पुराना संपादन',
-'nextdiff'     => 'टटका संपादन',
+'nextdiff' => 'टटका संपादन',
 
 # 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
@@ -696,11 +695,11 @@ $2 द्वारा संपादित आखिरी अवतरण क
 कोय भी बाद वाला लिंक ओही पंक्ति पर अईला पर ओकरा अपवाद मानलॊ जैतै, अर्थात वू पन्ना जेकरॊ अंदर इ फाईल जुङलॊ हुऎ सकॆ छै.',
 
 # Metadata
-'metadata'          => 'मेटाडाटा',
-'metadata-help'     => 'इ फ़ाईल मॆ अतिरिक्त जानकारी छै, हुऎ सकॆ छै कि इ फ़ाईल बनाबै मॆं इस्तेमाल करलॊ गेलॊ स्कैनर अथवा कैमरा सॆं इ प्राप्त होलॊ हुऒ. अगर इ फ़ाईल बदली देलॊ गेलॊ छै तॆ ई जानकारी नया फ़ाईल सॆं मेल नै खाबै के आशंका छै.',
-'metadata-expand'   => 'अतिरिक्त जानकारी दिखाबॊ',
+'metadata' => 'मेटाडाटा',
+'metadata-help' => 'इ फ़ाईल मॆ अतिरिक्त जानकारी छै, हुऎ सकॆ छै कि इ फ़ाईल बनाबै मॆं इस्तेमाल करलॊ गेलॊ स्कैनर अथवा कैमरा सॆं इ प्राप्त होलॊ हुऒ. अगर इ फ़ाईल बदली देलॊ गेलॊ छै तॆ ई जानकारी नया फ़ाईल सॆं मेल नै खाबै के आशंका छै.',
+'metadata-expand' => 'अतिरिक्त जानकारी दिखाबॊ',
 'metadata-collapse' => 'विस्तारित जानकारी छुपाबॊ',
-'metadata-fields'   => 'इ सूची मॆं देलॊ गेलॊ जानकारी फ़ाईल केरॊ नीचे मेटाडाटा जानकारी मॆं हमेशा दिखतै.
+'metadata-fields' => 'इ सूची मॆं देलॊ गेलॊ जानकारी फ़ाईल केरॊ नीचे मेटाडाटा जानकारी मॆं हमेशा दिखतै.
 बचलॊ जानकारी हमेशा छुपलॊ रहतै
 * make
 * model
@@ -717,18 +716,18 @@ $2 द्वारा संपादित आखिरी अवतरण क
 * gpsaltitude',
 
 # 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 665121f..9474765 100644 (file)
@@ -981,7 +981,7 @@ $2',
 'resetpass-temp-password' => 'كلمة سر مؤقتة:',
 
 # Special:PasswordReset
-'passwordreset' => 'تÙ\85ت Ø¥Ø¹Ø§Ø¯Ø© Ø¶Ø¨Ø· Ù\83Ù\84Ù\85Ø© Ø§Ù\84سر',
+'passwordreset' => 'إعادة ضبط كلمة السر',
 'passwordreset-text' => 'أكمل هذا النموذج لتتلقى بريدا إلكترونيا يذكر بتفاصيل حسابك.',
 'passwordreset-legend' => 'إعادة تعيين كلمة السر',
 'passwordreset-disabled' => 'عُطّلت إعادة تعيين كلمة السر على هذه الويكي.',
@@ -1144,6 +1144,7 @@ $2
 'note' => "'''ملاحظة:'''",
 'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
 لم تحفظ تغييراتك إلى الآن!",
+'continue-editing' => 'أكمل التحرير',
 'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
 'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
 من فضلك حاول مرة أخرى.
@@ -1423,7 +1424,6 @@ $1",
 
 # Diffs
 'history-title' => 'تاريخ مراجعة "$1"',
-'difference' => '(الفرق بين المراجعتين)',
 'difference-multipage' => '(الفرق بين الصفحتين)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
@@ -1592,6 +1592,7 @@ $1",
 'yourrealname' => 'الاسم الحقيقي:',
 'yourlanguage' => 'اللغة:',
 'yourvariant' => 'لهجة المحتوى:',
+'prefs-help-variant' => 'عرض لهجتك المفضلة أو إملاؤها في صفحات المحتوى لهذا الويكي.',
 'yournick' => 'التوقيع:',
 'prefs-help-signature' => 'يجب أن توقع تعليقات صفحات النقاش باستخدام "<nowiki>~~~~</nowiki>" الذي سيحول إلى توقيعك مع طابع زمني.',
 'badsig' => 'توقيع خام غير صحيح؛ تحقق من وسوم HTML.',
@@ -1766,6 +1767,7 @@ $1",
 'action-suppressionlog' => 'رؤية هذا السجل الخاص',
 'action-block' => 'منع هذا المستخدم من التعديل',
 'action-protect' => 'تغيير مستويات الحماية لهذه الصفحة',
+'action-rollback' => 'استرجاع تعديلات آخر مستخدم عدل صفحة معينة سريعا',
 'action-import' => 'استيراد هذه الصفحة من ويكي آخر',
 'action-importupload' => 'استيراد هذه الصفحة من ملف مرفوع',
 'action-patrol' => 'التعليم على تعديلات الآخرين كمراجعة',
@@ -1810,6 +1812,7 @@ $1",
 'newsectionsummary' => '/* $1 */ قسم جديد',
 'rc-enhanced-expand' => 'عرض التفاصيل (يتطلب جافاسكريبت)',
 'rc-enhanced-hide' => 'أخفِ التفاصيل',
+'rc-old-title' => 'تم إنشاؤها أصلا ك"$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'تغييرات ذات علاقة',
@@ -1974,11 +1977,32 @@ $1',
 'upload-http-error' => 'صودف خطأ HTTP: $1',
 
 # File backend
+'backend-fail-stream' => 'لا يمكن عرض الملف $1.',
+'backend-fail-backup' => 'لا يمكن صنع نسخة أحتياطية للملف $1.',
 'backend-fail-notexists' => 'الملف $1 غير موجود.',
+'backend-fail-notsame' => 'يوجد بالفعل ملف غير متطابق في $1.',
+'backend-fail-invalidpath' => '$1 ليس مسارا صالحا للتخزين.',
+'backend-fail-delete' => 'لم يمكن حذف الملف $1.',
+'backend-fail-alreadyexists' => 'الملف $1 موجود بالفعل.',
+'backend-fail-store' => 'لا يمكن تخزين الملف $1 في $2 .',
 'backend-fail-copy' => 'لا يمكن نسخ الملف  $1  إلى  $2 .',
+'backend-fail-move' => 'تعذر نقل ملف $1 إلى $2 .',
 'backend-fail-opentemp' => 'تعذّر فتح ملف مؤقت.',
 'backend-fail-writetemp' => 'تعذّرت كتابة ملف مؤقت.',
 'backend-fail-closetemp' => 'تعذّر إغلاق ملف مؤقت.',
+'backend-fail-read' => 'لا يمكن قراءة الملف $1.',
+'backend-fail-create' => 'تعذر إنشاء الملف $1.',
+
+# Lock manager
+'lockmanager-notlocked' => 'تعذر فتح "$1"، الملف غير مغلق.',
+'lockmanager-fail-closelock' => 'تعذر إغلاق ملف التأمين "$1".',
+'lockmanager-fail-deletelock' => 'تعذر حذف ملف التأمين "$1".',
+'lockmanager-fail-acquirelock' => 'لا يمكن الحصول على تأمين لـ "$1".',
+'lockmanager-fail-openlock' => 'تعذر إغلاق ملف التأمين "$1".',
+'lockmanager-fail-releaselock' => 'تعذر تحرير التأمين لـ "$1"..',
+'lockmanager-fail-db-bucket' => 'تعذر الإتصال بعدد كافي من قواعد تأمين البيانات في الحزمة $1.',
+'lockmanager-fail-db-release' => 'تعذر تحرير الأقفال في  قاعدة البيانات $1.',
+'lockmanager-fail-svr-release' => 'تعذر تحرير الأقفال على الخادم $1.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'صودف خطأ أثناء فتح الملف لفحوصات ZIP.',
@@ -1996,6 +2020,7 @@ $1',
 'uploadstash-badtoken' => 'لم ينجح أداء ذلك العمل، ربما لأن وثائق تفويض التحرير الخاصة بك منتهية الصلاحية. حاول مرة أخرى.',
 'uploadstash-errclear' => 'لم تنجح عملية مسح الملفات.',
 'uploadstash-refresh' => 'تحديث قائمة الملفات',
+'invalid-chunk-offset' => 'قطعة أوفست غير صالحة',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'رفض الوصول',
@@ -2088,6 +2113,10 @@ $1',
 من فضلك انظر [$2 صفحة وصف الملف] لمزيد من المعلومات.',
 'sharedupload-desc-here' => 'هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.
 الوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.',
+'sharedupload-desc-edit' => 'هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.
+يمكن لك أن تعدل وصف الملف في [$2  صفحته] هناك.',
+'sharedupload-desc-create' => 'هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.
+يمكن لك أن تعدل وصف الملف في [$2  صفحته] هناك.',
 'filepage-nofile' => 'لا ملف موجود بهذا الاسم.',
 'filepage-nofile-link' => 'لا يوجد ملف بهذا الاسم، لكن يمكنك [$1 رفعه].',
 'uploadnewversion-linktext' => 'ارفع نسخة جديدة من هذا الملف',
@@ -2223,6 +2252,8 @@ $1',
 'wantedpages' => 'صفحات مطلوبة',
 'wantedpages-badtitle' => 'عنوان غير صحيح في مجموعة النتائج: $1',
 'wantedfiles' => 'ملفات مطلوبة',
+'wantedfiletext-cat' => 'الملفات التالية مستعملة ولكن لا وجود لها. يمكن سرد ملفات من مستودعات خارجية بالرغم من وجودها. سيتم <del>محو</del> أي أيجابيات كاذبة. بالإضافة، أي صفحات تتضمن الملفات الغير موجودة تم سردها في [[:$1]].',
+'wantedfiletext-nocat' => 'الملفات التالية مستعملة ولكن  غير متوفرة. يمكن سرد ملفات من مستودعات خارجية بالرغم من وجودها. سيتم <del>محو</del> أي أيجابيات كاذبة.',
 'wantedtemplates' => 'قوالب مطلوبة',
 'mostlinked' => 'أكثر الصفحات وصلا',
 'mostlinkedcategories' => 'أكثر التصنيفات ارتباطا',
@@ -2231,6 +2262,7 @@ $1',
 'mostimages' => 'أكثر الملفات ارتباطا',
 'mostrevisions' => 'أكثر الصفحات تعديلا',
 'prefixindex' => 'كل الصفحات بالبادئة',
+'prefixindex-namespace' => 'كل الصفحات مع بادئة ($1 مساحة الأسم)',
 'shortpages' => 'صفحات قصيرة',
 'longpages' => 'صفحات طويلة',
 'deadendpages' => 'صفحات نهاية مسدودة',
@@ -2300,6 +2332,7 @@ $1',
 'allpagesbadtitle' => 'العنوان المقترح للصفحة غير مقبول أو يضم لغات أخرى أو سابقة إنترويكي.
 يمكن أن يتضمن حروفا لا يمكن استعمالها للعناوين.',
 'allpages-bad-ns' => '{{SITENAME}} لا يوجد بها نطاق "$1".',
+'allpages-hide-redirects' => 'أخفِ التحويلات',
 
 # Special:Categories
 'categories' => 'تصنيفات',
@@ -2540,6 +2573,8 @@ $UNWATCHURL
 'protect-title' => 'ضبط مستوى الحماية ل"$1"',
 'protect-title-notallowed' => 'عرض مستوى الحماية ل "$1"',
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
+'protect-badnamespace-title' => 'مساحة إسم غير محمية',
+'protect-badnamespace-text' => 'لا يمكن حماية الصفحات الموجودة في مساحة الإسم',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2641,6 +2676,7 @@ $UNWATCHURL
 'undelete-cleanup-error' => 'خطأ حذف ملف أرشيف غير مستخدم "$1".',
 'undelete-missing-filearchive' => 'غير قادر على استرجاع ملف الأرشيف رقم $1 لأنه ليس في قاعدة البيانات.
 ربما يكون قد تم استرجاعه.',
+'undelete-error' => 'وقع خطأ عند إلغاء حذف الصفحة',
 'undelete-error-short' => 'خطأ استرجاع ملف: $1',
 'undelete-error-long' => 'حدثت أخطاء أثناء استرجاع الملف:
 
@@ -2961,6 +2997,7 @@ $1',
 'exportcuronly' => 'ضمن المراجعة الحالية فقط، وليس التاريخ الكامل',
 'exportnohistory' => "----
 ملاحظة:''' تصدير التاريخ الكامل للصفحات من خلال هذه الاستمارة تم تعطيله لأسباب تتعلق بالأداء'''",
+'exportlistauthors' => 'أضف قائمة كاملة بالمساهمين لكل صفحة',
 'export-submit' => 'صدر',
 'export-addcattext' => 'أضف صفحات من تصنيف:',
 'export-addcat' => 'أضف',
@@ -2993,6 +3030,8 @@ $1',
 'thumbnail_error' => 'خطأ في إنشاء صورة مصغرة: $1',
 'djvu_page_error' => 'صفحة DjVu خارج النطاق',
 'djvu_no_xml' => 'لا يمكن جلب XML لملف DjVu',
+'thumbnail-temp-create' => 'تعذر إنشاء ملف الصورة المصغرة المؤقت',
+'thumbnail-dest-create' => 'تعذر حفظ الصورة المصغرة للوجهة',
 'thumbnail_invalid_params' => 'محددات التصغير غير صحيحة',
 'thumbnail_dest_directory' => 'غير قادر على إنشاء المجلد الهدف',
 'thumbnail_image-type' => 'نوع الصورة غير مدعوم',
@@ -4002,6 +4041,7 @@ $5
 'version-software' => 'البرنامج المثبت',
 'version-software-product' => 'المنتج',
 'version-software-version' => 'النسخة',
+'version-entrypoints-header-url' => 'المسار',
 
 # Special:FilePath
 'filepath' => 'مسار ملف',
@@ -4186,4 +4226,15 @@ $5
 'api-error-uploaddisabled' => 'تم تعطيل تحميل على هذا الويكي.',
 'api-error-verification-error' => 'هذا الملف قد يكون معطوباً أو يحتوي على ملحق غير صحيح.',
 
+# Durations
+'duration-seconds' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}',
+'duration-minutes' => '{{PLURAL:$1|أقل من دقيقة|دقيقة واحدة|دقيقتان|$1 دقائق|$1 دقيقة}}',
+'duration-hours' => '({{PLURAL:$1||ساعة واحد|ساعتان|$1 ساعات|$1 ساعة}})',
+'duration-days' => '{{PLURAL:$1||يوم واحد|يومان|$1 أيام|$1 يومًا|$1 يوم}}',
+'duration-weeks' => '{{PLURAL:$1||أسبوع واحد|أسبوعان|$1 أسابيع|$1 أسبوعًا|$1 أسبوع}}',
+'duration-years' => '{{PLURAL: $1||سنة واحدة|سنتان|$1 سنين|$1 سنة}}',
+'duration-decades' => '{{PLURAL: $1||عقد واحد|عقدان|$1 عقود|$1 عقدًا|$1 عقد}}',
+'duration-centuries' => '{{PLURAL: $1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}',
+'duration-millennia' => '{{PLURAL: $1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}',
+
 );
index f0a812d..9cc3f86 100644 (file)
@@ -97,7 +97,7 @@ $magicWords = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'ܪܫÜ\98Ü¡ Ü£ÜªÜ\9bÜ\90 Ü¬Ü\9aÜ\9dܬ Ü\90Ü£Ü\98ܪÜ\90:',
+'tog-underline' => 'ܪܫܘܡ ܣܪܛܐ ܬܚܝܬ ܐܣܪܐ:',
 'tog-justify' => 'ܫܘܐ ܦܬܓܡ̈ܐ',
 'tog-hideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
 'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬ̈ܐ ܬܪ ܢܩܪܐ ܙܘܓܢܝܐ (ܣܢܝܩ ܠ JavaScript)',
@@ -459,16 +459,20 @@ $1',
 'loginreqlink' => 'ܥܘܠ',
 'accmailtitle' => 'ܡܠܬܐ ܕܥܠܠܐ ܫܕܪܬ',
 'newarticle' => '(ܚܕܬܐ)',
+'newarticletext' => "ܐܬܬ ܒܬܪ ܐܣܪܐ ܕܕܦܐ ܕܠܐ ܐܬܬܣܝܡ ܥܕܡܫ.
+ܠܣܘܝܡܐ ܕܕܦܐ ܗܢܐ, ܫܪܝ ܠܟܬܒܬܐ ܒܣܢܕܘܩܐ ܠܬܚܬ (ܚܙܝ [[{{MediaWiki:Helppage}}|ܕܦܐ ܕܥܘܕܪܢܐ]] ܠܐܚܪܢܐ ܝܕ̈ܥܬܐ).
+ܐܢ ܐܬܬ ܠܗܪܟܐ ܦܘܕܐܝܬ, ܕܘܫ ܠܦܪܡܝܬܐ ܕ '''ܠܒܣܬܪ back''' ܒܡܦܐܬܢܐ ܕܝܠܟ.",
 'updated' => '(ܐܬܚܕܬ)',
 'note' => "'''ܡܥܝܪܢܘܬܐ:'''",
 'previewnote' => "'''ܕܟܪ ܕܗܢܘ ܚܝܪܐ ܩܕܡܝܐ ܒܠܚܘܕ'''.
 ܫܘܚܠܦ̈ܐ ܕܝܠܟ ܠܐ ܐܬܠܒܟܘ ܥܕܡܐ ܠܗܫܐ!",
 'editing' => 'ܫܚܠܦܬܐ ܕ $1',
+'creating' => 'ܣܘܝܡܐ ܕ $1',
 'editingsection' => 'ܫܚܠܦܬܐ ܕ $1 (ܡܢܬܐ)',
 'editingcomment' => 'ܫܚܠܦܬܐ ܕ $1 (ܡܢܬܐ ܚܕܬܐ)',
 'yourtext' => 'ܟܬܒܬܐ ܕܝܠܟ',
-'editingold' => "'''Ü\99Ü\98Ü\97ܪÜ\90: Ü«Ü\9aܠܦ Ü\90ܢܬ Ü¬Ü¢Ü\9dܬÜ\90 Ü¥Ü¬Ü\9dܩܬÜ\90 Ü\95ܦÜ\90ܬÜ\90 Ü\97Ü\95ܐ.'''
\90Ü¢ Ü Ü\92Ü\9f Ü\90ܢܬ Ü¦Ü\90ܬÜ\90 Ü\97Ü\95Ü\90, Ü\9fÜ  Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü¥Ü\92Ü\95 Ü\92ܬܪ Ü\9fÜ¢ Ü\90ܬÜ\9bܠܩܬ.",
+'editingold' => "'''Ü\99Ü\98Ü\97ܪÜ\90: Ü«Ü\9aܠܦ Ü\90ܢܬ Ü¬Ü¢Ü\9dܬÜ\90 Ü¥Ü¬Ü\9dܩܬÜ\90 Ü\95Ü\95ܦÜ\90 Ü\97Ü¢ܐ.'''
\90Ü¢ Ü Ü\92Ü\9f Ü\90ܢܬ Ü\95ܦÜ\90 Ü\97Ü¢Ü\90, Ü\9fÜ  Ü«Ü\98Ì\88Ü\9aܠܦÜ\90 Ü\95Ü\90ܬܥÜ\92Ü\95Ü\98 Ü\92ܬܪ Ü\97Ü\95Ü\90 Ü¬Ü¢Ü\9dܬÜ\90 Ü¢Ü¬Ü\9bÜ Ü©Ü\98Ü¢.",
 'yourdiff' => 'ܦܪ̈ܝܫܘܝܬܐ',
 'templatesused' => '{{PLURAL:$1|ܩܠܒܐ|ܩܠܒ̈ܐ}} ܒܦܐܬܐ ܗܕܐ:',
 'template-protected' => '(ܢܛܝܪܐ)',
@@ -556,7 +560,6 @@ $1',
 
 # Diffs
 'history-title' => 'ܬܫܥܝܬܐ ܕܬܢܝܬܐ ܕ "$1"',
-'difference' => '(ܦܪܝܫܘܬܐ ܒܝܬ ܬܢܝܬ̈ܐ)',
 'lineno' => 'ܣܪܛܐ $1:',
 'compareselectedversions' => 'ܦܚܘܡ ܒܝܬ ܬܪܝܢ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ',
 'showhideselectedversions' => 'ܚܘܝ/ܛܫܝ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ',
@@ -776,8 +779,8 @@ $1',
 'recentchanges' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
 'recentchanges-legend' => 'ܓܒܝܬ̈ܐ ܕܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
 'recentchangestext' => 'ܥܩܒ ܫܘܚܠܦ̈ܐ ܚܕܬ ܡܢ ܟܠ ܕܘܝܩܝ ܒܦܐܬܐ ܗܕܐ.',
-'recentchanges-label-newpage' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\97Ü¢Ü\90 Ü\92ܪÜ\90 Ü¦Ü\90ܬܐ ܚܕܬܐ',
-'recentchanges-label-minor' => 'Ü\97Ü¢Ü\90 Ü\97Ü\98 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\99Ü¥Ü\98ܪÜ\90',
+'recentchanges-label-newpage' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\97Ü¢Ü\90 Ü\90ܬܬܣÜ\9dÜ¡ Ü\95ܦܐ ܚܕܬܐ',
+'recentchanges-label-minor' => 'ܗܢܘ ܫܘܚܠܦܐ ܙܥܘܪܐ',
 'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ',
 'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1',
 'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ',
index baf89de..1c2fda3 100644 (file)
@@ -377,7 +377,6 @@ Rulpakünuy feychi kangelkülelu dungu.",
 
 # Diffs
 'history-title' => 'Kuyfi malün "$1" mew',
-'difference' => '(Trürümün epu malün engu)',
 'lineno' => 'Wif $1:',
 'compareselectedversions' => 'Trürümün dullinngelu malün',
 'editundo' => 'wüñoeltun',
index a9e7150..4327dc6 100644 (file)
@@ -909,7 +909,6 @@ $1",
 
 # Diffs
 'history-title' => 'Ṫ-Ṫariĥ dyal lé-vérsyon dyal "$1"',
-'difference' => '(Ferq mabin lé-vérsyon)',
 'difference-multipage' => '(l-fṛq bin ṣ-ṣfaḫi)',
 'lineno' => 'Ṣter $1:',
 'compareselectedversions' => 'Qaren lé-versyon li meĝzolin',
index 5d97327..b145a56 100644 (file)
@@ -1171,7 +1171,6 @@ $1",
 
 # Diffs
 'history-title' => 'تاريخ تعديل "$1"',
-'difference' => '(الفرق بين النسخ)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
 'showhideselectedversions' => 'عرض/تخبية المراجعات المختاره.',
index 87825da..82856b7 100644 (file)
@@ -785,7 +785,8 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'userinvalidcssjstitle' => "'''সতৰ্কবাণী:'''  \"\$1\" নামৰ কোনো আৱৰণ নাই। Custom .css আৰু .js পৃষ্ঠাই সৰুফলাৰ শিৰোনামা ব্যৱহাৰ কৰে, যেনে-  {{ns:user}}:Foo/Vector.css ৰ সলনি {{ns:user}}:Foo/vector.css।",
 'updated' => "(আপডেট কৰা হ'ল)",
 'note' => "'''টোকা:'''",
-'previewnote' => "'''এয়া প্ৰাকদৰ্শনহে মাথোন। পৰিৱৰ্তনসমূহ এতিয়ও সংৰক্ষণ কৰা হোৱা নাই!'''",
+'previewnote' => "'''মনত ৰাখিব এয়া মাথোন প্ৰাক্‌দৰ্শনহে।'''
+আপোনাৰ সালসলনিসমূহ এতিয়াও সংৰক্ষণ কৰা হোৱা নাই!",
 'previewconflict' => 'এই প্ৰাকদৰ্শনে ওপৰৰ সম্পাদনা ক্ষেত্ৰৰ লেখা সাঁচি ৰাখিলে যেনেকুৱা দেখা যাব তেনেকুৱা দেখাইছে ।',
 'session_fail_preview' => "'''দুঃখিত! চেচন ডাটা হেৰাই যোৱাৰ কাৰণে আপোনাৰ সম্পাদনা কৃতকাৰ্য্য নহ'ল ।'''
 অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক ।
@@ -1031,8 +1032,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'নিবাৰণ ল’গ',
-'suppressionlogtext' => 'প্ৰশাসকৰ পৰা গোপনে ৰখা অৱলুপ্তি আৰু প্ৰতিবন্ধকৰ তালিকা তলত দিয়া হৈছে ।
-বৰ্তমান কাৰ্য্যৰত নিষেধ আৰু প্ৰতিবন্ধকসমূহৰ বাবে [[Special:BlockList|IP প্ৰতিবন্ধক তালিকা]] ।',
+'suppressionlogtext' => 'পà§\8dৰশাসà¦\95ৰ à¦ªà§°à¦¾ à¦\97à§\8bপনà§\87 à§°à¦\96া à¦¸à¦®à¦² à¦¸à¦®à§\8dপৰà§\8dà¦\95à§\80য় à¦\85ৱলà§\81পà§\8dতি à¦\86ৰà§\81 à¦ªà§\8dৰতিবনà§\8dধà¦\95ৰ à¦¤à¦¾à¦²à¦¿à¦\95া à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹à§\88à¦\9bà§\87 à¥¤
+বৰà§\8dতমান à¦\95াৰà§\8dযà§\8dযৰত à¦¨à¦¿à¦·à§\87ধ à¦\86ৰà§\81 à¦ªà§\8dৰতিবনà§\8dধà¦\95সমà§\82হৰ à¦¬à¦¾à¦¬à§\87 [[Special:BlockList|IP à¦ªà§\8dৰতিবনà§\8dধà¦\95 à¦¤à¦¾à¦²à¦¿à¦\95া]] à¦\9aাà¦\93à¦\95।',
 
 # History merging
 'mergehistory' => 'পৃষ্ঠাৰ ইতিহাসবোৰ মিলাই দিয়ক',
@@ -1067,7 +1068,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" ৰ সাল-সলনিৰ ইতিহাস',
-'difference' => 'বিভিন্ন সংস্কৰণৰ প্ৰভেদ',
 'difference-multipage' => '(পৃষ্ঠাসমূহৰ মাজত তফাৎ)',
 'lineno' => '$1 নং শাৰীঃ',
 'compareselectedversions' => 'নিৰ্বাচিত কৰা সংকলন সমূহৰ মাজত পাৰ্থক্য চাওক',
@@ -2429,8 +2429,8 @@ $1',
 'ipb-confirm' => 'প্ৰতিবন্ধক নিশ্চিত কৰক',
 'badipaddress' => 'অগ্ৰহণযোগ্য আই-পি ঠিকনা',
 'blockipsuccesssub' => "বাৰণ কৰা সফল হ'ল",
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]]ক বাধা দিয়া হৈছে ।<br />
-প্ৰতিবন্ধকৰ পুনৰ্বিবেচনাৰ বাবে [[Special:BlockList|IP প্ৰতিবন্ধক তালিকা]]',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]]ক বাধা দিয়া হৈছে।<br />
+প্ৰতিবন্ধকৰ পুনৰ্বিবেচনাৰ বাবে [[Special:BlockList|প্ৰতিবন্ধক তালিকা]] চাওক।',
 'ipb-blockingself' => 'আপুনি নিজকে বাধাপ্ৰদান কৰিব বিচাৰিছে ! আপুনি নিশ্চিতনে আপুনি এনে কৰিব ?',
 'ipb-confirmhideuser' => 'আপুনি "সদস্য গোপন কৰক" বৈশিষ্ট সক্ৰিয় থকা এজন সদস্যক বাৰণ কৰিবলৈ ওলাইছে । এই কাৰ্যই সকলো তালিকা আৰু ল\'গ ভৰ্তিৰ পৰা তেওঁৰ নাম আঁতৰাই পেলাব । এই কাম কৰিব বুলি আপুনি নিশ্চিতনে ?',
 'ipb-edit-dropdown' => 'প্ৰতিবন্ধকৰ কাৰণসমূহ সম্পাদনা কৰক',
@@ -2483,9 +2483,9 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 তথ্যসূত্ৰ হিছাপে নিবাৰণ ল’গ তলত দিয়া হ’ল ।',
 'blocklogentry' => '"[[$1]]" ক $2 $3 লৈ সাল-সলনি কৰাৰ পৰা বাৰণ কৰা হৈছে।',
 'reblock-logentry' => '[[$1]]ৰ প্ৰতিবন্ধক ছেটিং ম্যাদ উকলা সময় $2 $3ৰ সৈতে সলনি কৰা হ’ল ।',
-'blocklogtext' => 'এই ল’গখন অৱৰোধ কৰা আৰু অৱৰোধ আঁতৰ কৰা সদস্য সম্পৰ্কীয় 
-স্বয়ংক্ৰিয়ভাৱে প্ৰতিবন্ধক পোৱা আই.পি. ঠিকনাবোৰ ইয়াত তালিকাভুক্ত কৰা হোৱা নাই 
-সামà§\8dপà§\8dৰতিà¦\95 à¦\95াৰà§\8dযৰত à¦¨à¦¿à¦·à§\87ধ à¦\86ৰà§\81 à¦ªà§\8dৰতিবনà§\8dধà¦\95ৰ à¦¬à¦¾à¦¬à§\87 [[Special:BlockList|à¦\86à¦\87.পি. à¦ªà§\8dৰতিবনà§\8dধà¦\95 à¦¤à¦¾à¦²à¦¿à¦\95া]] à¦\9aাà¦\93à¦\95 ।',
+'blocklogtext' => 'এই ল’গখন অৱৰোধ কৰা আৰু অৱৰোধ আঁতৰ কৰা সদস্য সম্পৰ্কীয়।
+স্বয়ংক্ৰিয়ভাৱে প্ৰতিবন্ধক পোৱা আই.পি. ঠিকনাবোৰ ইয়াত তালিকাভুক্ত কৰা হোৱা নাই।
+সামà§\8dপà§\8dৰতিà¦\95 à¦\95াৰà§\8dযৰত à¦¨à¦¿à¦·à§\87ধ à¦\86ৰà§\81 à¦ªà§\8dৰতিবনà§\8dধà¦\95ৰ à¦¬à¦¾à¦¬à§\87 [[Special:BlockList|পà§\8dৰতিবনà§\8dধà¦\95 à¦¤à¦¾à¦²à¦¿à¦\95া]] à¦\9aাà¦\93à¦\95।',
 'unblocklogentry' => '$1 বাৰণ উঠাই লোৱা হ’ল',
 'block-log-flags-anononly' => 'কেৱল বেনামী সদস্য',
 'block-log-flags-nocreate' => 'একাউন্ট সৃষ্টি নিষ্ক্ৰিয় কৰা হৈছে',
index 71aa803..998632a 100644 (file)
@@ -449,6 +449,8 @@ El motivu conseñáu ye «''$2''».",
 'filereadonlyerror' => "Nun se pudo camudar el ficheru «$1» porque'l repositoriu de ficheros «$2» ta en mou de namái llectura.
 
 L'alministrador que lu bloquió dio esti motivu: «$3».",
+'invalidtitle-knownnamespace' => 'Títulu non válidu col espaciu de nomes «$2» y el testu «$3»',
+'invalidtitle-unknownnamespace' => "Titulu non válidu col númberu $1 d'espaciu de nomes desconocíu y el testu «$2»",
 
 # Virus scanner
 'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
@@ -464,8 +466,8 @@ Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvier
 Creóse la to cuenta.
 Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
 'yourname' => "Nome d'usuariu:",
-'yourpassword' => 'Conseña:',
-'yourpasswordagain' => 'Escribi otra vuelta la to conseña:',
+'yourpassword' => 'Clave:',
+'yourpasswordagain' => 'Escribi otra vuelta la clave:',
 'remembermypassword' => "Recordar la mio identificación nesti restolador (un máximu {{PLURAL:$1|d'un día|de $1 díes}})",
 'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificase",
 'yourdomainname' => 'El to dominiu:',
@@ -494,7 +496,7 @@ Por favor escueyi un nome diferente.",
 'nocookiesnew' => "La cuenta d'usuariu ta creada, pero nun tas identificáu.
 {{SITENAME}} usa «cookies» pa identificar a los usuarios.
 Tienes les «cookies» desactivaes.
-Por favor activales y depués entra col to nome d'usuariu y conseña nuevos.",
+Por favor activales y depués entra col to nome d'usuariu y clave nuevos.",
 'nocookieslogin' => '{{SITENAME}} usa «cookies» pa identificar a los usuarios.
 Tienes les «cookies» desactivaes.
 Por favor actívales y vuelvi intentalo.',
@@ -510,31 +512,31 @@ Mira que tea bien escritu o [[Special:UserLogin/signup|crea una cuenta nueva]]."
 Mira que tea bien escritu.',
 'nouserspecified' => "Has especificar un nome d'usuariu.",
 'login-userblocked' => 'Esti usuariu ta bloquiáu. Nun se permite la so identificación.',
-'wrongpassword' => 'La conseña escrita ye incorreuta.
+'wrongpassword' => 'La clave escrita ye incorreuta.
 Vuelvi intentalo.',
-'wrongpasswordempty' => 'La conseña taba en blanco.
+'wrongpasswordempty' => 'La clave taba en blanco.
 Vuelvi intentalo.',
-'passwordtooshort' => 'Les contraseñes han tener a lo menos {{PLURAL:$1|1 caráuter|$1 carauteres}}.',
-'password-name-match' => "La conseña ha ser distinta del nome d'usuariu.",
-'password-login-forbidden' => "Ta torgao usar esti nome d'usuariu y conseña.",
-'mailmypassword' => 'Unviar la conseña nueva per corréu',
-'passwordremindertitle' => 'Nueva conseña provisional pa {{SITENAME}}',
-'passwordremindertext' => "Daquién (seique tu, dende la direición IP $1) solicitó una conseña
-nueva pa {{SITENAME}} ($4). Creóse una conseña provisional pal usuariu
+'passwordtooshort' => 'Les claves han tener a lo menos {{PLURAL:$1|1 caráuter|$1 carauteres}}.',
+'password-name-match' => "La clave ha ser distinta del nome d'usuariu.",
+'password-login-forbidden' => "Ta torgao usar esti nome d'usuariu y clave.",
+'mailmypassword' => 'Unviar la clave nueva per corréu',
+'passwordremindertitle' => 'Clave nueva provisional pa {{SITENAME}}',
+'passwordremindertext' => "Daquién (seique tu, dende la direición IP $1) solicitó una clave
+nueva pa {{SITENAME}} ($4). Creóse una clave provisional pal usuariu
 «$2» que ye «$3». Si fuisti tu, necesites identificate y escoyer
-una conseña nueva agora. La conseña provisional caduca {{PLURAL:$5|nun día|en $5 díes}}.
+una clave nueva agora. La clave provisional caduca {{PLURAL:$5|nun día|en $5 díes}}.
 
-Si esta solicitú la fizo otra persona, o si recuerdes la conseña y
+Si esta solicitú la fizo otra persona, o si recuerdes la clave y
 nun quies volver camudala, pues escaecete d'esti mensaxe y siguir
-usando la conseña antigua.",
+usando la clave antigua.",
 'noemail' => "L'usuariu «$1» nun tien rexistrada nenguna direición de corréu.",
 'noemailcreate' => 'Has conseñar una direición de corréu válida',
-'passwordsent' => 'Univóse una conseña nueva a la direición de corréu rexistrada pa «$1».
+'passwordsent' => 'Univóse una clave nueva a la direición de corréu rexistrada pa «$1».
 Por favor vuelvi identificate depués de recibila.',
-'blocked-mailpassword' => 'Ta bloquiada la edición dende la to direición IP, polo que pa evitar abusos nun se pue usar la función de recuperación de conseña.',
+'blocked-mailpassword' => 'Ta bloquiada la edición dende la to direición IP, polo que pa evitar abusos nun se pue usar la función de recuperación de clave.',
 'eauthentsent' => "Unvióse un corréu electrónicu de confirmación a la direición indicada.
 Enantes de que s'unvie nengún otru corréu a la cuenta, has siguir les instrucciones del corréu electrónicu pa confirmar que la cuenta ye de to.",
-'throttled-mailpassword' => "Yá s'unvió un recordatoriu de la conseña {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.
+'throttled-mailpassword' => "Yá s'unvió un recordatoriu de la clave {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.
 Pa evitar abusos, namái s'unviará un recordatoriu cada {{PLURAL:$1|hora|$1 hores}}.",
 'mailerror' => 'Fallu al unviar el corréu: $1',
 'acct_creation_throttle_hit' => "Los visitantes d'esta wiki qu'usen la to direición IP yá crearon güei {{PLURAL:$1|1 cuenta|$1 cuentes}}, que ye'l máximu almitíu nesti periodu de tiempu.
@@ -551,8 +553,8 @@ Por favor conseña una direición con formatu afayadizu o dexa baleru'l campu.",
 'accountcreated' => 'Cuenta creada',
 'accountcreatedtext' => "Creóse la cuenta d'usuariu de $1.",
 'createaccount-title' => 'Creación de cuenta pa {{SITENAME}}',
-'createaccount-text' => 'Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», asociada a la conseña «$3».
-Habríes identificte y camudar la conseña agora.
+'createaccount-text' => 'Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», asociada a la clave «$3».
+Habríes identificte y camudar la clave agora.
 
 Pues escaecer esti mensaxe si esta cuenta se creó por error.',
 'usernamehasherror' => "El nome d'usuariu nun pue contener carauteres «hash»",
@@ -567,35 +569,35 @@ Por favor espera enantes d'intentalo otra vuelta.",
 'user-mail-no-addy' => 'Intentasti unviar un corréu electrónicu ensin direición.',
 
 # Change password dialog
-'resetpass' => 'Camudar la conseña',
-'resetpass_announce' => "Identificástite con una conseña provisional unviada per corréu electrónicu.
-P'acabar d'identificate, has conseñar equí una conseña nueva:",
+'resetpass' => 'Camudar la clave',
+'resetpass_announce' => "Identificástite con una clave provisional unviada per corréu electrónicu.
+P'acabar d'identificate, has conseñar equí una clave nueva:",
 'resetpass_text' => '<!-- Amestar testu equí -->',
-'resetpass_header' => 'Camudar la conseña de la cuenta',
-'oldpassword' => 'Conseña antigua:',
-'newpassword' => 'Conseña nueva:',
-'retypenew' => 'Escribi otra vuelta la conseña nueva:',
-'resetpass_submit' => 'Conseñar una conseña y identificase',
-'resetpass_success' => '¡Camudóse correutamente la to conseña!
+'resetpass_header' => 'Camudar la clave de la cuenta',
+'oldpassword' => 'Clave antigua:',
+'newpassword' => 'Clave nueva:',
+'retypenew' => 'Escribi otra vuelta la clave nueva:',
+'resetpass_submit' => 'Conseñar una clave y identificase',
+'resetpass_success' => '¡Camudóse correutamente la to clave!
 Pasando a identificate...',
 'resetpass_forbidden' => 'Les claves nun se puen camudar',
 'resetpass-no-info' => "Has tar identificáu p'acceder direutamente a esta páxina.",
-'resetpass-submit-loggedin' => 'Camudar la conseña',
+'resetpass-submit-loggedin' => 'Camudar la clave',
 'resetpass-submit-cancel' => 'Encaboxar',
-'resetpass-wrong-oldpass' => 'Conseña provisional o actual non válida.
-Seique yá camudaras correutamente la conseña o que pidieras una nueva conseña provisional.',
-'resetpass-temp-password' => 'Conseña provisional:',
+'resetpass-wrong-oldpass' => 'Clave provisional o actual non válida.
+Seique yá camudaras correutamente la clave o que pidieras una nueva clave provisional.',
+'resetpass-temp-password' => 'Clave provisional:',
 
 # Special:PasswordReset
-'passwordreset' => 'Reaniciar conseña',
+'passwordreset' => 'Reaniciar clave',
 'passwordreset-text' => 'Completa esti formulariu pa recibir un corréu electrónicu que te recuerde los detalles de la to cuenta.',
-'passwordreset-legend' => 'Reaniciar conseña',
-'passwordreset-disabled' => 'Los reanicios de conseña tán desactivaos nesta wiki.',
+'passwordreset-legend' => 'Reaniciar clave',
+'passwordreset-disabled' => 'Los reanicios de clave tán desactivaos nesta wiki.',
 'passwordreset-pretext' => "{{PLURAL:$1||Escribi ún de los elementos de los datos d'abaxo}}",
 'passwordreset-username' => "Nome d'usuariu:",
 'passwordreset-domain' => 'Dominiu:',
 'passwordreset-capture' => '¿Ver el corréu electrónicu resultante?',
-'passwordreset-capture-help' => "Si marques esta caxella, podrás ver el corréu (cola conseña provisional) amás d'unvialu al usuariu.",
+'passwordreset-capture-help' => "Si marques esta caxella, podrás ver el corréu (cola clave provisional) amás d'unvialu al usuariu.",
 'passwordreset-email' => 'Direición de corréu electrónicu:',
 'passwordreset-emailtitle' => 'Detalles de la cuenta en {{SITENAME}}',
 'passwordreset-emailtext-ip' => "Daquién (seique tu, dende la direición IP $1)solicitó un recordatoriu de los
@@ -605,22 +607,22 @@ a esta direición de corréu electrónicu:
 
 $2
 
-{{PLURAL:$3|Esta conseña provisional caduca|Estes conseñes provisionales caduquen}} {{PLURAL:$5|nún día|en $5 díes}}.
-Habríes identificate y escoyer una conseña nueva agora. Si esta solicitú la fizo otra persona,
-o si recordasti la conseña orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir
-usando la to conseña antigua.",
+{{PLURAL:$3|Esta clave provisional caduca|Estes claves provisionales caduquen}} {{PLURAL:$5|nún día|en $5 díes}}.
+Habríes identificate y escoyer una clave nueva agora. Si esta solicitú la fizo otra persona,
+o si recordasti la clave orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir
+usando la to clave antigua.",
 'passwordreset-emailtext-user' => "L'usuariu $1 de {{SITENAME}} solicitó un recordatoriu de los detalles de la to cuenta de {{SITENAME}} ($4).
 {{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}
 a esta direición de corréu electrónicu:
 
 $2
 
-{{PLURAL:$3|Esta conseña provisional caduca|Estes conseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.
-Habríes identificate y escoyer una conseña nueva agora. Si esta solicitú la fizo otra persona, o si
-recordasti la conseña orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir usando
-la to conseña antigua.",
+{{PLURAL:$3|Esta clave provisional caduca|Estes claves provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.
+Habríes identificate y escoyer una clave nueva agora. Si esta solicitú la fizo otra persona, o si
+recordasti la clave orixinal y yá nun quies camudala, pues escaecer esti mensaxe y siguir usando
+la to clave antigua.",
 'passwordreset-emailelement' => "Nome d'usuariu: $1
-Conseña provisional: $2",
+Clave provisional: $2",
 'passwordreset-emailsent' => 'Unvióse un corréu electrónicu de recordatoriu.',
 'passwordreset-emailsent-capture' => "Unvióse un corréu electrónicu de recordatoriu, que s'amuesa abaxo.",
 'passwordreset-emailerror-capture' => "Xeneróse un corréu electrónicu de recordatoriu, que s'amuesa abaxo, pero falló'l so unviu al usuariu: $1",
@@ -628,7 +630,7 @@ Conseña provisional: $2",
 # Special:ChangeEmail
 'changeemail' => 'Camudar la direición de corréu electrónicu',
 'changeemail-header' => 'Camudar la direición de corréu electrónicu de la cuenta',
-'changeemail-text' => 'Rellena esti formulariu pa camudar la to direición de corréu electrónicu. Habrás escribir la to conseña pa confirmar esti cambéu.',
+'changeemail-text' => 'Rellena esti formulariu pa camudar la to direición de corréu electrónicu. Habrás escribir la to clave pa confirmar esti cambéu.',
 'changeemail-no-info' => "Has tar identificáu p'acceder direutamente a esta páxina.",
 'changeemail-oldemail' => 'Direición de corréu electrónicu actual:',
 'changeemail-newemail' => 'Direición de corréu electrónicu nueva:',
@@ -719,10 +721,10 @@ Seique se treslladara o desaniciara mientres víes la páxina.',
 'loginreqtitle' => 'Necesítase identificación',
 'loginreqlink' => 'identificate',
 'loginreqpagetext' => 'Has $1 pa ver otres páxines.',
-'accmailtitle' => 'Conseña unviada.',
-'accmailtext' => "Unvióse a $2 una conseña xenerada al debalu pal usuariu [[User talk:$1|$1]].
+'accmailtitle' => 'Clave unviada.',
+'accmailtext' => "Unvióse a $2 una clave xenerada al debalu pal usuariu [[User talk:$1|$1]].
 
-La conseña d'esta cuenta nueva pue camudase na páxina ''[[Special:ChangePassword|camudar conseña]]'' depués d'identificate.",
+La clave d'esta cuenta nueva pue camudase na páxina ''[[Special:ChangePassword|camudar clave]]'' depués d'identificate.",
 'newarticle' => '(Nuevu)',
 'newarticletext' => "Siguisti un enllaz a un artículu qu'inda nun esiste.
 Pa crear la páxina, empecipia a escribir nel cuadru d'embaxo (mira la [[{{MediaWiki:Helppage}}|páxina d'ayuda]] pa más información).
@@ -859,6 +861,12 @@ Estos parámetros s'omitieron.",
 'parser-template-loop-warning' => 'Hai una rueda de plantíes: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Se pasó la llende de fondura recursiva de les plantíes ($1)',
 'language-converter-depth-warning' => 'Se pasó la llende de fondura del convertidor de llingües ($1)',
+'node-count-exceeded-category' => 'Páxines onde se pasó la cuenta de nodios',
+'node-count-exceeded-warning' => 'La páxina pasó la cuenta de nodios',
+'expansion-depth-exceeded-category' => "Páxines onde se pasó la fondura d'espansión",
+'expansion-depth-exceeded-warning' => "La páxina pasó la fondura d'espansión",
+'parser-unstrip-loop-warning' => 'Deteutóse un bucle "unstrip"',
+'parser-unstrip-recursion-limit' => 'Superóse\'l llímite de recursión d\'"unstrip" ($1)',
 
 # "Undo" feature
 'undo-success' => "La edición se pue esfacer.
@@ -1037,7 +1045,8 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi
 
 # Diffs
 'history-title' => 'Historial de revisiones de "$1"',
-'difference' => '(Diferencia ente revisiones)',
+'difference-title' => 'Diferencia ente revisiones de «$1»',
+'difference-title-multipage' => 'Diferencia ente les páxines «$1» y «$2»',
 'difference-multipage' => '(Diferencia ente páxines)',
 'lineno' => 'Llinia $1:',
 'compareselectedversions' => 'Comparar les revisiones seleicionaes',
@@ -1125,7 +1134,7 @@ Asegúrate de qu'esti cambéu caltenga la continuidá del históricu de la páxi
 'prefs-edits' => "Númberu d'ediciones:",
 'prefsnologin' => 'Non identificáu',
 'prefsnologintext' => 'Necesites tar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} identificáu]</span> pa camudar les preferencies d\'usuariu.',
-'changepassword' => 'Camudar la conseña',
+'changepassword' => 'Camudar la clave',
 'prefs-skin' => 'Apariencia',
 'skin-preview' => 'Vista previa',
 'datedefault' => 'Ensin preferencia',
@@ -1679,6 +1688,7 @@ Pa una meyor seguridá, img_auth.php ta desactiváu.",
 'http-curl-error' => 'Error al baxar la URL: $1',
 'http-host-unreachable' => 'Nun se pudo acceder a la URL.',
 'http-bad-status' => 'Hebo un problema demientres la llamada HTTP: $1 $2',
+'http-truncated-body' => 'El cuerpu solicitáu recibióse namái parcialmente.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Nun se pudo acceder a la URL',
index 6e7fd89..6086ae9 100644 (file)
@@ -801,7 +801,6 @@ Ta ropasusu warzafu bu yo va [[Special:Search|aneyara ko wiki]] yawal.',
 
 # Diffs
 'history-title' => 'Va "$1" betarizvot',
-'difference' => '(Siatosamidaceem)',
 'difference-multipage' => '(Amiduca wal batu bu isu banu)',
 'lineno' => 'Conya $1:',
 'compareselectedversions' => 'Dodisukera va toloy reban siatos',
index 8d7ad25..f80fd55 100644 (file)
@@ -681,6 +681,7 @@ Bloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:',
 'previewconflict' => 'Bu sınaq göstərişidir və yaddaşda saxlayacağınız təqdirdə mətnin redaktə səhifəsinin yuxarı hissəsində nəticənin necə olacağını göstərir.',
 'session_fail_preview' => "'''Üzr istəyirik! Sizin redaktəniz saxlanılmadı. Serverdə identifikasiyanızla bağlı problemlər yaranmışdır. Lütfən bir daha təkrar edin. Problem həll olunmazsa hesabınızdan çıxın və yenidən daxil olun.'''",
 'editing' => 'Redaktə $1',
+'creating' => 'Qurulur $1',
 'editingsection' => 'Redaktə $1 (bölmə)',
 'editingcomment' => 'Redaktə et $1 (yeni bölmə)',
 'editconflict' => 'Eyni vaxtda redaktə: $1',
@@ -870,7 +871,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" səhifəsinin tarixçəsi',
-'difference' => '(Versiyalar arasındakı fərq)',
 'difference-multipage' => '(Səhifələr arasında fərq)',
 'lineno' => 'Sətir $1:',
 'compareselectedversions' => 'Seçilən versiyaları müqayisə et',
@@ -1606,6 +1606,7 @@ Qeyd növü, istifadəçi adı və ya təsir edilmiş səhifəni seçməklə dah
 'allpagesnext' => 'Sonrakı',
 'allpagessubmit' => 'Seç',
 'allpagesprefix' => 'Bu prefiksli səhifələri göstər:',
+'allpages-hide-redirects' => 'Yönləndirmələri gizlət',
 
 # Special:Categories
 'categories' => 'Kateqoriyalar',
@@ -2888,6 +2889,7 @@ Variants for Chinese language
 'version-poweredby-others' => 'digərləri',
 'version-software-product' => 'Məhsul',
 'version-software-version' => 'Versiya',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Fayl yolu',
@@ -2995,4 +2997,15 @@ Bu saytda texniki problemlər var.',
 'api-error-unknownerror' => 'Naməlum xəta: "$1".',
 'api-error-uploaddisabled' => 'Bu vikidə fayl yükləmə mümkün deyil.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|saniyə|saniyə}}',
+'duration-minutes' => '$1 {{PLURAL:$1|dəqiqə|dəqiqə}}',
+'duration-hours' => '$1 {{PLURAL:$1|saat|saat}}',
+'duration-days' => '$1 {{PLURAL:$1|gün|gün}}',
+'duration-weeks' => '$1 {{PLURAL:$1|həftə|həftə}}',
+'duration-years' => '$1 {{PLURAL:$1|il|il}}',
+'duration-decades' => '$1 {{PLURAL:$1|onillik|onillik}}',
+'duration-centuries' => '$1 {{PLURAL:$1|əsr|əsr}}',
+'duration-millennia' => '$1 {{PLURAL:$1|minillik|minillik}}',
+
 );
index 51a904b..4b99826 100644 (file)
@@ -13,6 +13,7 @@
  * @author Kaganer
  * @author Reedy
  * @author Roustammr
+ * @author Sagan
  * @author Timming
  * @author Рустам Нурыев
  * @author ҒатаУлла
@@ -304,6 +305,7 @@ $1',
 'versionrequiredtext' => 'Был бит менән эшләү өсөн MediaWiki-ның $1 версияһы кәрәк. [[Special:Version|Ҡулланылған версия тураһында мәғлүмәт битен]] ҡара.',
 
 'ok' => 'Тамам',
+'pagetitle' => '{{SITENAME}} проектынан',
 'retrievedfrom' => 'Сығанағы — «$1»',
 'youhavenewmessages' => 'Яңы $1 бар ($2).',
 'newmessageslink' => 'яңы хәбәр',
@@ -711,6 +713,7 @@ $2
 'note' => "'''Иҫкәрмә:'''",
 'previewnote' => "'''Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!'''
 Һеҙҙең үҙгәртеүҙәр әле яҙылмаған!",
+'continue-editing' => 'Мөхәррирләүҙе дауам итергә',
 'previewconflict' => 'Әлеге алдан ҡарау, мөхәррирләү тәҙрәһенең өҫтөндә, һаҡланғандан һуң текстың нисек күренәсәген күрһәтә.',
 'session_fail_preview' => "'''Ҡыҙғанысҡа ҡаршы, һеҙҙең ултырыш идентификаторығыҙ юғалды. Һөҙөмтәлә үҙгәртеүҙәрегеҙ ҡабул ителмәйәсәк.
 Зинһар, тағы бер тапҡыр ҡабатлағыҙ.
@@ -789,6 +792,7 @@ $2
 'edit-no-change' => 'Текста үҙгәртеүҙер булмау сәбәпле үҙгәртеүегеҙгә иғтибар ителмәне.',
 'edit-already-exists' => 'Яңы бит яһап булмай.
 Ул былай ҙа бар.',
+'defaultmessagetext' => 'Алдан билдәләнгән яҙма',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Иғтибар:''' был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.
@@ -980,7 +984,6 @@ $1",
 
 # Diffs
 'history-title' => '$1 битенең үҙгәртеү тарихы',
-'difference' => '(Өлгөләр араһында айырма)',
 'difference-multipage' => '(Биттәр араһындағы айырма)',
 'lineno' => '$1 юл:',
 'compareselectedversions' => 'Һайланған версияларҙы сағыштырыу',
@@ -1545,6 +1548,10 @@ $1',
 'backend-fail-internal' => '$1 һаҡлағысында билдәһеҙ хата килеп сыҡты',
 'backend-fail-contenttype' => 'Файлды $1 адресына һаҡлар өсөн уның эстәлеге төрөн билдәләп булманы.',
 
+# File journal errors
+'filejournal-fail-dbconnect' => '"$1" мәғлүмәт базаһы журналына тоташып булманы.',
+'filejournal-fail-dbquery' => '«$1» мәғлүмәт базаһын һаҡлағын журналды яңыртып булманы.',
+
 # Lock manager
 'lockmanager-notlocked' => '" $1 " асҡысының биген сисеп булмай; ул бикле түгел.',
 'lockmanager-fail-closelock' => '"$1" асҡысының бикләү файлын ябып булманы.',
@@ -1877,6 +1884,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} проектында "$1" исемдәр арауығы юҡ.',
 'allpages-hide-redirects' => 'Йүнәлтеүҙәрҙе йәшерергә',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Һуңғы версияны ҡарарға',
+
 # Special:Categories
 'categories' => 'Категориялар',
 'categoriespagetext' => 'Түбәндәге {{PLURAL:$1|категорияла|категорияларҙа}} биттәр йәки файлдар бар.
@@ -2319,7 +2329,7 @@ $1',
 'badipaddress' => 'IP адрес дөрөҫ түгел',
 'blockipsuccesssub' => 'Бикләү уңышлы башҡарылды',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] бикләнде.<br />
-[[Special:BlockList|Бикләнгән IP адрестарҙы]] ҡарарға.',
+Биктәрҙе күреү өсөн [[Special:BlockList|бикләнгән IP адрестарҙы]] ҡарағыҙ.',
 'ipb-blockingself' => 'Һеҙ үҙегеҙҙе бикләргә теләйһегеҙ! Быны эшләүҙе раҫлайһығыҙмы?',
 'ipb-confirmhideuser' => '"Ҡулланыусыны йәшер" ғәмәлдә саҡта ҡулланыусыны блокларға теләйһегеҙ. Уның исеме исемлектәрҙә һәм журналдарҙа күренмәйәсәк. Быны эшләргә теләүегеҙҙе раҫлайһығыҙмы?',
 'ipb-edit-dropdown' => 'Бикләү сәбәптәрен мөхәррирләргә',
@@ -2372,8 +2382,8 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 Түбәндә белешмә өсөн йәшереү яҙмалары журналы килтерелгән:',
 'blocklogentry' => '[[$1]] бикләгән, тамамланыу ваҡыты: $2 $3',
 'reblock-logentry' => '[[$1]] ҡатнашыусыһының бикләү көйләүҙәрен үҙгәрткән, тамамланыу ваҡыты — $2 $3',
-'blocklogtext' => 'Ҡатнашыусыларҙы бикләү һәм бикте алыу яҙмалары журналы.
-Авто бикләнеүсе IP адрестар бында күрһәтелмәй.
+'blocklogtext' => 'Ҡатнашыусыларҙы бикләү һәм бикте алыу журналы.
+Автоматик бикләнгән IP адрестар бында күрһәтелмәй.
 [[Special:BlockList|Ғәмәлдәге тыйыуҙырҙы һәм бикләүҙәрҙе]] ҡарай алаһығыҙ.',
 'unblocklogentry' => '$1 ҡулланыусыһының блокланыу ваҡыты тамамланды',
 'block-log-flags-anononly' => 'танылмаған ҡатнашыусылар ғына',
@@ -2620,6 +2630,8 @@ $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
 'import-invalid-interwiki' => 'Күрһәтелгән вики проекттан тейәү мөмкин түгел.',
 'import-error-edit' => '«$1» битен импортлап булманы, сөнки һеҙгә ул битте мөхәррирләү тыйылған.',
 'import-error-create' => '«$1» битен импортлап булманы, сөнки һеҙгә ул битте яһау тыйылған.',
+'import-error-interwiki' => '«$1» бите импортҡа сығарылманы, сөнки уның исеме тышҡы һылианма  (интервики)өсөн резервланған.',
+'import-error-special' => ' «$1» бите импортҡа сығарылманы, сөнки ул биттәр яһау мөмкин булмаған исемдәр арауығына ҡарай.',
 'import-error-invalid' => '"$1" бите яраҡһыҙ исеме өсөн импортланманы.',
 
 # Import log
@@ -2638,7 +2650,9 @@ JavaScript тикшереү',
 'javascripttest-pagetext-noframework' => 'Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.',
 'javascripttest-pagetext-unknownframework' => 'Билдәһеҙ тикшеренеүҙәр мөхитнамәһе "$1".',
 'javascripttest-pagetext-frameworks' => 'Зинһар өсөн киләһе тикшеренеүҙәр мөхитнамәһенең береһен һайлап алығыҙ: $1',
+'javascripttest-pagetext-skins' => 'Һынауҙы башлау өсөн тышса һыйлағыҙ.',
 'javascripttest-qunit-intro' => 'mediawiki.org адресы буйынса ҡарағыҙ [$1 тест үткәреү документацияһы].',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit өсөн һынауҙар йыйлмаһы.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Ҡулланыусы битегеҙ',
@@ -2701,6 +2715,7 @@ JavaScript тикшереү',
 'tooltip-diff' => 'Сығанаҡ текстҡа ҡарата эшләгән үҙгәртеүҙәрҙе күрһәтергә.',
 'tooltip-compareselectedversions' => 'Был биттең һайланған ике өлгөһө араһындағы айырманы ҡарарға',
 'tooltip-watch' => 'Битте күҙәтеү исемлегемә өҫтәргә',
+'tooltip-watchlistedit-normal-submit' => 'Биттәрҙе юйырға',
 'tooltip-watchlistedit-raw-submit' => 'Күҙәтеү исемлеген яңыртырға',
 'tooltip-recreate' => 'Битте юйылған булыуына ҡарамаҫтан тергеҙергә',
 'tooltip-upload' => 'Күсерә башларға',
@@ -3441,6 +3456,9 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'version-software' => 'Ҡуйылған программалар',
 'version-software-product' => 'Продукт',
 'version-software-version' => 'Өлгөһө',
+'version-entrypoints' => 'Инеш өсөн URL адрестар',
+'version-entrypoints-header-entrypoint' => 'Инеш урыны',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Файлға юл',
@@ -3593,23 +3611,52 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'feedback-bugnew' => 'Тикшерҙем. Яңы хата тураһында белдерергә',
 
 # API errors
+'api-error-badaccess-groups' => 'Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй',
+'api-error-badtoken' => 'Эске хата: дөрөҫ булмаған токен',
+'api-error-copyuploaddisabled' => 'Был серверҙа URL адрес буйынса йөкләү өҙөлгән',
+'api-error-duplicate' => 'Бындай эстәлекле {{PLURAL:$1|[$2 файл]}}  бар.',
+'api-error-duplicate-archive' => 'Сайтта бындай эстәлекле {{PLURAL:$1|[$2 башҡа файл]}} бар ине инде, ләкин {{PLURAL:$1|ул юйылды|улар юйылды}}',
+'api-error-duplicate-archive-popup-title' => 'Элек юйылған {{PLURAL:$1|файлдың|файлдарҙың}} дубликаты',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|файлы|файлдары}} дубликаты.',
 'api-error-empty-file' => 'Һеҙ ебәргән файл буш.',
 'api-error-emptypage' => 'Яңы буш биттәр яһау тыйыла.',
+'api-error-fetchfileerror' => 'Эске хата: файлды күсергән ваҡытта хата китте',
 'api-error-file-too-large' => 'Һеҙ ебәргән файл үтә ҙур.',
 'api-error-filename-tooshort' => 'Файл исеме бик ҡыҫҡа.',
 'api-error-filetype-banned' => 'Был файл төрө тыйылған.',
+'api-error-filetype-missing' => 'Был файлдың ҡушымтаһы юҡ',
+'api-error-hookaborted' => 'Һеҙ эшләргә теләгән үҙгәртеүҙәр ҡушымтаны тикшереүсе тарафынан өҙөлдө',
 'api-error-http' => 'Эске хата: серверға бәйләнеп булмай.',
 'api-error-illegal-filename' => 'Рөхсәт ителмәгән файл исеме.',
+'api-error-internal-error' => 'Эске хата: һеҙ викиға йөкләгәнде тикшергән ваҡытта хата китте',
+'api-error-invalid-file-key' => 'Эске хата: ваҡытлыса һаҡлағыста файл табылманы',
+'api-error-missingparam' => 'Эске хата: мөрәжәғеттең параматрҙары юҡ.',
+'api-error-missingresult' => 'Эске хата: күсереү уңышлы булыуын билдәләп булманы.',
 'api-error-mustbeloggedin' => 'Файлдарҙы йөкмәтеү өсөн һеҙ сисемаға танышырға тейешһегеҙ.',
+'api-error-mustbeposted' => 'Эске хата: мөрәжәғәт HTTP POST адресын талап итә.',
+'api-error-noimageinfo' => 'Йөкләү уңышлы тамамланды, әммә сервер файл тураһында бер ниндәйҙә мәғлүмәт бирмәне.',
 'api-error-nomodule' => 'Эске хата: тейәү модуле көйләнмәгән.',
 'api-error-ok-but-empty' => 'Эске хата: серверҙан яуап юҡ.',
 'api-error-overwrite' => 'Булған файлды алыштырыу рөхсәт ителмәй.',
+'api-error-stashfailed' => 'Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.',
 'api-error-timeout' => 'Көтөлгән ваҡыт эсендә сервер яуып бирмәне.',
 'api-error-unclassified' => 'Билдәһеҙ хата барлыҡҡа килде.',
 'api-error-unknown-code' => 'Билдәһеҙ хата: «$1»',
+'api-error-unknown-error' => 'Эске хата: файлды йөкләгәндә ниндәйҙер хата китте.',
 'api-error-unknown-warning' => 'Билдәһеҙ белдереү: "$1".',
 'api-error-unknownerror' => 'Билдәһеҙ хата: «$1»',
 'api-error-uploaddisabled' => 'Был викила файл тейәү мөмкинлеге ябылған.',
+'api-error-verification-error' => 'Был файл боҙолған, йәки дөрөҫ булмаған ҡушымтаһы бар.',
+
+# Durations
+'duration-seconds' => 'секунд',
+'duration-minutes' => 'минут',
+'duration-hours' => 'сәғәт',
+'duration-days' => 'көн',
+'duration-weeks' => 'аҙна',
+'duration-years' => 'йыл',
+'duration-decades' => 'декада',
+'duration-centuries' => 'быуат',
+'duration-millennia' => 'меңйыллыҡ',
 
 );
index 1675516..686251c 100644 (file)
@@ -649,7 +649,6 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 
 # Diffs
 'history-title' => 'Versiónsgschicht voh „$1“',
-'difference' => '(Unterschiad zwischen dé Versiónen)',
 'lineno' => 'Zeiln $1:',
 'compareselectedversions' => 'Gwöde Versionen vagleichen',
 'editundo' => 'ryckgängig',
index 677d6fc..bbf9b2b 100644 (file)
@@ -10,6 +10,7 @@
  * @author Huji
  * @author Kaganer
  * @author Mostafadaneshvar
+ * @author Reedy
  * @author ZxxZxxZ
  */
 
@@ -737,7 +738,7 @@ $2',
 اگر شما ایء ذخیره کتت، هر تغییری که دهگ بیتء چه ای بازبینی گار بنت.'''",
 'yourdiff' => 'تفاوتان',
 'copyrightwarning' => "لطفا توجه بیت که کل نوشته یات ته {{SITENAME}}  تحت $2 نشر بنت.(بچار په جزیات$1).
-اگه شما لوٹیت شمی نوشتانک اصلاح و دگه چهاپ مبنت، اچه آیانا ادان مهلیت.<b/>
+اگه شما لوٹیت شمی نوشتانک اصلاح و دگه چهاپ مبنت، اچه آیانا ادان مهلیت.
 شما ما را قول دهیت که وتی چیزا بنویسیت یا چه یک دامین عمومی کپی کتگیت.
 ''' نوشتانکی که کپی رایت دارند بی اجازه ادا هور مکنیت'''",
 'copyrightwarning2' => "لطفا توجه کنیت که کل مشارکاتن ته {{SITENAME}} شاید اصلاح, عوض و یا توسط دگه شرکت کننده آن حذف بنت.
@@ -936,7 +937,6 @@ $1",
 
 # Diffs
 'history-title' => 'تاریح بازبینی "$1"',
-'difference' => '(تفاوتان بین نسخه یان)',
 'lineno' => 'خط$1:',
 'compareselectedversions' => 'مقایسه انتخاب بوتگین نسخه یان',
 'showhideselectedversions' => 'نمایش/پنهان کتن نسخ انتخابی',
index be2f3b0..f760a9a 100644 (file)
@@ -736,7 +736,6 @@ An ibang mga administrador sa ining wiki pwede pang maghiling kan mga nakatagong
 
 # Diffs
 'history-title' => 'Uusipón nin pagpakarháy kan "$1"',
-'difference' => '(Kaibhán kan mga pagpakarháy)',
 'lineno' => 'Taytáy $1:',
 'compareselectedversions' => 'Ikomparar an mga piniling bersyon',
 'editundo' => 'isulít',
index 0e529ae..ecfff6f 100644 (file)
@@ -999,7 +999,6 @@ $1",
 
 # Diffs
 'history-title' => 'Гісторыя версій "$1"',
-'difference' => '(Розніца між версіямі)',
 'difference-multipage' => '(Розніца паміж старонкамі)',
 'lineno' => 'Радок $1:',
 'compareselectedversions' => 'Параўнаць азначаныя версіі',
index 11c12de..7b4661d 100644 (file)
@@ -642,6 +642,8 @@ $2',
 'filereadonlyerror' => 'Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня
 
 Адміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».',
+'invalidtitle-knownnamespace' => 'Няслушная назва ў прасторы «$2»: «$3»',
+'invalidtitle-unknownnamespace' => 'Няслушная назва ў невядомай прасторы $1: «$2»',
 
 # Virus scanner
 'virus-badscanner' => "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
@@ -927,6 +929,7 @@ $2
 'note' => "'''Заўвага: '''",
 'previewnote' => "'''Гэта толькі папярэдні прагляд.'''
 Вашыя зьмены яшчэ не былі захаваныя!",
+'continue-editing' => 'Працягнуць рэдагаваньне',
 'previewconflict' => 'Гэта папярэдні прагляд тэксту зь верхняга вакна рэдагаваньня, так ён будзе выглядаць, калі Вы вырашыце яго захаваць.',
 'session_fail_preview' => "'''Не атрымалася захаваць Вашую праўку праз тое, што былі страчаныя зьвесткі пра сэсію.
 Калі ласка, паспрабуйце яшчэ раз. Калі памылка ня зьнікне, паспрабуйце [[Special:UserLogout|выйсьці з сыстэмы]] і ўвайсьці ізноў.'''",
@@ -1022,6 +1025,10 @@ $2
 'parser-template-loop-warning' => 'Выяўлены цыкль у шаблёнах: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Перавышана мяжа глыбіні рэкурсіі шаблёнаў ($1)',
 'language-converter-depth-warning' => 'Перавышанае абмежаваньне глыбіні канвэртару варыянтаў мовы ($1)',
+'node-count-exceeded-category' => 'Старонкі зь перавышанай колькасьцю вузлоў',
+'node-count-exceeded-warning' => 'Старонка перавысіла дазволеную колькасьць вузлоў',
+'expansion-depth-exceeded-category' => 'Старонкі зь перавышанай глыбінёй уключэньня',
+'expansion-depth-exceeded-warning' => 'Старонка перавысіла дазволеную глыбіню ўключэньняў',
 
 # "Undo" feature
 'undo-success' => 'Рэдагаваньне можа быць адмененае. Калі ласка, параўнайце адрозьненьні паміж вэрсіямі, каб упэўніцца, што гэта адпаведныя зьмены, а потым запішыце зьмены для сканчэньня рэдагаваньня.',
@@ -1199,7 +1206,8 @@ $1",
 
 # Diffs
 'history-title' => 'Гісторыя зьменаў старонкі «$1»',
-'difference' => '(Адрозьненьні паміж вэрсіямі)',
+'difference-title' => 'Розьніца паміж вэрсіямі «$1»',
+'difference-title-multipage' => 'Розьніца паміж старонкамі «$1» і «$2»',
 'difference-multipage' => '(Розьніца паміж старонкамі)',
 'lineno' => 'Радок $1:',
 'compareselectedversions' => 'Параўнаць выбраныя вэрсіі',
@@ -1821,6 +1829,7 @@ $1',
 'http-curl-error' => 'Памылка выбаркі URL-адрасу: $1',
 'http-host-unreachable' => 'Немагчыма дасягнуць URL-адрас',
 'http-bad-status' => 'Адбылася памылка пад час выкананьня HTTP-запыту: $1 $2',
+'http-truncated-body' => 'Цела запыту было атрымана часткова.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Немагчыма дасягнуць URL-адрас',
@@ -2546,8 +2555,8 @@ $1',
 'ipb-confirm' => 'Пацьвердзіць блякаваньне',
 'badipaddress' => 'Некарэктны IP-адрас',
 'blockipsuccesssub' => 'Блякаваньне пасьпяховае',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] {{GENDER:$1|быў заблякаваны|была заблякаваная}}.
-<br />Глядзіце [[Special:BlockList|сьпіс заблякаваных IP-адрасоў]] дзеля перагляду блякаваньняў.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] {{GENDER:$1|быў заблякаваны|была заблякаваная}}.<br />
+Глядзіце [[Special:BlockList|сьпіс блякаваньняў]] дзеля іх перагляду.',
 'ipb-blockingself' => 'Вы зьбіраецеся заблякаваць самога сябе! Вы ўпэўнены, што жадаеце гэта зрабіць?',
 'ipb-confirmhideuser' => 'Вы зьбіраецеся заблякаваць удзельніка са статусам «схаваны». Гэтае дзеяньне прывядзе да таго, што яго імя зьявіцца ва ўсіх сьпісах і журналах уваходу. Вы ўпэўнены, што жадаеце гэта зрабіць?',
 'ipb-edit-dropdown' => 'Рэдагаваць прычыны блякіровак',
@@ -2597,7 +2606,9 @@ $1',
 'blocklog-showsuppresslog' => 'Гэты ўдзельнік ужо заблякаваны і схаваны. Журнал хаваньняў пададзены ніжэй:',
 'blocklogentry' => 'заблякаваны [[$1]] на тэрмін: $2 $3',
 'reblock-logentry' => 'зьмененыя парамэтры блякаваньня для [[$1]] на тэрмін: з $2 да $3',
-'blocklogtext' => 'Гэта журнал уліку блякаваньняў і разблякаваньняў удзельнікаў. Аўтаматычна заблякаваныя IP-адрасы не пазначаныя. Глядзіце [[Special:BlockList|сьпіс заблякаваных IP-адрасоў]], каб пабачыць дзейныя ў гэты момант блякаваньні.',
+'blocklogtext' => 'Гэта журнал уліку блякаваньняў і разблякаваньняў удзельнікаў.
+Аўтаматычна заблякаваныя IP-адрасы не пазначаныя.
+Глядзіце [[Special:BlockList|сьпіс блякаваньняў]], каб пабачыць дзейныя ў гэты момант блякаваньні.',
 'unblocklogentry' => 'разблякаваны $1',
 'block-log-flags-anononly' => 'толькі ананімныя ўдзельнікі',
 'block-log-flags-nocreate' => 'стварэньне рахункаў забароненае',
@@ -3676,6 +3687,9 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'version-software' => 'Усталяванае праграмнае забесьпячэньне',
 'version-software-product' => 'Прадукт',
 'version-software-version' => 'Вэрсія',
+'version-entrypoints' => 'Уваходныя адрасы',
+'version-entrypoints-header-entrypoint' => 'Пункт уваходу',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Шлях да файла',
index d9fb268..f1c7561 100644 (file)
@@ -908,6 +908,7 @@ $2
 'updated' => '(обновена)',
 'note' => "'''Забележка:'''",
 'previewnote' => "'''Това е само предварителен преглед. Промените все още не са съхранени!'''",
+'continue-editing' => 'Продължаване на редактирането',
 'previewconflict' => 'Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.',
 'session_fail_preview' => "'''За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия. Опитайте отново. Ако все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново.'''",
 'session_fail_preview_html' => "'''За съжаление редакцията ви не беше записана поради изтичането на сесията ви.'''
@@ -918,6 +919,7 @@ $2
 'token_suffix_mismatch' => "'''Редакцията ви беше отхвърлена, защото браузърът ви е развалил пунктуационните знаци в редакционната отметка. Евентуалното съхранение би унищожило съдържанието на страницата. Понякога това се случва при използването на грешно работещи анонимни междинни сървъри.'''",
 'edit_form_incomplete' => "'''Някои части от формуляра за редактиране не достигнаха до сървъра; проверете дали редакциите ви са непокътнати и опитайте отново.'''",
 'editing' => 'Редактиране на „$1“',
+'creating' => 'Създаване на $1',
 'editingsection' => 'Редактиране на „$1“ (раздел)',
 'editingcomment' => 'Редактиране на „$1“ (нов раздел)',
 'editconflict' => 'Различна редакция: $1',
@@ -1173,7 +1175,6 @@ $1",
 
 # Diffs
 'history-title' => 'Преглед на историята на „$1“',
-'difference' => '(Разлики между версиите)',
 'difference-multipage' => '(Разлики между страниците)',
 'lineno' => 'Ред $1:',
 'compareselectedversions' => 'Сравнение на избраните версии',
@@ -2014,6 +2015,7 @@ $1',
 'allpagesprefix' => 'Показване на страници, започващи със:',
 'allpagesbadtitle' => 'Зададеното име е невалидно. Възможно е да съдържа междуезикова или междупроектна представка или пък знаци, които не могат да се използват в заглавия.',
 'allpages-bad-ns' => 'В {{SITENAME}} не съществува именно пространство „$1“.',
+'allpages-hide-redirects' => 'Скриване на пренасочванията',
 
 # Special:Categories
 'categories' => 'Категории',
@@ -2337,6 +2339,7 @@ $UNWATCHURL
 'undelete-bad-store-key' => 'Не е възможно възстановяването на файловата версия с времеви отпечатък $1: файлът е липсвал преди изтриването.',
 'undelete-cleanup-error' => 'Грешка при изтриване на неизползвания архивен файл „$1“.',
 'undelete-missing-filearchive' => 'Не е възможно възстановяването на файла с ID $1, защото не присъства в базата от данни. Вероятно вече е възстановен.',
+'undelete-error' => 'Грешка при възстановяване на страницата',
 'undelete-error-short' => 'Грешка при възстановяването на изтрития файл: $1',
 'undelete-error-long' => 'Възникнаха грешки при възстановяването на изтрития файл:
 
@@ -3085,9 +3088,11 @@ $1',
 'exif-serialnumber' => 'Сериен номер на фотоапарата',
 'exif-cameraownername' => 'Собственик на фотоапарата',
 'exif-label' => 'Етикет',
+'exif-datetimemetadata' => 'Дата на последна модификация на метаданните',
 'exif-nickname' => 'Неформално име на изображението',
 'exif-rating' => 'Рейтинг (от 5)',
 'exif-rightscertificate' => 'Сертификат за управление на правата',
+'exif-copyrighted' => 'Авторскоправен статут',
 'exif-copyrightowner' => 'Носител на авторското право',
 'exif-usageterms' => 'Условия за използване',
 'exif-originaldocumentid' => 'Уникален номер на оригиналния документ',
@@ -3591,9 +3596,15 @@ MediaWiki се разпространява с надеждата, че ще б
 'logentry-delete-restore' => '$1 възстанови страницата $3',
 'logentry-suppress-revision' => '$1 тайно промени видимостта на {{PLURAL:$5|една версия|$5 версии}} на страницата $3: $4',
 'logentry-suppress-revision-legacy' => '$1 тайно промени видимостта на версиите на страница $3',
+'revdelete-content-hid' => 'скрито съдържание',
+'revdelete-summary-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-patrol-patrol' => '$1 отбеляза като патрулирана версия $4 на страницата „$3“',
 'logentry-patrol-patrol-auto' => '$1 автоматично отбеляза като патрулирана версия $4 на страницата $3',
 'logentry-newusers-newusers' => '$1 създаде потребителска сметка',
@@ -3652,4 +3663,15 @@ MediaWiki се разпространява с надеждата, че ще б
 'api-error-uploaddisabled' => 'Достъпът за качване на файлове в това уики е прекратен.',
 'api-error-verification-error' => 'Файлът може би е повреден или има грешно разширение.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|секунда|секунди}}',
+'duration-minutes' => '$1 {{PLURAL:$1|минута|минути}}',
+'duration-hours' => '$1 {{PLURAL:$1|час|часа}}',
+'duration-days' => '$1 {{PLURAL:$1|ден|дни}}',
+'duration-weeks' => '$1 {{PLURAL:$1|седмица|седмици}}',
+'duration-years' => '$1 {{PLURAL:$1|година|години}}',
+'duration-decades' => '$1 {{PLURAL:$1|десетилетие|десетилетия}}',
+'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
+'duration-millennia' => '$1 {{PLURAL:$1|хилядолетие|хилядолетия}}',
+
 );
index f3d7ba0..577d2e2 100644 (file)
 <?php
-/** Bihari (language group)
+/** Bihari (भोजपुरी)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
  *
  * @ingroup Language
  * @file
- * @comment falls back to Bhojpuri.
  *
  */
 
 $fallback = 'bho';
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'लिंक के नीचे रेखा',
+'tog-justify' => 'पैराग्राफ जस्टीफाई',
+'tog-hideminor' => 'हाल के परिवर्तन में मामूली संपादन छुपाईं',
+'tog-numberheadings' => 'स्वयं-सांख्यिकी शिर्षक',
+'tog-rememberpassword' => 'इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})',
+'tog-previewonfirst' => 'पहिलका सम्पादन पर पूर्वावलोकन देखीं',
+
+'underline-always' => 'हमेशा',
+'underline-never' => 'कभी ना',
+'underline-default' => 'डिफॉल्ट ब्राउजर',
+
+# Dates
+'sunday' => 'इतवार',
+'monday' => 'सोमवार',
+'tuesday' => 'मंगलवार',
+'wednesday' => 'बुधवार',
+'thursday' => 'गुरुवार',
+'friday' => 'शुक्रवार',
+'saturday' => 'शनिवार',
+'sun' => 'इत',
+'mon' => 'सोम',
+'tue' => 'मंगल',
+'wed' => 'बुध',
+'thu' => 'गुरु',
+'fri' => 'शुक्र',
+'sat' => 'शनि',
+'january' => 'जनवरी',
+'february' => 'फरवरी',
+'march' => 'मार्च',
+'april' => 'अप्रिल',
+'may_long' => 'मई',
+'june' => 'जून',
+'july' => 'जुलाई',
+'august' => 'अगस्त',
+'september' => 'सितम्बर',
+'october' => 'अक्टूबर',
+'november' => 'नवम्बर',
+'december' => 'दिसम्बर',
+'january-gen' => 'जनवरी',
+'february-gen' => 'फरवरी',
+'march-gen' => 'मार्च',
+'april-gen' => 'अप्रिल',
+'may-gen' => 'मई',
+'june-gen' => 'जून',
+'july-gen' => 'जुलाई',
+'august-gen' => 'अगस्त',
+'september-gen' => 'सितम्बर',
+'october-gen' => 'अक्टूबर',
+'november-gen' => 'नवम्बर',
+'december-gen' => 'दिसम्बर',
+'jan' => 'जन',
+'feb' => 'फर',
+'mar' => 'मार्च',
+'apr' => 'अप्रिल',
+'may' => 'मई',
+'jun' => 'जून',
+'jul' => 'जुल',
+'aug' => 'अग',
+'sep' => 'सित',
+'oct' => 'अक्टू',
+'nov' => 'नव',
+'dec' => 'दिस',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|श्रेणी|श्रेणी}}',
+
+'about' => 'बारे में',
+'article' => 'सामग्री पन्ना',
+'newwindow' => '(नया विंडो में खोलीं)',
+'cancel' => 'निरस्त',
+'mytalk' => 'हमार बात',
+'navigation' => 'परिभ्रमण',
+
+# Cologne Blue skin
+'qbfind' => 'खोज',
+'qbbrowse' => 'ब्राउज',
+'qbedit' => 'सम्पादन',
+'qbpageoptions' => 'ई पन्ना',
+'qbpageinfo' => 'प्रसंग',
+'qbmyoptions' => 'हमार पन्ना',
+'qbspecialpages' => 'विशेष पन्ना',
+'faq' => 'साधारण सवाल',
+'faqpage' => 'Project:साधारण सवाल',
+
+# Vector skin
+'vector-action-delete' => 'मिटाईं',
+'vector-action-move' => 'स्थांतरण',
+'vector-action-protect' => 'संरक्षित करीं',
+'vector-action-undelete' => 'मत मिटाईं',
+'vector-action-unprotect' => 'असुरक्षित करीं',
+'vector-view-create' => 'बनाईं',
+'vector-view-edit' => 'सम्पादन',
+'vector-view-history' => 'इतिहास देखीं',
+'vector-view-view' => 'पढ़ीं',
+'vector-view-viewsource' => 'स्त्रोत देखीं',
+
+'errorpagetitle' => 'त्रुटी',
+'returnto' => 'जाईं $1 पर।',
+'tagline' => 'भोजपुरी {{SITENAME}} से',
+'help' => 'मदद',
+'search' => 'खोज',
+'searchbutton' => 'खोजीं',
+'go' => 'जाईं',
+'searcharticle' => 'जाईं',
+'history' => 'पन्ना के इतिहास',
+'history_short' => 'इतिहास',
+'updatedmarker' => 'हमार अन्तिम आगमन से बदलाव',
+'printableversion' => 'छापे लायक संस्करण',
+'permalink' => 'स्थायी लिंक',
+'print' => 'छापीं',
+'edit' => 'सम्पादन',
+'create' => 'बनाईं',
+'editthispage' => 'ई पन्ना के सम्पादन करीं',
+'create-this-page' => 'ई पन्ना के निर्माण करीं',
+'delete' => 'मिटाईं',
+'deletethispage' => 'ई पन्ना के मिटाईं',
+'protect' => 'संरक्षण करीं',
+'protect_change' => 'बदलीं',
+'protectthispage' => 'इ पन्ना के सुरक्षित करीं।',
+'unprotect' => 'असुरक्षित करीं',
+'unprotectthispage' => 'इ पन्ना के असुरक्षित करीं',
+'newpage' => 'नया पन्ना',
+'talkpage' => 'इ पन्ना पर चर्चा करीं',
+'talkpagelinktext' => 'बात-चीत',
+'specialpage' => 'ख़ाश पन्ना',
+'personaltools' => 'ब्यक्तिगत औजार',
+'postcomment' => 'नया खण्ड',
+'articlepage' => 'सामग्री पन्ना देखीं',
+'talk' => 'बात-चीत',
+'views' => 'विचारसूची',
+'toolbox' => 'औजार-पेटी',
+'userpage' => 'प्रयोगकर्ता पन्ना देखीं',
+'projectpage' => 'परियोजना पन्ना देखीं',
+'imagepage' => 'फाईल पन्ना देखीँ',
+'mediawikipage' => 'सन्देश पन्ना देखीं',
+'templatepage' => 'टेम्पलेट पन्ना देखीं',
+'viewhelppage' => 'मदद पन्ना देखीं',
+'categorypage' => 'श्रेणी पन्ना देखीं',
+'viewtalkpage' => 'बात-चीत देखीं',
+'otherlanguages' => 'अन्य भाषा में',
+'redirectedfrom' => '($1 द्वारा पुन: निर्देशित)',
+'redirectpagesub' => 'पुन: निर्देशित पन्ना',
+'lastmodifiedat' => '$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।',
+'protectedpage' => 'सुरक्षित पन्ना',
+'jumpto' => 'अहिजा जाईं:',
+'jumptonavigation' => 'परिभ्रमण',
+'jumptosearch' => 'खोजीं',
+'view-pool-error' => 'क्षमा करीं, ई समय सर्वर पर बहुत ज्यादा लोड बढ़ गईल बा।
+ई पन्ना के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बानी।
+ई पन्ना के फिर से देखे से पहिले कृपया कुछ देर तक इन्तजार करीं।
+
+$1',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite' => '{{SITENAME}} के बारे में',
+'aboutpage' => 'Project:बारे में',
+'copyright' => 'सामग्री $1 के तहत उपलब्ध बा।',
+'copyrightpage' => '{{ns:project}}:लेखाधिकार',
+'currentevents' => 'हाल के घटना',
+'currentevents-url' => 'Project:हाल के घटना',
+'disclaimers' => 'अस्विकरण',
+'disclaimerpage' => 'Project:सामान्य अस्विकरण',
+'edithelp' => 'मदद सम्पादन',
+'edithelppage' => 'Help:सम्पादन',
+'mainpage' => 'मुख्य पन्ना',
+'mainpage-description' => 'पहिलका पन्ना',
+'portal' => 'सामुदायिक पन्ना',
+'portal-url' => 'Project:सामुदायिक पोर्टल',
+'privacy' => 'गोपनीयता नीति',
+'privacypage' => 'Project:गोपनीयता नीति',
+
+'badaccess' => 'अनुमति त्रुटी',
+'badaccess-group0' => 'रउआ जवन कार्रवाई खातिर अनुरोध कईले बानी उ के निष्पादन करे के अनुमति नईखे।',
+
+'ok' => 'ठिक',
+'retrievedfrom' => '"$1" से लियल गईल',
+'youhavenewmessages' => 'रउआ लगे बा $1 ($2).',
+'newmessageslink' => 'नया सन्देश',
+'newmessagesdifflink' => 'अन्तिम परिवर्तन',
+'youhavenewmessagesmulti' => 'रउआ लगे $1 पर नया सन्देश बा',
+'editsection' => 'सम्पादन',
+'editold' => 'सम्पादन',
+'viewsourceold' => 'स्त्रोत देखीं',
+'editlink' => 'सम्पादन',
+'viewsourcelink' => 'स्त्रोत देखीं',
+'editsectionhint' => 'सम्पादन खण्ड: $1',
+'toc' => 'सामग्री',
+'showtoc' => 'देखाईं',
+'hidetoc' => 'छुपाईं',
+'thisisdeleted' => 'देखीं या भंडार करीं $1?',
+'viewdeleted' => '$1 देखब?',
+'site-rss-feed' => '$1 आर एस एस फिड',
+'site-atom-feed' => '$1 एटम फिड',
+'page-rss-feed' => '"$1" आर एस एस फिड',
+'page-atom-feed' => '"$1" एटम फिड',
+'red-link-title' => '$1 (पन्ना मौजूद नईखे)।',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'पन्ना',
+'nstab-user' => 'प्रयोगकर्ता पन्ना',
+'nstab-media' => 'मिडीया पन्ना',
+'nstab-special' => 'विशेष पन्ना',
+'nstab-project' => 'परियोजना पन्ना',
+'nstab-image' => 'फाईल',
+'nstab-mediawiki' => 'सन्देश',
+'nstab-template' => 'टेम्पलेट',
+'nstab-help' => 'मदद पन्ना',
+'nstab-category' => 'श्रेणी',
+
+# Main script and global functions
+'nosuchaction' => 'अईसन कौनो कार्रवाई नाहि',
+'nosuchspecialpage' => 'अईसन कौनो ख़ाश पन्ना नाहि',
+'nospecialpagetext' => '<strong>रउआ एगो अवैद्य विशेष पन्ना के अनुरोध कईले बानी।</strong>
+
+वैद्य विशेष पन्ना के सूची मिल सकत बा [[Special:SpecialPages|{{int:specialpages}}]] पर।',
+
+# General errors
+'error' => 'त्रुटी',
+'databaseerror' => 'डेटाबेस त्रुटी',
+'readonly' => 'डेटाबेस लॉक बा',
+'missing-article' => 'डेटाबास ऊ पन्ना के पाठ्य के ना खोज पाईल जौन ई के खोजे के रहल, नामित "$1" $2.
+ई सब साधारणत: निम्नलिखीत अप्रचलित अन्तर अथवा एगो पन्ना पर इतिहास के लिंक जौन मिटा दिहल गईल बा के कारण भईल।
+
+यदि ई बात नईखे, त हो सकत बा सॉफ्टवेयर में बग पावत होखब।
+कृपया ई एगो  [[Special:ListUsers/sysop|प्रबन्धक]] के यू आर एल के बारे में एगो नोट बनाके खबर करीं।',
+'viewsource' => 'स्त्रोत देखीं',
+
+# Login and logout pages
+'yourname' => 'प्रयोगकर्ता नाम',
+'yourpassword' => 'गुप्त शब्द',
+'yourpasswordagain' => 'गुप्त-शब्द पुन:डालीं:',
+'login' => 'खाता में प्रवेश',
+'nav-login-createaccount' => 'खाता प्रवेश / खाता बनाईं',
+'loginprompt' => '{{SITENAME}} में प्रवेश खातिर राउर कुकिज चालू होवे के चाहीं',
+'userlogin' => 'खाता प्रवेश / खाता बनाईं',
+'userloginnocreate' => 'खाता में प्रवेश',
+'logout' => 'खाता से बाहर',
+'userlogout' => 'खाता से बाहर',
+'notloggedin' => 'खाता में प्रवेश नईखीं भईल',
+'nologin' => 'का एगो खाता नईखे? $1.',
+'nologinlink' => 'एगो खाता बनाईं',
+'createaccount' => 'खाता बनाईं',
+'gotaccount' => 'का पहिले से एगो खाता बा? $1.',
+'gotaccountlink' => 'खाता में प्रवेश',
+'createaccountmail' => 'ई-मेल द्वारा',
+'badretype' => 'रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।',
+'userexists' => 'ई प्रयोगकर्ता नाम पहिले से इस्तेमाल में बा। कृपया कौनो दोसर नाम चुनीं।',
+'loginerror' => 'खाता प्रवेश में त्रुटि',
+'createaccounterror' => 'ई खाता ना बन पाईल: $1',
+'nocookiesnew' => 'प्रयोगकर्ता खाता त बन गईल, बाँकी रउआ प्रवेश नईखीं भईल।
+{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
+राउर कुकिज असक्षम बा।
+कृपया उ के सक्षम करीं, उ के बाद राउर नया प्रयोगकर्ता नाम आ गुप्त शब्द के साथ प्रवेश करीं।',
+'nocookieslogin' => '{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
+राउर कुकिज असक्षम बा।
+कृपया उ के सक्षम करीं आ फिर से कोशिश करीं',
+'noname' => 'रउआ उपयुक्त प्रयोगकर्ता नाम नईखीं निर्दिष्ट कईले।',
+'loginsuccesstitle' => 'खाता प्रवेश में सफल',
+'loginsuccess' => "''' \"\$1\" के रुप में रउआ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''",
+'nosuchuser' => '"$1" नाम से कौनो प्रयोगकर्ता नईखन।
+प्रयोगकर्ता नाम संवेदनशील मामला बा।
+शब्द-वर्तनी के जाँच करीं, आ चाहे [[Special:UserLogin/signup|एगो नया खाता बनाईं]]।',
+'nouserspecified' => 'रउआ एगो प्रयोगकर्ता नाम निर्दिष्ट करे के बा।',
+'login-userblocked' => 'ई प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।',
+'wrongpassword' => 'गलत गुप्त-शब्द डलले बानी।
+कृपया फिर से कोशिश करीं।',
+'wrongpasswordempty' => 'गुप्त-शब्द खाली बा। कृपया फिर से कोशिश करीं।',
+'passwordtooshort' => 'गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।',
+'password-name-match' => 'राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।',
+'mailmypassword' => 'नया गुप्त-शब्द ई-मेल पर भेजीं',
+'passwordremindertitle' => '{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द',
+
+# Change password dialog
+'resetpass' => 'गुप्त-शब्द बदलीं',
+'oldpassword' => 'पुराना गुप्त-शब्द:',
+'newpassword' => 'नया गुप्त-शब्द:',
+'retypenew' => 'नया गुप्त-शब्द पुन: डालीं:',
+
+# Edit page toolbar
+'bold_tip' => 'मोट पाठ्य',
+'italic_sample' => 'इटालिक पाठ्य',
+'italic_tip' => 'इटालिक पाठ्य',
+'headline_sample' => 'शिर्षक पाठ्य',
+'image_sample' => 'उदाहरण.jpg',
+'media_sample' => 'उदाहरण.ogg',
+'media_tip' => 'फाईल लिंक',
+'sig_tip' => 'timestamp के साथ राउर हस्ताक्षर',
+
+# Edit pages
+'summary' => 'सारांश:',
+'subject' => 'विषय/शिर्षक:',
+'minoredit' => 'छोट परिवर्तन',
+'watchthis' => 'ई पन्ना ध्यानसूची में डालीं',
+'savearticle' => 'पन्ना सुरक्षित करीं',
+'preview' => 'पूर्वावलोकन',
+'showpreview' => 'पूर्वावलोकन देखाईं',
+'showlivepreview' => 'सीधा पूर्वावलोकन',
+'showdiff' => 'परिवर्तन देखाईं',
+'anoneditwarning' => "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
+'anonpreviewwarning' => "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
+'missingsummary' => "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
+'missingcommenttext' => 'कृपया निचे एगो टिप्पणी करीं।',
+'missingcommentheader' => "'''स्मरणपत्र:''' रउआ ई टिप्पणी खातिर कौनो विषय/शिर्षक प्रदान नईखीं कईले। \"{{int:savearticle}}\" यदि रउआ फिर से सुरक्षित करब त राउर सम्पादन बिना कौनो शिर्षक के सुरक्षित हो जाई।",
+'summary-preview' => 'सारांश पूर्वावलोकन:',
+'subject-preview' => 'विषय/शिर्षक पूर्वावलोकन:',
+'blockedtitle' => 'निष्क्रिय प्रयोगकर्ता',
+'blockednoreason' => 'कउनो कारण उल्लेखित नईखे',
+'nosuchsectiontitle' => 'खण्ड ना मिल सकल।',
+'loginreqtitle' => 'खाता में प्रवेश जरुरी बा',
+'loginreqlink' => 'खाता में प्रवेश',
+'accmailtitle' => 'गुप्त-शब्द भेजा गईल',
+'newarticle' => '(नया)',
+'newarticletext' => "रउआ एगो अइसन लिंक के पन्ना के अनुसरण कइले बानी जउन अभी तक उपलब्ध नइखे।
+पन्ना बनावे खातिर, नीचे के बाकस में टाईप करे के शुरु करीं (ज्यादा जानकारी खातिर देखीं [[{{MediaWiki:Helppage}}|मदद पन्ना]])।
+यदि रउआ अहिजा गलती से आ गईल बानी त, आपन ब्राउजर के '''back''' (बैक) बटन दबाईं",
+'yourdiff' => 'अंतर',
+'template-protected' => '(संरक्षित)',
+
+# History pages
+'revisionasof' => '$1 के रुप में संशोधन',
+'revision-info' => '$2 में से $1 के रुप में संशोधन',
+'previousrevision' => '← पुरान संशोधन',
+'nextrevision' => 'नया संशोधन →',
+'currentrevisionlink' => 'हाल के संशोधन',
+'cur' => 'हाल',
+'next' => 'अगिला',
+'last' => 'पछिला',
+'page_first' => 'पहिलका',
+'page_last' => 'आखिरी',
+'histlegend' => "चुनाव अन्तर: तुलना करे खातिर संशोधन के रेडियो बटन पर निशान लगाईं आ enter बटन दबाईं आ चाहे निचला बटन दबाईं।<br />
+Legend: '''({{int:cur}})''' = हाल के संशोधन के साथ अंतर, '''({{int:last}})''' = पुर्ववर्ती संशोधन के साथ अंतर, '''{{int:minoreditletter}}''' = छोट सम्पादन।",
+'history-fieldset-title' => 'इतिहास निहारीं',
+'history-show-deleted' => 'खाली मेटावल',
+'histfirst' => 'बहुत पहिले के',
+'histlast' => 'हाल के',
+'historysize' => '({{PLURAL:$1|1 बाइट|$1 बाइट}})',
+'historyempty' => '(खाली)',
+
+# Revision feed
+'history-feed-title' => 'संशोधन इतिहास',
+'history-feed-description' => 'विकि पर इ पन्ना के संशोधन के इतिहास',
+'history-feed-item-nocomment' => '$1 $2 पर',
+'history-feed-empty' => 'अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।
+प्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।',
+
+# Revision deletion
+'rev-deleted-comment' => '(टिप्पणी मिटा दिहल गईल बा)',
+'rev-deleted-user' => '(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)',
+'rev-deleted-event' => '(लॉग कार्रवाई मिटा दिहल गईल बा)',
+'rev-deleted-user-contribs' => '[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]',
+'rev-deleted-text-permission' => "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।
+मेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
+'rev-delundel' => 'दिखाईं/छुपाईं',
+'revdel-restore' => 'दूश्यता बदलीं',
+'revdel-restore-deleted' => 'मिटल संसोधन',
+'revdel-restore-visible' => 'दृश्यमान संसोधन',
+'pagehist' => 'पन्ना के इतिहास',
+'deletedhist' => 'मिटावल इतिहास',
+
+# Merge log
+'revertmerge' => 'अलग करीं',
+'mergelogpagetext' => 'एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भईल एगो सूची नीचे दिहल बा।',
+
+# Diffs
+'history-title' => "''$1'' के संशोधन इतिहास",
+'lineno' => 'पंक्ति $1:',
+'compareselectedversions' => 'चुनल गईल संशोधन में अन्तर देखीं',
+'showhideselectedversions' => 'चुनल गईल संशोधन दिखाईं/छुपाईं',
+'editundo' => 'पूर्ववत',
+'diff-multi' => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)',
+
+# Search results
+'searchresults' => 'खोज परिणाम',
+'searchresults-title' => '$1 खातिर खोज परिणाम',
+'searchresulttext' => '{{SITENAME}} के खोज करे के बारे में अधिक जानकारी खातिर, देखीं [[{{MediaWiki:Helppage}}| {{int:help}}]]।',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' खातिर राउर करल गईल खोज ([[Special:Prefixindex/$1| "$1" से शुरु होवे वाला सब पन्ना]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
+'searchsubtitleinvalid' => "रउआ '''$1''' खातिर खोज कईनी ह",
+'titlematches' => 'पन्ना के शिर्षक मिलत बा।',
+'notitlematches' => 'पन्ना के शिर्षक नईखे मिलत',
+'textmatches' => 'पन्ना के पाठ्य मिलत बा',
+'notextmatches' => 'पन्ना के पाठ्य नईखे मिलत',
+'prevn' => 'पिछला {{PLURAL:$1|$1}}',
+'nextn' => 'अगला {{PLURAL:$1|$1}}',
+'prevn-title' => 'पिछला $1 {{PLURAL:$1|परिणाम}}',
+'nextn-title' => 'अगला $1 {{PLURAL:$1|परिणाम}}',
+'shown-title' => 'दिखाईं $1 {{PLURAL:$1|परिणाम}}',
+'viewprevnext' => 'देखीं ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'खोज विकल्प',
+'searchmenu-exists' => "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''",
+'searchmenu-new' => "'''इ विकि पर ''[[:$1]]'' नाम से पन्ना बनाईं'''",
+'searchhelp-url' => 'Help:सामग्री',
+'searchmenu-prefix' => '[[विशेष:उपसर्ग सूची/$1|इ उपसर्ग साथे पन्ना ब्राउज करीं]]',
+'searchprofile-articles' => 'सामग्री पन्ना',
+'searchprofile-project' => 'मदद आ परियोजना पन्ना',
+'searchprofile-images' => 'मल्टिमीडिया',
+'searchprofile-everything' => 'सब कुछ',
+'searchprofile-advanced' => 'अग्रिम',
+'searchprofile-articles-tooltip' => '$1 में खोजीं',
+'searchprofile-project-tooltip' => '$1 में खोजीं',
+'searchprofile-images-tooltip' => 'फाईल खातिर खोज',
+'searchprofile-everything-tooltip' => 'सभन सामग्री में खोजीं (वार्ता पन्ना सहित)',
+'search-result-size' => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})',
+'search-result-score' => 'प्रासंगिकता: $1%',
+'search-redirect' => '(पुन: निर्देशण $1)',
+'search-section' => '(खंड $1)',
+'search-suggest' => 'का राउर मतलब बा: $1',
+'search-interwiki-caption' => 'बहिन परियोजना',
+'search-interwiki-default' => '$1 के परिणाम:',
+'search-interwiki-more' => '(अउर)',
+'search-mwsuggest-enabled' => 'सुझाव के साथ',
+'search-mwsuggest-disabled' => 'कौनो सुझाव ना',
+'search-relatedarticle' => 'संबंधित',
+'mwsuggest-disable' => 'AJAX सुझाव असक्षम',
+'searcheverything-enable' => 'सभन सन्दर्भ में खोजीं',
+'searchrelated' => 'संबंधित',
+'searchall' => 'सब',
+'showingresults' => "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
+'showingresultsnum' => "नीचे देखावल जा रहल बा {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
+'powersearch' => 'उन्नत खोज',
+'powersearch-legend' => 'उन्नत खोज',
+'powersearch-ns' => 'सन्दर्भ में खोजीं',
+'powersearch-redir' => 'पुन:निर्देश सूची',
+'powersearch-field' => 'खातिर खोज',
+'powersearch-togglelabel' => 'जाँच:',
+'powersearch-toggleall' => 'सब',
+'powersearch-togglenone' => 'कउनो ना',
+'search-external' => 'बाहरी खोज',
+
+# Quickbar
+'qbsettings-none' => 'कउनो ना',
+
+# Preferences page
+'preferences' => 'वरीयता',
+'mypreferences' => 'हमार पसन्द',
+'prefs-edits' => 'सम्पादन संख्या',
+'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
+'changepassword' => 'गुप्त शब्द बदलीं',
+'skin-preview' => 'पूर्वावलोकन',
+'prefs-rc' => 'तुरंत भईल परिवर्तन',
+
+# Recent changes
+'recentchanges' => 'तुरंत भईल परिवर्तन',
+'rcshowhideminor' => '$1 छोट सम्पादन',
+'diff' => 'अन्तर',
+'hist' => 'इति',
+'hide' => 'छुपाँई',
+'show' => 'दिखाईं',
+'minoreditletter' => 'छो',
+'newpageletter' => 'न',
+'boteditletter' => 'बो',
+'number_of_watching_users_pageview' => '[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]',
+
+# Recent changes linked
+'recentchangeslinked' => 'सम्बन्धित बदलाव',
+'recentchangeslinked-feed' => 'सम्बन्धित बदलाव',
+'recentchangeslinked-toolbox' => 'सम्बन्धित बदलाव',
+
+# Upload
+'upload' => 'फाईल लादीं',
+
+# File description page
+'filehist' => 'पन्ना के इतिहास',
+'filehist-deleteall' => 'सब मिटाईं',
+'filehist-deleteone' => 'मिटाईं',
+'filehist-current' => 'मौजूदा',
+'filehist-datetime' => 'तारिख/समय',
+'filehist-thumb' => 'थम्बनेल',
+'filehist-nothumb' => 'बिन थम्बनेल',
+'filehist-user' => 'प्रयोगकर्ता',
+'filehist-dimensions' => 'आयाम',
+'filehist-filesize' => 'फाईल के आकार',
+'filehist-comment' => 'टिप्पणी',
+'filehist-missing' => 'गायब फाईल',
+'imagelinks' => 'फाईल लिंक',
+'nolinkstoimage' => 'इ फाईल जोड़े कौनो फाइल लिंक नईखे।',
+'morelinkstoimage' => 'इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।',
+'sharedupload' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा।',
+'sharedupload-desc-there' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा। अधिक जानकारी खातिर कृपया [$2 फाईल विवरण पन्ना] देखीं।',
+'filepage-nofile' => 'इ नाम से कौनो फाईल उपलब्ध नईखे।',
+'filepage-nofile-link' => 'इ नाम से कौनो फाईल उपलब्ध नईखे, लेकिन रउआ [$1 के लाद] सकत बानी।',
+'uploadnewversion-linktext' => 'इ फाईल के नया संस्करण लादीं।',
+'shared-repo-from' => '$1 से',
+'shared-repo' => 'एगो आवटिंत भंडार गृह',
+'shared-repo-name-wikimediacommons' => 'विकिमीडिया कॉमन्स',
+
+# File reversion
+'filerevert' => 'पुन: निर्देशित $1',
+'filerevert-legend' => 'पुन: निर्देशित फाईल',
+'filerevert-comment' => 'कारण:',
+
+# File deletion
+'filedelete' => '$1 के मिटाईं',
+'filedelete-legend' => 'फाईल के मिटाईं',
+'filedelete-comment' => 'कारण:',
+'filedelete-submit' => 'मिटाईं',
+'filedelete-success' => "'''$1''' के मिटा दिहल गईल बा।",
+'filedelete-nofile' => "'''$1''' उपलब्ध नईखे।",
+
+# Random page
+'randompage' => 'अविशिष्ट पन्ना',
+
+# Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|बाईट|बाईट्स}}',
+'move' => 'स्थान्तरण',
+'movethispage' => 'ई पन्ना के स्थांतरण करीं',
+
+# Book sources
+'booksources' => 'किताबी स्त्रोत',
+
+# Special:AllPages
+'allpagessubmit' => 'जाईं',
+'allpagesprefix' => 'उपसर्ग के साथे पन्ना प्रदर्शन:',
+
+# E-mail user
+'emailuser' => 'ई प्रयोगकर्ता के ईमेल करीं',
+
+# Watchlist
+'watchlist' => 'हमार ध्यानसूची',
+'mywatchlist' => 'हमार ध्यानसूची',
+'watch' => 'ध्यानसूची में डालीं',
+'watchthispage' => 'ई पन्ना ध्यानसूची में डालीं',
+'unwatch' => 'ध्यानसूची से हटाईं',
+
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'ध्यानसूची में जाते हुए',
+'unwatching' => 'ध्यानसूची से हटते हुए',
+
+'enotif_newpagetext' => 'इ एगो नया पन्ना ह',
+'created' => 'बनावल गईल',
+
+# Undelete
+'undeletelink' => 'देखीं/बहाल करीं',
+
+# Namespace form on various pages
+'namespace' => 'सन्दर्भ',
+'invert' => 'चयनित पलटीं',
+'blanknamespace' => '(मुख्य)',
+
+# Contributions
+'contributions' => 'प्रयोगकर्ता योगदान',
+'contributions-title' => ' $1 खातिर प्रयोगकर्ता योगदान',
+'mycontris' => 'हमार योगदान',
+'nocontribs' => 'ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।',
+'uctop' => '(शीर्ष)',
+'month' => 'महिना से (आ उ से पहिले):',
+'year' => 'साल से (आ उ से पहिले):',
+
+'sp-contributions-newbies' => 'खाली नया खाता के योगदान देखीं।',
+'sp-contributions-newbies-sub' => 'नया खाता खातिर',
+'sp-contributions-newbies-title' => 'नया खाता खातिर प्रयोगकर्ता के योगदान।',
+'sp-contributions-blocklog' => 'निष्क्रीय खाता',
+'sp-contributions-deleted' => 'नष्ट प्रयोगकर्ता के योगदान।',
+'sp-contributions-logs' => 'लौग',
+'sp-contributions-talk' => 'बात-चीत',
+'sp-contributions-userrights' => 'प्रयोगकर्ता अधिकार प्रबन्धन',
+'sp-contributions-blocked-notice' => 'ई प्रयोगकर्ता के ई समय निष्क्रीय करल गईल बा।
+नविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:',
+
+# What links here
+'whatlinkshere' => 'अहिजा का जुड़ी',
+'whatlinkshere-title' => 'पन्ना जौन "$1" से जुड़ेला',
+'whatlinkshere-page' => 'पन्ना:',
+'linkshere' => "नीचे के सब पन्ना '''[[:$1]]''' से जुड़ेला:",
+'nolinkshere' => "'''[[:$1]]''' से कौनो पन्ना नईखे जुड़ल।",
+'nolinkshere-ns' => "चुनल गईल सन्दर्भ में '''[[:$1]]''' से कौनो पन्ना ना जुड़ेला।",
+'isredirect' => 'पुन: निर्दिष्ट पन्ना',
+'isimage' => 'तस्वीर लिंक',
+'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछला $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगला $1}}',
+'whatlinkshere-links' => '← लिंक',
+'whatlinkshere-hideredirs' => '$1 पुन: निर्देशित',
+'whatlinkshere-hidelinks' => '$1 लिंक',
+'whatlinkshere-hideimages' => '$1 तस्वीर लिंक',
+'whatlinkshere-filters' => 'फिल्टर',
+
+# Block/unblock
+'blockip' => 'प्रतिबंधित प्रयोगकर्ता',
+'blocklink' => 'निष्क्रिय',
+'unblocklink' => 'ताला खोलीं',
+'change-blocklink' => 'ब्लॉक बदलीं',
+'contribslink' => 'योगदान',
+'blocklogpage' => 'निष्क्रिय खाता',
+
+# Move page
+'movepagebtn' => 'पन्ना स्थांतरण करीं',
+'revertmove' => 'पिछलका स्थिति',
+
+# Thumbnails
+'thumbnail-more' => 'बढ़ाईं',
+'filemissing' => 'फाईल गायब',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'राउर प्रयोगकर्ता पन्ना',
+'tooltip-pt-mytalk' => 'राउर वार्ता पन्ना',
+'tooltip-pt-preferences' => 'राउर पसन्द',
+'tooltip-pt-mycontris' => 'राउर योगदान के सूची',
+'tooltip-pt-login' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
+'tooltip-pt-anonlogin' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
+'tooltip-pt-logout' => 'खाता से बाहर',
+'tooltip-ca-talk' => 'सामग्री पन्ना के बारे में बात-चीत',
+'tooltip-ca-edit' => 'रउआ ई पन्ना के सम्पादन कर सकत बानी। कृपया पन्ना सुरक्षित करे से पहिले पूर्वावलोकन बटन के इस्तेमाल करीं।',
+'tooltip-ca-addsection' => 'एगो नया खण्ड शुरु करीं',
+'tooltip-ca-viewsource' => 'इ पन्ना के संरक्षित कर दिहल गईल बा। रऊआ एकर मूल देख सकत बानी।',
+'tooltip-ca-history' => 'ई पन्ना के पिछला संशोधन',
+'tooltip-ca-protect' => 'इ पन्ना के संरक्षित करीं।',
+'tooltip-ca-unprotect' => 'इ पन्ना के संरक्षण हटाईं।',
+'tooltip-ca-delete' => 'ई पन्ना मिटाईं',
+'tooltip-ca-move' => 'ई पन्ना के स्थांतरण करीं',
+'tooltip-ca-watch' => 'इ पन्ना के आपन ध्यानसूची में डालीं',
+'tooltip-search' => '{{SITENAME}} खोजीं',
+'tooltip-search-go' => 'यदि पन्ना मौजूद होई त ईहे सटीक नाम के साथ उ पन्ना पर जाईं',
+'tooltip-search-fulltext' => 'ई पाठ्य खातिर पन्ना खोजीं',
+'tooltip-p-logo' => 'मुख्य पन्ना पर जाईं',
+'tooltip-n-mainpage' => 'मुख्य पन्ना पर जाईं',
+'tooltip-n-mainpage-description' => 'मुख्य पन्ना पर पधारीं',
+'tooltip-n-portal' => 'परियोजना के बारे मेँ, रउआ का कर सकत बानी, वस्तु कहाँ खोजब',
+'tooltip-n-currentevents' => 'वर्तमान के घटना पर पृष्ठभूमी जानकारी खोजीं',
+'tooltip-n-recentchanges' => 'विकि पर तुरंत भईल परिवर्तन के सूची',
+'tooltip-n-randompage' => 'बेतरतिब पन्ना लादीं (Load करीं)',
+'tooltip-n-help' => 'जगह पता लगावे खातिर',
+'tooltip-t-whatlinkshere' => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
+'tooltip-t-recentchangeslinked' => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
+'tooltip-t-upload' => 'फाईल लादीं (अपलोड )',
+'tooltip-t-specialpages' => 'ख़ाश पन्नवन के सूची',
+'tooltip-t-print' => 'ई पन्ना के छापे लायक संस्करण।',
+'tooltip-t-permalink' => 'ई पन्ना के संसोधन खातिर स्थायी लिंक।',
+'tooltip-ca-nstab-main' => 'सामग्री पन्ना देखीं',
+'tooltip-ca-nstab-special' => 'ई एगो ख़ाश पन्ना ह, रउआ ई पन्ना के सम्पादन नईखीं कर सकत',
+'tooltip-save' => 'आपन बदलाव के सुरक्षित करीं',
+
+# Media information
+'svg-long-desc' => 'एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3',
+'show-big-image' => 'पुरा गुणवत्ता',
+'file-info-gif-looped' => 'लूप्ड',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|फ्रेम}}',
+'file-info-png-looped' => 'लूप्ड',
+
+# Bad image list
+'bad_image_list' => 'फोर्मेट निम्न अनुसार बा:
+खाली सूची सामग्री (* से शुरु होवे वाला पंक्ति ) मानल गईल बा।
+पंक्ति पर पहिला लिंक एगो खराब फाईल के साथ जुड़ल होवे के चाहीं।
+कोई भी बाद वाला लिंक ओही पंक्ति पर अईला पर उ के अपवाद मानल जाई, अर्थात जौन पन्ना पर फाईल इनलाईन हो सकत बा।',
+
+# Metadata
+'metadata' => 'मेटाडाटा',
+'metadata-help' => 'इ फाईल में अतिरिक्त जानकारी उपलब्ध बा, हो सकत बा कि इ डिजीटल कैमरा या स्कैनर से लेवल गईल होखे। यदि इ फाईल एकर मूल फाईल में से संशोधित करल गईल बा त कुछ जानकारी उजागर ना हो सकी।',
+'metadata-expand' => 'विस्तृत विवरण देखाईं',
+'metadata-collapse' => 'विस्तृत विवरण छुपाँईं',
+
+# EXIF tags
+'exif-imagewidth' => 'चौड़ाई',
+'exif-imagelength' => 'ऊँचाई',
+'exif-bitspersample' => 'अवयव प्रति बीट',
+'exif-compression' => 'सम्पीड़न प्रणाली',
+'exif-photometricinterpretation' => 'पिक्सल रचना',
+'exif-orientation' => 'अभिसंस्करण',
+'exif-samplesperpixel' => 'अवयवन के संख्या',
+'exif-planarconfiguration' => 'डेटा प्रबन्धन',
+'exif-xresolution' => 'क्षैतिज समाधान',
+'exif-yresolution' => 'लम्बवत समाधान',
+'exif-stripoffsets' => 'चित्र डेटा के स्थिती',
+'exif-jpeginterchangeformatlength' => 'JPEG डेटा के बाइट',
+
+# 'all' in various places, this might be different for inflected languages
+'namespacesall' => 'सब',
+'monthsall' => 'सब',
+'limitall' => 'सब',
+
+# E-mail address confirmation
+'confirmemail' => 'इ-मेल पता कन्फर्म करीं',
+
+# Special:SpecialPages
+'specialpages' => 'ख़ाश पन्ना',
+
+# New logging system
+'revdelete-restricted' => 'प्रबंधक पर प्रतिबंध लागू',
+'revdelete-unrestricted' => 'प्रबंधक पर से प्रतिबंध समाप्त',
+
+);
index 614ef35..1e02306 100644 (file)
@@ -46,515 +46,514 @@ $digitTransformTable = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'        => 'लिंक के नीचे रेखा',
-'tog-justify'          => 'पैराग्राफ जस्टीफाई',
-'tog-hideminor'        => 'हाल के परिवर्तन में मामूली संपादन छुपाईं',
-'tog-numberheadings'   => 'स्वयं-सांख्यिकी शिर्षक',
-'tog-showtoolbar'      => 'सम्पादन औजार् बक्सा के दिखाइल् जाए',
+'tog-underline' => 'लिंक के नीचे रेखा',
+'tog-justify' => 'पैराग्राफ जस्टीफाई',
+'tog-hideminor' => 'हाल के परिवर्तन में मामूली संपादन छुपाईं',
+'tog-numberheadings' => 'स्वयं-सांख्यिकी शिर्षक',
+'tog-showtoolbar' => 'सम्पादन औजार् बक्सा के दिखाइल् जाए',
 'tog-rememberpassword' => 'इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})',
-'tog-previewontop'     => 'सम्पादन बक्सा से पहिले पुर्वदर्शन दिखाईं।',
-'tog-previewonfirst'   => 'पहिलका सम्पादन पर पूर्वावलोकन देखीं',
+'tog-previewontop' => 'सम्पादन बक्सा से पहिले पुर्वदर्शन दिखाईं।',
+'tog-previewonfirst' => 'पहिलका सम्पादन पर पूर्वावलोकन देखीं',
 
-'underline-always'  => 'हमेशा',
-'underline-never'   => 'कभी ना',
+'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|श्रेणी|श्रेणी}}',
 
-'about'      => 'बारे में',
-'article'    => 'सामग्री पन्ना',
-'newwindow'  => '(नया विंडो में खोलीं)',
-'cancel'     => 'निरस्त',
-'mytalk'     => 'हमार बात',
+'about' => 'बारे में',
+'article' => 'सामग्री पन्ना',
+'newwindow' => '(नया विंडो में खोलीं)',
+'cancel' => 'निरस्त',
+'mytalk' => 'हमार बात',
 'navigation' => 'परिभ्रमण',
 
 # Cologne Blue skin
-'qbfind'         => 'खोज',
-'qbbrowse'       => 'ब्राउज',
-'qbedit'         => 'सम्पादन',
-'qbpageoptions'  => 'ई पन्ना',
-'qbpageinfo'     => 'प्रसंग',
-'qbmyoptions'    => 'हमार पन्ना',
+'qbfind' => 'खोज',
+'qbbrowse' => 'ब्राउज',
+'qbedit' => 'सम्पादन',
+'qbpageoptions' => 'ई पन्ना',
+'qbpageinfo' => 'प्रसंग',
+'qbmyoptions' => 'हमार पन्ना',
 'qbspecialpages' => 'विशेष पन्ना',
-'faq'            => 'साधारण सवाल',
-'faqpage'        => 'Project:साधारण सवाल',
+'faq' => 'साधारण सवाल',
+'faqpage' => 'Project:साधारण सवाल',
 
 # Vector skin
-'vector-action-delete'    => 'मिटाईं',
-'vector-action-move'      => 'स्थांतरण',
-'vector-action-protect'   => 'संरक्षित करीं',
-'vector-action-undelete'  => 'मत मिटाईं',
+'vector-action-delete' => 'मिटाईं',
+'vector-action-move' => 'स्थांतरण',
+'vector-action-protect' => 'संरक्षित करीं',
+'vector-action-undelete' => 'मत मिटाईं',
 'vector-action-unprotect' => 'असुरक्षित करीं',
-'vector-view-create'      => 'बनाईं',
-'vector-view-edit'        => 'सम्पादन',
-'vector-view-history'     => 'इतिहास देखीं',
-'vector-view-view'        => 'पढ़ीं',
-'vector-view-viewsource'  => 'स्त्रोत देखीं',
-
-'errorpagetitle'    => 'त्रुटी',
-'returnto'          => 'जाईं $1 पर।',
-'tagline'           => 'भोजपुरी {{SITENAME}} से',
-'help'              => 'मदद',
-'search'            => 'खोज',
-'searchbutton'      => 'खोजीं',
-'go'                => 'जाईं',
-'searcharticle'     => 'जाईं',
-'history'           => 'पन्ना के इतिहास',
-'history_short'     => 'इतिहास',
-'updatedmarker'     => 'हमार अन्तिम आगमन से बदलाव',
-'printableversion'  => 'छापे लायक संस्करण',
-'permalink'         => 'स्थायी लिंक',
-'print'             => 'छापीं',
-'edit'              => 'सम्पादन',
-'create'            => 'बनाईं',
-'editthispage'      => 'ई पन्ना के सम्पादन करीं',
-'create-this-page'  => 'ई पन्ना के निर्माण करीं',
-'delete'            => 'मिटाईं',
-'deletethispage'    => 'ई पन्ना के मिटाईं',
-'protect'           => 'संरक्षण करीं',
-'protect_change'    => 'बदलीं',
-'protectthispage'   => 'इ पन्ना के सुरक्षित करीं।',
-'unprotect'         => 'असुरक्षित करीं',
+'vector-view-create' => 'बनाईं',
+'vector-view-edit' => 'सम्पादन',
+'vector-view-history' => 'इतिहास देखीं',
+'vector-view-view' => 'पढ़ीं',
+'vector-view-viewsource' => 'स्त्रोत देखीं',
+
+'errorpagetitle' => 'त्रुटी',
+'returnto' => 'जाईं $1 पर।',
+'tagline' => 'भोजपुरी {{SITENAME}} से',
+'help' => 'मदद',
+'search' => 'खोज',
+'searchbutton' => 'खोजीं',
+'go' => 'जाईं',
+'searcharticle' => 'जाईं',
+'history' => 'पन्ना के इतिहास',
+'history_short' => 'इतिहास',
+'updatedmarker' => 'हमार अन्तिम आगमन से बदलाव',
+'printableversion' => 'छापे लायक संस्करण',
+'permalink' => 'स्थायी लिंक',
+'print' => 'छापीं',
+'edit' => 'सम्पादन',
+'create' => 'बनाईं',
+'editthispage' => 'ई पन्ना के सम्पादन करीं',
+'create-this-page' => 'ई पन्ना के निर्माण करीं',
+'delete' => 'मिटाईं',
+'deletethispage' => 'ई पन्ना के मिटाईं',
+'protect' => 'संरक्षण करीं',
+'protect_change' => 'बदलीं',
+'protectthispage' => 'इ पन्ना के सुरक्षित करीं।',
+'unprotect' => 'असुरक्षित करीं',
 'unprotectthispage' => 'इ पन्ना के असुरक्षित करीं',
-'newpage'           => 'नया पन्ना',
-'talkpage'          => 'इ पन्ना पर चर्चा करीं',
-'talkpagelinktext'  => 'बात-चीत',
-'specialpage'       => 'ख़ाश पन्ना',
-'personaltools'     => 'ब्यक्तिगत औजार',
-'postcomment'       => 'नया खण्ड',
-'articlepage'       => 'सामग्री पन्ना देखीं',
-'talk'              => 'बात-चीत',
-'views'             => 'विचारसूची',
-'toolbox'           => 'औजार-पेटी',
-'userpage'          => 'प्रयोगकर्ता पन्ना देखीं',
-'projectpage'       => 'परियोजना पन्ना देखीं',
-'imagepage'         => 'फाईल पन्ना देखीँ',
-'mediawikipage'     => 'सन्देश पन्ना देखीं',
-'templatepage'      => 'टेम्पलेट पन्ना देखीं',
-'viewhelppage'      => 'मदद पन्ना देखीं',
-'categorypage'      => 'श्रेणी पन्ना देखीं',
-'viewtalkpage'      => 'बात-चीत देखीं',
-'otherlanguages'    => 'अन्य भाषा में',
-'redirectedfrom'    => '($1 द्वारा पुन: निर्देशित)',
-'redirectpagesub'   => 'पुन: निर्देशित पन्ना',
-'lastmodifiedat'    => '$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।',
-'protectedpage'     => 'सुरक्षित पन्ना',
-'jumpto'            => 'अहिजा जाईं:',
-'jumptonavigation'  => 'परिभ्रमण',
-'jumptosearch'      => 'खोजीं',
-'view-pool-error'   => 'क्षमा करीं, ई समय सर्वर पर बहुत ज्यादा लोड बढ़ गईल बा।
+'newpage' => 'नया पन्ना',
+'talkpage' => 'इ पन्ना पर चर्चा करीं',
+'talkpagelinktext' => 'बात-चीत',
+'specialpage' => 'ख़ाश पन्ना',
+'personaltools' => 'ब्यक्तिगत औजार',
+'postcomment' => 'नया खण्ड',
+'articlepage' => 'सामग्री पन्ना देखीं',
+'talk' => 'बात-चीत',
+'views' => 'विचारसूची',
+'toolbox' => 'औजार-पेटी',
+'userpage' => 'प्रयोगकर्ता पन्ना देखीं',
+'projectpage' => 'परियोजना पन्ना देखीं',
+'imagepage' => 'फाईल पन्ना देखीँ',
+'mediawikipage' => 'सन्देश पन्ना देखीं',
+'templatepage' => 'टेम्पलेट पन्ना देखीं',
+'viewhelppage' => 'मदद पन्ना देखीं',
+'categorypage' => 'श्रेणी पन्ना देखीं',
+'viewtalkpage' => 'बात-चीत देखीं',
+'otherlanguages' => 'अन्य भाषा में',
+'redirectedfrom' => '($1 द्वारा पुन: निर्देशित)',
+'redirectpagesub' => 'पुन: निर्देशित पन्ना',
+'lastmodifiedat' => '$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।',
+'protectedpage' => 'सुरक्षित पन्ना',
+'jumpto' => 'अहिजा जाईं:',
+'jumptonavigation' => 'परिभ्रमण',
+'jumptosearch' => 'खोजीं',
+'view-pool-error' => 'क्षमा करीं, ई समय सर्वर पर बहुत ज्यादा लोड बढ़ गईल बा।
 ई पन्ना के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बानी।
 ई पन्ना के फिर से देखे से पहिले कृपया कुछ देर तक इन्तजार करीं।
 
 $1',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite'            => '{{SITENAME}} के बारे में',
-'aboutpage'            => 'Project:बारे में',
-'copyright'            => 'सामग्री $1 के तहत उपलब्ध बा।',
-'copyrightpage'        => '{{ns:project}}:लेखाधिकार',
-'currentevents'        => 'हाल के घटना',
-'currentevents-url'    => 'Project:हाल के घटना',
-'disclaimers'          => 'अस्विकरण',
-'disclaimerpage'       => 'Project:सामान्य अस्विकरण',
-'edithelp'             => 'मदद सम्पादन',
-'edithelppage'         => 'Help:सम्पादन',
-'mainpage'             => 'मुख्य पन्ना',
+'aboutsite' => '{{SITENAME}} के बारे में',
+'aboutpage' => 'Project:बारे में',
+'copyright' => 'सामग्री $1 के तहत उपलब्ध बा।',
+'copyrightpage' => '{{ns:project}}:लेखाधिकार',
+'currentevents' => 'हाल के घटना',
+'currentevents-url' => 'Project:हाल के घटना',
+'disclaimers' => 'अस्विकरण',
+'disclaimerpage' => 'Project:सामान्य अस्विकरण',
+'edithelp' => 'मदद सम्पादन',
+'edithelppage' => 'Help:सम्पादन',
+'mainpage' => 'मुख्य पन्ना',
 'mainpage-description' => 'पहिलका पन्ना',
-'portal'               => 'सामुदायिक पन्ना',
-'portal-url'           => 'Project:सामुदायिक पोर्टल',
-'privacy'              => 'गोपनीयता नीति',
-'privacypage'          => 'Project:गोपनीयता नीति',
+'portal' => 'सामुदायिक पन्ना',
+'portal-url' => 'Project:सामुदायिक पोर्टल',
+'privacy' => 'गोपनीयता नीति',
+'privacypage' => 'Project:गोपनीयता नीति',
 
-'badaccess'        => 'अनुमति त्रुटी',
+'badaccess' => 'अनुमति त्रुटी',
 'badaccess-group0' => 'रउआ जवन कार्रवाई खातिर अनुरोध कईले बानी उ के निष्पादन करे के अनुमति नईखे।',
 
-'ok'                      => 'ठिक',
-'retrievedfrom'           => '"$1" से लियल गईल',
-'youhavenewmessages'      => 'रउआ लगे बा $1 ($2).',
-'newmessageslink'         => 'नया सन्देश',
-'newmessagesdifflink'     => 'अन्तिम परिवर्तन',
+'ok' => 'ठिक',
+'retrievedfrom' => '"$1" से लियल गईल',
+'youhavenewmessages' => 'रउआ लगे बा $1 ($2).',
+'newmessageslink' => 'नया सन्देश',
+'newmessagesdifflink' => 'अन्तिम परिवर्तन',
 'youhavenewmessagesmulti' => 'रउआ लगे $1 पर नया सन्देश बा',
-'editsection'             => 'सम्पादन',
-'editold'                 => 'सम्पादन',
-'viewsourceold'           => 'स्त्रोत देखीं',
-'editlink'                => 'सम्पादन',
-'viewsourcelink'          => 'स्त्रोत देखीं',
-'editsectionhint'         => 'सम्पादन खण्ड: $1',
-'toc'                     => 'सामग्री',
-'showtoc'                 => 'देखाईं',
-'hidetoc'                 => 'छुपाईं',
-'thisisdeleted'           => 'देखीं या भंडार करीं $1?',
-'viewdeleted'             => '$1 देखब?',
-'site-rss-feed'           => '$1 आर एस एस फिड',
-'site-atom-feed'          => '$1 एटम फिड',
-'page-rss-feed'           => '"$1" आर एस एस फिड',
-'page-atom-feed'          => '"$1" एटम फिड',
-'red-link-title'          => '$1 (पन्ना मौजूद नईखे)।',
+'editsection' => 'सम्पादन',
+'editold' => 'सम्पादन',
+'viewsourceold' => 'स्त्रोत देखीं',
+'editlink' => 'सम्पादन',
+'viewsourcelink' => 'स्त्रोत देखीं',
+'editsectionhint' => 'सम्पादन खण्ड: $1',
+'toc' => 'सामग्री',
+'showtoc' => 'देखाईं',
+'hidetoc' => 'छुपाईं',
+'thisisdeleted' => 'देखीं या भंडार करीं $1?',
+'viewdeleted' => '$1 देखब?',
+'site-rss-feed' => '$1 आर एस एस फिड',
+'site-atom-feed' => '$1 एटम फिड',
+'page-rss-feed' => '"$1" आर एस एस फिड',
+'page-atom-feed' => '"$1" एटम फिड',
+'red-link-title' => '$1 (पन्ना मौजूद नईखे)।',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'पन्ना',
-'nstab-user'      => 'प्रयोगकर्ता पन्ना',
-'nstab-media'     => 'मिडीया पन्ना',
-'nstab-special'   => 'विशेष पन्ना',
-'nstab-project'   => 'परियोजना पन्ना',
-'nstab-image'     => 'फाईल',
+'nstab-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'      => 'अईसन कौनो कार्रवाई नाहि',
+'nosuchaction' => 'अईसन कौनो कार्रवाई नाहि',
 'nosuchspecialpage' => 'अईसन कौनो ख़ाश पन्ना नाहि',
 'nospecialpagetext' => '<strong>रउआ एगो अवैद्य विशेष पन्ना के अनुरोध कईले बानी।</strong>
 
 वैद्य विशेष पन्ना के सूची मिल सकत बा [[Special:SpecialPages|{{int:specialpages}}]] पर।',
 
 # General errors
-'error'           => 'त्रुटी',
-'databaseerror'   => 'डेटाबेस त्रुटी',
-'readonly'        => 'डेटाबेस लॉक बा',
+'error' => 'त्रुटी',
+'databaseerror' => 'डेटाबेस त्रुटी',
+'readonly' => 'डेटाबेस लॉक बा',
 'missing-article' => 'डेटाबास ऊ पन्ना के पाठ्य के ना खोज पाईल जौन ई के खोजे के रहल, नामित "$1" $2.
 ई सब साधारणत: निम्नलिखीत अप्रचलित अन्तर अथवा एगो पन्ना पर इतिहास के लिंक जौन मिटा दिहल गईल बा के कारण भईल।
 
 यदि ई बात नईखे, त हो सकत बा सॉफ्टवेयर में बग पावत होखब।
 कृपया ई एगो  [[Special:ListUsers/sysop|प्रबन्धक]] के यू आर एल के बारे में एगो नोट बनाके खबर करीं।',
-'viewsource'      => 'स्त्रोत देखीं',
+'viewsource' => 'स्त्रोत देखीं',
 
 # Login and logout pages
-'yourname'                => 'प्रयोगकर्ता नाम',
-'yourpassword'            => 'गुप्त शब्द',
-'yourpasswordagain'       => 'गुप्त-शब्द पुन:डालीं:',
-'login'                   => 'खाता में प्रवेश',
+'yourname' => 'प्रयोगकर्ता नाम',
+'yourpassword' => 'गुप्त शब्द',
+'yourpasswordagain' => 'गुप्त-शब्द पुन:डालीं:',
+'login' => 'खाता में प्रवेश',
 'nav-login-createaccount' => 'खाता प्रवेश / खाता बनाईं',
-'loginprompt'             => '{{SITENAME}} में प्रवेश खातिर राउर कुकिज चालू होवे के चाहीं',
-'userlogin'               => 'खाता प्रवेश / खाता बनाईं',
-'userloginnocreate'       => 'खाता में प्रवेश',
-'logout'                  => 'खाता से बाहर',
-'userlogout'              => 'खाता से बाहर',
-'notloggedin'             => 'खाता में प्रवेश नईखीं भईल',
-'nologin'                 => 'का एगो खाता नईखे? $1.',
-'nologinlink'             => 'एगो खाता बनाईं',
-'createaccount'           => 'खाता बनाईं',
-'gotaccount'              => 'का पहिले से एगो खाता बा? $1.',
-'gotaccountlink'          => 'खाता में प्रवेश',
-'createaccountmail'       => 'ई-मेल द्वारा',
-'badretype'               => 'रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।',
-'userexists'              => 'ई प्रयोगकर्ता नाम पहिले से इस्तेमाल में बा। कृपया कौनो दोसर नाम चुनीं।',
-'loginerror'              => 'खाता प्रवेश में त्रुटि',
-'createaccounterror'      => 'ई खाता ना बन पाईल: $1',
-'nocookiesnew'            => 'प्रयोगकर्ता खाता त बन गईल, बाँकी रउआ प्रवेश नईखीं भईल।
+'loginprompt' => '{{SITENAME}} में प्रवेश खातिर राउर कुकिज चालू होवे के चाहीं',
+'userlogin' => 'खाता प्रवेश / खाता बनाईं',
+'userloginnocreate' => 'खाता में प्रवेश',
+'logout' => 'खाता से बाहर',
+'userlogout' => 'खाता से बाहर',
+'notloggedin' => 'खाता में प्रवेश नईखीं भईल',
+'nologin' => 'का एगो खाता नईखे? $1.',
+'nologinlink' => 'एगो खाता बनाईं',
+'createaccount' => 'खाता बनाईं',
+'gotaccount' => 'का पहिले से एगो खाता बा? $1.',
+'gotaccountlink' => 'खाता में प्रवेश',
+'createaccountmail' => 'ई-मेल द्वारा',
+'badretype' => 'रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।',
+'userexists' => 'ई प्रयोगकर्ता नाम पहिले से इस्तेमाल में बा। कृपया कौनो दोसर नाम चुनीं।',
+'loginerror' => 'खाता प्रवेश में त्रुटि',
+'createaccounterror' => 'ई खाता ना बन पाईल: $1',
+'nocookiesnew' => 'प्रयोगकर्ता खाता त बन गईल, बाँकी रउआ प्रवेश नईखीं भईल।
 {{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
 राउर कुकिज असक्षम बा।
 कृपया उ के सक्षम करीं, उ के बाद राउर नया प्रयोगकर्ता नाम आ गुप्त शब्द के साथ प्रवेश करीं।',
-'nocookieslogin'          => '{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
+'nocookieslogin' => '{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।
 राउर कुकिज असक्षम बा।
 कृपया उ के सक्षम करीं आ फिर से कोशिश करीं',
-'noname'                  => 'रउआ उपयुक्त प्रयोगकर्ता नाम नईखीं निर्दिष्ट कईले।',
-'loginsuccesstitle'       => 'खाता प्रवेश में सफल',
-'loginsuccess'            => "''' \"\$1\" के रुप में रउआ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''",
-'nosuchuser'              => '"$1" नाम से कौनो प्रयोगकर्ता नईखन।
+'noname' => 'रउआ उपयुक्त प्रयोगकर्ता नाम नईखीं निर्दिष्ट कईले।',
+'loginsuccesstitle' => 'खाता प्रवेश में सफल',
+'loginsuccess' => "''' \"\$1\" के रुप में रउआ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''",
+'nosuchuser' => '"$1" नाम से कौनो प्रयोगकर्ता नईखन।
 प्रयोगकर्ता नाम संवेदनशील मामला बा।
 शब्द-वर्तनी के जाँच करीं, आ चाहे [[Special:UserLogin/signup|एगो नया खाता बनाईं]]।',
-'nosuchusershort'         => 'ई नाम से कौनो प्रयोगकर्ता नईखन "$1".
+'nosuchusershort' => 'ई नाम से कौनो प्रयोगकर्ता नईखन "$1".
 आपन शब्द-वर्तनी के जाँच करीं।',
-'nouserspecified'         => 'रउआ एगो प्रयोगकर्ता नाम निर्दिष्ट करे के बा।',
-'login-userblocked'       => 'ई प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।',
-'wrongpassword'           => 'गलत गुप्त-शब्द डलले बानी।
+'nouserspecified' => 'रउआ एगो प्रयोगकर्ता नाम निर्दिष्ट करे के बा।',
+'login-userblocked' => 'ई प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।',
+'wrongpassword' => 'गलत गुप्त-शब्द डलले बानी।
 कृपया फिर से कोशिश करीं।',
-'wrongpasswordempty'      => 'गुप्त-शब्द खाली बा। कृपया फिर से कोशिश करीं।',
-'passwordtooshort'        => 'गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।',
-'password-name-match'     => 'राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।',
-'mailmypassword'          => 'नया गुप्त-शब्द ई-मेल पर भेजीं',
-'passwordremindertitle'   => '{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द',
+'wrongpasswordempty' => 'गुप्त-शब्द खाली बा। कृपया फिर से कोशिश करीं।',
+'passwordtooshort' => 'गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।',
+'password-name-match' => 'राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।',
+'mailmypassword' => 'नया गुप्त-शब्द ई-मेल पर भेजीं',
+'passwordremindertitle' => '{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द',
 
 # Change password dialog
-'resetpass'   => 'गुप्त-शब्द बदलीं',
+'resetpass' => 'गुप्त-शब्द बदलीं',
 'oldpassword' => 'पुराना गुप्त-शब्द:',
 'newpassword' => 'नया गुप्त-शब्द:',
-'retypenew'   => 'नया गुप्त-शब्द पुन: डालीं:',
+'retypenew' => 'नया गुप्त-शब्द पुन: डालीं:',
 
 # Edit page toolbar
-'bold_tip'        => 'मोट पाठ्य',
-'italic_sample'   => 'इटालिक पाठ्य',
-'italic_tip'      => 'इटालिक पाठ्य',
+'bold_tip' => 'मोट पाठ्य',
+'italic_sample' => 'इटालिक पाठ्य',
+'italic_tip' => 'इटालिक पाठ्य',
 'headline_sample' => 'शिर्षक पाठ्य',
-'image_sample'    => 'उदाहरण.jpg',
-'media_sample'    => 'उदाहरण.ogg',
-'media_tip'       => 'फाईल लिंक',
-'sig_tip'         => 'timestamp के साथ राउर हस्ताक्षर',
+'image_sample' => 'उदाहरण.jpg',
+'media_sample' => 'उदाहरण.ogg',
+'media_tip' => 'फाईल लिंक',
+'sig_tip' => 'timestamp के साथ राउर हस्ताक्षर',
 
 # Edit pages
-'summary'              => 'सारांश:',
-'subject'              => 'विषय/शिर्षक:',
-'minoredit'            => 'छोट परिवर्तन',
-'watchthis'            => 'ई पन्ना ध्यानसूची में डालीं',
-'savearticle'          => 'पन्ना सुरक्षित करीं',
-'preview'              => 'पूर्वावलोकन',
-'showpreview'          => 'पूर्वावलोकन देखाईं',
-'showlivepreview'      => 'सीधा पूर्वावलोकन',
-'showdiff'             => 'परिवर्तन देखाईं',
-'anoneditwarning'      => "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
-'anonpreviewwarning'   => "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
-'missingsummary'       => "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
-'missingcommenttext'   => 'कृपया निचे एगो टिप्पणी करीं।',
+'summary' => 'सारांश:',
+'subject' => 'विषय/शिर्षक:',
+'minoredit' => 'छोट परिवर्तन',
+'watchthis' => 'ई पन्ना ध्यानसूची में डालीं',
+'savearticle' => 'पन्ना सुरक्षित करीं',
+'preview' => 'पूर्वावलोकन',
+'showpreview' => 'पूर्वावलोकन देखाईं',
+'showlivepreview' => 'सीधा पूर्वावलोकन',
+'showdiff' => 'परिवर्तन देखाईं',
+'anoneditwarning' => "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
+'anonpreviewwarning' => "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
+'missingsummary' => "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
+'missingcommenttext' => 'कृपया निचे एगो टिप्पणी करीं।',
 'missingcommentheader' => "'''स्मरणपत्र:''' रउआ ई टिप्पणी खातिर कौनो विषय/शिर्षक प्रदान नईखीं कईले। \"{{int:savearticle}}\" यदि रउआ फिर से सुरक्षित करब त राउर सम्पादन बिना कौनो शिर्षक के सुरक्षित हो जाई।",
-'summary-preview'      => 'सारांश पूर्वावलोकन:',
-'subject-preview'      => 'विषय/शिर्षक पूर्वावलोकन:',
-'blockedtitle'         => 'निष्क्रिय प्रयोगकर्ता',
-'blockednoreason'      => 'कउनो कारण उल्लेखित नईखे',
-'nosuchsectiontitle'   => 'खण्ड ना मिल सकल।',
-'loginreqtitle'        => 'खाता में प्रवेश जरुरी बा',
-'loginreqlink'         => 'खाता में प्रवेश',
-'accmailtitle'         => 'गुप्त-शब्द भेजा गईल',
-'newarticle'           => '(नया)',
-'newarticletext'       => "रउआ एगो अइसन लिंक के पन्ना के अनुसरण कइले बानी जउन अभी तक उपलब्ध नइखे।
+'summary-preview' => 'सारांश पूर्वावलोकन:',
+'subject-preview' => 'विषय/शिर्षक पूर्वावलोकन:',
+'blockedtitle' => 'निष्क्रिय प्रयोगकर्ता',
+'blockednoreason' => 'कउनो कारण उल्लेखित नईखे',
+'nosuchsectiontitle' => 'खण्ड ना मिल सकल।',
+'loginreqtitle' => 'खाता में प्रवेश जरुरी बा',
+'loginreqlink' => 'खाता में प्रवेश',
+'accmailtitle' => 'गुप्त-शब्द भेजा गईल',
+'newarticle' => '(नया)',
+'newarticletext' => "रउआ एगो अइसन लिंक के पन्ना के अनुसरण कइले बानी जउन अभी तक उपलब्ध नइखे।
 पन्ना बनावे खातिर, नीचे के बाकस में टाईप करे के शुरु करीं (ज्यादा जानकारी खातिर देखीं [[{{MediaWiki:Helppage}}|मदद पन्ना]])।
 यदि रउआ अहिजा गलती से आ गईल बानी त, आपन ब्राउजर के '''back''' (बैक) बटन दबाईं",
-'yourdiff'             => 'अंतर',
-'template-protected'   => '(संरक्षित)',
+'yourdiff' => 'अंतर',
+'template-protected' => '(संरक्षित)',
 
 # History pages
-'revisionasof'           => '$1 के रुप में संशोधन',
-'revision-info'          => '$2 में से $1 के रुप में संशोधन',
-'previousrevision'       => '← पुरान संशोधन',
-'nextrevision'           => 'नया संशोधन →',
-'currentrevisionlink'    => 'हाल के संशोधन',
-'cur'                    => 'हाल',
-'next'                   => 'अगिला',
-'last'                   => 'पछिला',
-'page_first'             => 'पहिलका',
-'page_last'              => 'आखिरी',
-'histlegend'             => "चुनाव अन्तर: तुलना करे खातिर संशोधन के रेडियो बटन पर निशान लगाईं आ enter बटन दबाईं आ चाहे निचला बटन दबाईं।<br />
+'revisionasof' => '$1 के रुप में संशोधन',
+'revision-info' => '$2 में से $1 के रुप में संशोधन',
+'previousrevision' => '← पुरान संशोधन',
+'nextrevision' => 'नया संशोधन →',
+'currentrevisionlink' => 'हाल के संशोधन',
+'cur' => 'हाल',
+'next' => 'अगिला',
+'last' => 'पछिला',
+'page_first' => 'पहिलका',
+'page_last' => 'आखिरी',
+'histlegend' => "चुनाव अन्तर: तुलना करे खातिर संशोधन के रेडियो बटन पर निशान लगाईं आ enter बटन दबाईं आ चाहे निचला बटन दबाईं।<br />
 Legend: '''({{int:cur}})''' = हाल के संशोधन के साथ अंतर, '''({{int:last}})''' = पुर्ववर्ती संशोधन के साथ अंतर, '''{{int:minoreditletter}}''' = छोट सम्पादन।",
 'history-fieldset-title' => 'इतिहास निहारीं',
-'history-show-deleted'   => 'खाली मेटावल',
-'histfirst'              => 'बहुत पहिले के',
-'histlast'               => 'हाल के',
-'historysize'            => '({{PLURAL:$1|1 बाइट|$1 बाइट}})',
-'historyempty'           => '(खाली)',
+'history-show-deleted' => 'खाली मेटावल',
+'histfirst' => 'बहुत पहिले के',
+'histlast' => 'हाल के',
+'historysize' => '({{PLURAL:$1|1 बाइट|$1 बाइट}})',
+'historyempty' => '(खाली)',
 
 # Revision feed
-'history-feed-title'          => 'संशोधन इतिहास',
-'history-feed-description'    => 'विकि पर इ पन्ना के संशोधन के इतिहास',
+'history-feed-title' => 'संशोधन इतिहास',
+'history-feed-description' => 'विकि पर इ पन्ना के संशोधन के इतिहास',
 'history-feed-item-nocomment' => '$1 $2 पर',
-'history-feed-empty'          => 'अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।
+'history-feed-empty' => 'अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।
 प्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।',
 
 # Revision deletion
-'rev-deleted-comment'         => '(टिप्पणी मिटा दिहल गईल बा)',
-'rev-deleted-user'            => '(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)',
-'rev-deleted-event'           => '(लॉग कार्रवाई मिटा दिहल गईल बा)',
-'rev-deleted-user-contribs'   => '[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]',
+'rev-deleted-comment' => '(टिप्पणी मिटा दिहल गईल बा)',
+'rev-deleted-user' => '(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)',
+'rev-deleted-event' => '(लॉग कार्रवाई मिटा दिहल गईल बा)',
+'rev-deleted-user-contribs' => '[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]',
 'rev-deleted-text-permission' => "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।
 मेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
-'rev-delundel'                => 'दिखाईं/छुपाईं',
-'revdel-restore'              => 'दूश्यता बदलीं',
-'revdel-restore-deleted'      => 'मिटल संसोधन',
-'revdel-restore-visible'      => 'दृश्यमान संसोधन',
-'pagehist'                    => 'पन्ना के इतिहास',
-'deletedhist'                 => 'मिटावल इतिहास',
+'rev-delundel' => 'दिखाईं/छुपाईं',
+'revdel-restore' => 'दूश्यता बदलीं',
+'revdel-restore-deleted' => 'मिटल संसोधन',
+'revdel-restore-visible' => 'दृश्यमान संसोधन',
+'pagehist' => 'पन्ना के इतिहास',
+'deletedhist' => 'मिटावल इतिहास',
 
 # Merge log
-'revertmerge'      => 'अलग करीं',
+'revertmerge' => 'अलग करीं',
 'mergelogpagetext' => 'एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भईल एगो सूची नीचे दिहल बा।',
 
 # Diffs
-'history-title'            => "''$1'' के संशोधन इतिहास",
-'difference'               => '(संशोधन के बीच अन्तर)',
-'lineno'                   => 'पंक्ति $1:',
-'compareselectedversions'  => 'चुनल गईल संशोधन में अन्तर देखीं',
+'history-title' => "''$1'' के संशोधन इतिहास",
+'lineno' => 'पंक्ति $1:',
+'compareselectedversions' => 'चुनल गईल संशोधन में अन्तर देखीं',
 'showhideselectedversions' => 'चुनल गईल संशोधन दिखाईं/छुपाईं',
-'editundo'                 => 'पूर्ववत',
-'diff-multi'               => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)',
+'editundo' => 'पूर्ववत',
+'diff-multi' => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)',
 
 # Search results
-'searchresults'                    => 'खोज परिणाम',
-'searchresults-title'              => '$1 खातिर खोज परिणाम',
-'searchresulttext'                 => '{{SITENAME}} के खोज करे के बारे में अधिक जानकारी खातिर, देखीं [[{{MediaWiki:Helppage}}| {{int:help}}]]।',
-'searchsubtitle'                   => '\'\'\'[[:$1]]\'\'\' खातिर राउर करल गईल खोज ([[Special:Prefixindex/$1| "$1" से शुरु होवे वाला सब पन्ना]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
-'searchsubtitleinvalid'            => "रउआ '''$1''' खातिर खोज कईनी ह",
-'titlematches'                     => 'पन्ना के शिर्षक मिलत बा।',
-'notitlematches'                   => 'पन्ना के शिर्षक नईखे मिलत',
-'textmatches'                      => 'पन्ना के पाठ्य मिलत बा',
-'notextmatches'                    => 'पन्ना के पाठ्य नईखे मिलत',
-'prevn'                            => 'पिछला {{PLURAL:$1|$1}}',
-'nextn'                            => 'अगला {{PLURAL:$1|$1}}',
-'prevn-title'                      => 'पिछला $1 {{PLURAL:$1|परिणाम}}',
-'nextn-title'                      => 'अगला $1 {{PLURAL:$1|परिणाम}}',
-'shown-title'                      => 'दिखाईं $1 {{PLURAL:$1|परिणाम}}',
-'viewprevnext'                     => 'देखीं ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend'                => 'खोज विकल्प',
-'searchmenu-exists'                => "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''",
-'searchmenu-new'                   => "'''इ विकि पर ''[[:$1]]'' नाम से पन्ना बनाईं'''",
-'searchhelp-url'                   => 'Help:सामग्री',
-'searchmenu-prefix'                => '[[विशेष:उपसर्ग सूची/$1|इ उपसर्ग साथे पन्ना ब्राउज करीं]]',
-'searchprofile-articles'           => 'सामग्री पन्ना',
-'searchprofile-project'            => 'मदद आ परियोजना पन्ना',
-'searchprofile-images'             => 'मल्टिमीडिया',
-'searchprofile-everything'         => 'सब कुछ',
-'searchprofile-advanced'           => 'अग्रिम',
-'searchprofile-articles-tooltip'   => '$1 में खोजीं',
-'searchprofile-project-tooltip'    => '$1 में खोजीं',
-'searchprofile-images-tooltip'     => 'फाईल खातिर खोज',
+'searchresults' => 'खोज परिणाम',
+'searchresults-title' => '$1 खातिर खोज परिणाम',
+'searchresulttext' => '{{SITENAME}} के खोज करे के बारे में अधिक जानकारी खातिर, देखीं [[{{MediaWiki:Helppage}}| {{int:help}}]]।',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' खातिर राउर करल गईल खोज ([[Special:Prefixindex/$1| "$1" से शुरु होवे वाला सब पन्ना]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
+'searchsubtitleinvalid' => "रउआ '''$1''' खातिर खोज कईनी ह",
+'titlematches' => 'पन्ना के शिर्षक मिलत बा।',
+'notitlematches' => 'पन्ना के शिर्षक नईखे मिलत',
+'textmatches' => 'पन्ना के पाठ्य मिलत बा',
+'notextmatches' => 'पन्ना के पाठ्य नईखे मिलत',
+'prevn' => 'पिछला {{PLURAL:$1|$1}}',
+'nextn' => 'अगला {{PLURAL:$1|$1}}',
+'prevn-title' => 'पिछला $1 {{PLURAL:$1|परिणाम}}',
+'nextn-title' => 'अगला $1 {{PLURAL:$1|परिणाम}}',
+'shown-title' => 'दिखाईं $1 {{PLURAL:$1|परिणाम}}',
+'viewprevnext' => 'देखीं ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'खोज विकल्प',
+'searchmenu-exists' => "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''",
+'searchmenu-new' => "'''इ विकि पर ''[[:$1]]'' नाम से पन्ना बनाईं'''",
+'searchhelp-url' => 'Help:सामग्री',
+'searchmenu-prefix' => '[[विशेष:उपसर्ग सूची/$1|इ उपसर्ग साथे पन्ना ब्राउज करीं]]',
+'searchprofile-articles' => 'सामग्री पन्ना',
+'searchprofile-project' => 'मदद आ परियोजना पन्ना',
+'searchprofile-images' => 'मल्टिमीडिया',
+'searchprofile-everything' => 'सब कुछ',
+'searchprofile-advanced' => 'अग्रिम',
+'searchprofile-articles-tooltip' => '$1 में खोजीं',
+'searchprofile-project-tooltip' => '$1 में खोजीं',
+'searchprofile-images-tooltip' => 'फाईल खातिर खोज',
 'searchprofile-everything-tooltip' => 'सभन सामग्री में खोजीं (वार्ता पन्ना सहित)',
-'search-result-size'               => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})',
-'search-result-score'              => 'प्रासंगिकता: $1%',
-'search-redirect'                  => '(पुन: निर्देशण $1)',
-'search-section'                   => '(खंड $1)',
-'search-suggest'                   => 'का राउर मतलब बा: $1',
-'search-interwiki-caption'         => 'बहिन परियोजना',
-'search-interwiki-default'         => '$1 के परिणाम:',
-'search-interwiki-more'            => '(अउर)',
-'search-mwsuggest-enabled'         => 'सुझाव के साथ',
-'search-mwsuggest-disabled'        => 'कौनो सुझाव ना',
-'search-relatedarticle'            => 'संबंधित',
-'mwsuggest-disable'                => 'AJAX सुझाव असक्षम',
-'searcheverything-enable'          => 'सभन सन्दर्भ में खोजीं',
-'searchrelated'                    => 'संबंधित',
-'searchall'                        => 'सब',
-'showingresults'                   => "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
-'showingresultsnum'                => "नीचे देखावल जा रहल बा {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
-'powersearch'                      => 'उन्नत खोज',
-'powersearch-legend'               => 'उन्नत खोज',
-'powersearch-ns'                   => 'सन्दर्भ में खोजीं',
-'powersearch-redir'                => 'पुन:निर्देश सूची',
-'powersearch-field'                => 'खातिर खोज',
-'powersearch-togglelabel'          => 'जाँच:',
-'powersearch-toggleall'            => 'सब',
-'powersearch-togglenone'           => 'कउनो ना',
-'search-external'                  => 'बाहरी खोज',
+'search-result-size' => '$1 ({{PLURAL:$2|1 शब्द|$2 शब्द}})',
+'search-result-score' => 'प्रासंगिकता: $1%',
+'search-redirect' => '(पुन: निर्देशण $1)',
+'search-section' => '(खंड $1)',
+'search-suggest' => 'का राउर मतलब बा: $1',
+'search-interwiki-caption' => 'बहिन परियोजना',
+'search-interwiki-default' => '$1 के परिणाम:',
+'search-interwiki-more' => '(अउर)',
+'search-mwsuggest-enabled' => 'सुझाव के साथ',
+'search-mwsuggest-disabled' => 'कौनो सुझाव ना',
+'search-relatedarticle' => 'संबंधित',
+'mwsuggest-disable' => 'AJAX सुझाव असक्षम',
+'searcheverything-enable' => 'सभन सन्दर्भ में खोजीं',
+'searchrelated' => 'संबंधित',
+'searchall' => 'सब',
+'showingresults' => "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
+'showingresultsnum' => "नीचे देखावल जा रहल बा {{PLURAL:$3|'''1''' परिणाम|'''$3''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
+'powersearch' => 'उन्नत खोज',
+'powersearch-legend' => 'उन्नत खोज',
+'powersearch-ns' => 'सन्दर्भ में खोजीं',
+'powersearch-redir' => 'पुन:निर्देश सूची',
+'powersearch-field' => 'खातिर खोज',
+'powersearch-togglelabel' => 'जाँच:',
+'powersearch-toggleall' => 'सब',
+'powersearch-togglenone' => 'कउनो ना',
+'search-external' => 'बाहरी खोज',
 
 # Quickbar
 'qbsettings-none' => 'कउनो ना',
 
 # Preferences page
-'preferences'    => 'वरीयता',
-'mypreferences'  => 'हमार पसन्द',
-'prefs-edits'    => 'सम्पादन संख्या',
-'prefsnologin'   => 'खाता में प्रवेश नईखीं कईले',
+'preferences' => 'वरीयता',
+'mypreferences' => 'हमार पसन्द',
+'prefs-edits' => 'सम्पादन संख्या',
+'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
 'changepassword' => 'गुप्त शब्द बदलीं',
-'skin-preview'   => 'पूर्वावलोकन',
-'prefs-rc'       => 'तुरंत भईल परिवर्तन',
+'skin-preview' => 'पूर्वावलोकन',
+'prefs-rc' => 'तुरंत भईल परिवर्तन',
 
 # Recent changes
-'recentchanges'                     => 'तुरंत भईल परिवर्तन',
-'rcshowhideminor'                   => '$1 छोट सम्पादन',
-'diff'                              => 'अन्तर',
-'hist'                              => 'इति',
-'hide'                              => 'छुपाँई',
-'show'                              => 'दिखाईं',
-'minoreditletter'                   => 'छो',
-'newpageletter'                     => 'न',
-'boteditletter'                     => 'बो',
+'recentchanges' => 'तुरंत भईल परिवर्तन',
+'rcshowhideminor' => '$1 छोट सम्पादन',
+'diff' => 'अन्तर',
+'hist' => 'इति',
+'hide' => 'छुपाँई',
+'show' => 'दिखाईं',
+'minoreditletter' => 'छो',
+'newpageletter' => 'न',
+'boteditletter' => 'बो',
 'number_of_watching_users_pageview' => '[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]',
 
 # Recent changes linked
-'recentchangeslinked'         => 'सम्बन्धित बदलाव',
-'recentchangeslinked-feed'    => 'सम्बन्धित बदलाव',
+'recentchangeslinked' => 'सम्बन्धित बदलाव',
+'recentchangeslinked-feed' => 'सम्बन्धित बदलाव',
 'recentchangeslinked-toolbox' => 'सम्बन्धित बदलाव',
 
 # Upload
 'upload' => 'फाईल लादीं',
 
 # File description page
-'filehist'                          => 'पन्ना के इतिहास',
-'filehist-deleteall'                => 'सब मिटाईं',
-'filehist-deleteone'                => 'मिटाईं',
-'filehist-current'                  => 'मौजूदा',
-'filehist-datetime'                 => 'तारिख/समय',
-'filehist-thumb'                    => 'थम्बनेल',
-'filehist-nothumb'                  => 'बिन थम्बनेल',
-'filehist-user'                     => 'प्रयोगकर्ता',
-'filehist-dimensions'               => 'आयाम',
-'filehist-filesize'                 => 'फाईल के आकार',
-'filehist-comment'                  => 'टिप्पणी',
-'filehist-missing'                  => 'गायब फाईल',
-'imagelinks'                        => 'फाईल लिंक',
-'nolinkstoimage'                    => 'इ फाईल जोड़े कौनो फाइल लिंक नईखे।',
-'morelinkstoimage'                  => 'इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।',
-'sharedupload'                      => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा।',
-'sharedupload-desc-there'           => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा। अधिक जानकारी खातिर कृपया [$2 फाईल विवरण पन्ना] देखीं।',
-'filepage-nofile'                   => 'इ नाम से कौनो फाईल उपलब्ध नईखे।',
-'filepage-nofile-link'              => 'इ नाम से कौनो फाईल उपलब्ध नईखे, लेकिन रउआ [$1 के लाद] सकत बानी।',
-'uploadnewversion-linktext'         => 'इ फाईल के नया संस्करण लादीं।',
-'shared-repo-from'                  => '$1 से',
-'shared-repo'                       => 'एगो आवटिंत भंडार गृह',
+'filehist' => 'पन्ना के इतिहास',
+'filehist-deleteall' => 'सब मिटाईं',
+'filehist-deleteone' => 'मिटाईं',
+'filehist-current' => 'मौजूदा',
+'filehist-datetime' => 'तारिख/समय',
+'filehist-thumb' => 'थम्बनेल',
+'filehist-nothumb' => 'बिन थम्बनेल',
+'filehist-user' => 'प्रयोगकर्ता',
+'filehist-dimensions' => 'आयाम',
+'filehist-filesize' => 'फाईल के आकार',
+'filehist-comment' => 'टिप्पणी',
+'filehist-missing' => 'गायब फाईल',
+'imagelinks' => 'फाईल लिंक',
+'nolinkstoimage' => 'इ फाईल जोड़े कौनो फाइल लिंक नईखे।',
+'morelinkstoimage' => 'इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।',
+'sharedupload' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा।',
+'sharedupload-desc-there' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा। अधिक जानकारी खातिर कृपया [$2 फाईल विवरण पन्ना] देखीं।',
+'filepage-nofile' => 'इ नाम से कौनो फाईल उपलब्ध नईखे।',
+'filepage-nofile-link' => 'इ नाम से कौनो फाईल उपलब्ध नईखे, लेकिन रउआ [$1 के लाद] सकत बानी।',
+'uploadnewversion-linktext' => 'इ फाईल के नया संस्करण लादीं।',
+'shared-repo-from' => '$1 से',
+'shared-repo' => 'एगो आवटिंत भंडार गृह',
 'shared-repo-name-wikimediacommons' => 'विकिमीडिया कॉमन्स',
 
 # File reversion
-'filerevert'         => 'पुन: निर्देशित $1',
-'filerevert-legend'  => 'पुन: निर्देशित फाईल',
+'filerevert' => 'पुन: निर्देशित $1',
+'filerevert-legend' => 'पुन: निर्देशित फाईल',
 'filerevert-comment' => 'कारण:',
 
 # File deletion
-'filedelete'         => '$1 के मिटाईं',
-'filedelete-legend'  => 'फाईल के मिटाईं',
+'filedelete' => '$1 के मिटाईं',
+'filedelete-legend' => 'फाईल के मिटाईं',
 'filedelete-comment' => 'कारण:',
-'filedelete-submit'  => 'मिटाईं',
+'filedelete-submit' => 'मिटाईं',
 'filedelete-success' => "'''$1''' के मिटा दिहल गईल बा।",
-'filedelete-nofile'  => "'''$1''' उपलब्ध नईखे।",
+'filedelete-nofile' => "'''$1''' उपलब्ध नईखे।",
 
 # Random page
 'randompage' => 'अविशिष्ट पन्ना',
 
 # Miscellaneous special pages
-'nbytes'       => '$1 {{PLURAL:$1|बाईट|बाईट्स}}',
-'move'         => 'स्थान्तरण',
+'nbytes' => '$1 {{PLURAL:$1|बाईट|बाईट्स}}',
+'move' => 'स्थान्तरण',
 'movethispage' => 'ई पन्ना के स्थांतरण करीं',
 
 # Book sources
@@ -568,123 +567,123 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'emailuser' => 'ई प्रयोगकर्ता के ईमेल करीं',
 
 # Watchlist
-'watchlist'     => 'हमार ध्यानसूची',
-'mywatchlist'   => 'हमार ध्यानसूची',
-'watch'         => 'ध्यानसूची में डालीं',
+'watchlist' => 'हमार ध्यानसूची',
+'mywatchlist' => 'हमार ध्यानसूची',
+'watch' => 'ध्यानसूची में डालीं',
 'watchthispage' => 'ई पन्ना ध्यानसूची में डालीं',
-'unwatch'       => 'ध्यानसूची से हटाईं',
+'unwatch' => 'ध्यानसूची से हटाईं',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'ध्यानसूची में जाते हुए',
+'watching' => 'ध्यानसूची में जाते हुए',
 'unwatching' => 'ध्यानसूची से हटते हुए',
 
 'enotif_newpagetext' => 'इ एगो नया पन्ना ह',
-'created'            => 'बनावल गईल',
+'created' => 'बनावल गईल',
 
 # Undelete
 'undeletelink' => 'देखीं/बहाल करीं',
 
 # Namespace form on various pages
-'namespace'      => 'सन्दर्भ',
-'invert'         => 'चयनित पलटीं',
+'namespace' => 'सन्दर्भ',
+'invert' => 'चयनित पलटीं',
 'blanknamespace' => '(मुख्य)',
 
 # Contributions
-'contributions'       => 'प्रयोगकर्ता योगदान',
+'contributions' => 'प्रयोगकर्ता योगदान',
 'contributions-title' => ' $1 खातिर प्रयोगकर्ता योगदान',
-'mycontris'           => 'हमार योगदान',
-'nocontribs'          => 'ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।',
-'uctop'               => '(शीर्ष)',
-'month'               => 'महिना से (आ उ से पहिले):',
-'year'                => 'साल से (आ उ से पहिले):',
-
-'sp-contributions-newbies'        => 'खाली नया खाता के योगदान देखीं।',
-'sp-contributions-newbies-sub'    => 'नया खाता खातिर',
-'sp-contributions-newbies-title'  => 'नया खाता खातिर प्रयोगकर्ता के योगदान।',
-'sp-contributions-blocklog'       => 'निष्क्रीय खाता',
-'sp-contributions-deleted'        => 'नष्ट प्रयोगकर्ता के योगदान।',
-'sp-contributions-logs'           => 'लौग',
-'sp-contributions-talk'           => 'बात-चीत',
-'sp-contributions-userrights'     => 'प्रयोगकर्ता अधिकार प्रबन्धन',
+'mycontris' => 'हमार योगदान',
+'nocontribs' => 'ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।',
+'uctop' => '(शीर्ष)',
+'month' => 'महिना से (आ उ से पहिले):',
+'year' => 'साल से (आ उ से पहिले):',
+
+'sp-contributions-newbies' => 'खाली नया खाता के योगदान देखीं।',
+'sp-contributions-newbies-sub' => 'नया खाता खातिर',
+'sp-contributions-newbies-title' => 'नया खाता खातिर प्रयोगकर्ता के योगदान।',
+'sp-contributions-blocklog' => 'निष्क्रीय खाता',
+'sp-contributions-deleted' => 'नष्ट प्रयोगकर्ता के योगदान।',
+'sp-contributions-logs' => 'लौग',
+'sp-contributions-talk' => 'बात-चीत',
+'sp-contributions-userrights' => 'प्रयोगकर्ता अधिकार प्रबन्धन',
 'sp-contributions-blocked-notice' => 'ई प्रयोगकर्ता के ई समय निष्क्रीय करल गईल बा।
 नविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:',
 
 # What links here
-'whatlinkshere'            => 'अहिजा का जुड़ी',
-'whatlinkshere-title'      => 'पन्ना जौन "$1" से जुड़ेला',
-'whatlinkshere-page'       => 'पन्ना:',
-'linkshere'                => "नीचे के सब पन्ना '''[[:$1]]''' से जुड़ेला:",
-'nolinkshere'              => "'''[[:$1]]''' से कौनो पन्ना नईखे जुड़ल।",
-'nolinkshere-ns'           => "चुनल गईल सन्दर्भ में '''[[:$1]]''' से कौनो पन्ना ना जुड़ेला।",
-'isredirect'               => 'पुन: निर्दिष्ट पन्ना',
-'isimage'                  => 'तस्वीर लिंक',
-'whatlinkshere-prev'       => '{{PLURAL:$1|पिछला|पिछला $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|अगला|अगला $1}}',
-'whatlinkshere-links'      => '← लिंक',
+'whatlinkshere' => 'अहिजा का जुड़ी',
+'whatlinkshere-title' => 'पन्ना जौन "$1" से जुड़ेला',
+'whatlinkshere-page' => 'पन्ना:',
+'linkshere' => "नीचे के सब पन्ना '''[[:$1]]''' से जुड़ेला:",
+'nolinkshere' => "'''[[:$1]]''' से कौनो पन्ना नईखे जुड़ल।",
+'nolinkshere-ns' => "चुनल गईल सन्दर्भ में '''[[:$1]]''' से कौनो पन्ना ना जुड़ेला।",
+'isredirect' => 'पुन: निर्दिष्ट पन्ना',
+'isimage' => 'तस्वीर लिंक',
+'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछला $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगला $1}}',
+'whatlinkshere-links' => '← लिंक',
 'whatlinkshere-hideredirs' => '$1 पुन: निर्देशित',
-'whatlinkshere-hidelinks'  => '$1 लिंक',
+'whatlinkshere-hidelinks' => '$1 लिंक',
 'whatlinkshere-hideimages' => '$1 तस्वीर लिंक',
-'whatlinkshere-filters'    => 'फिल्टर',
+'whatlinkshere-filters' => 'फिल्टर',
 
 # Block/unblock
-'blockip'          => 'प्रतिबंधित प्रयोगकर्ता',
-'blocklink'        => 'निष्क्रिय',
-'unblocklink'      => 'ताला खोलीं',
+'blockip' => 'प्रतिबंधित प्रयोगकर्ता',
+'blocklink' => 'निष्क्रिय',
+'unblocklink' => 'ताला खोलीं',
 'change-blocklink' => 'ब्लॉक बदलीं',
-'contribslink'     => 'योगदान',
-'blocklogpage'     => 'निष्क्रिय खाता',
+'contribslink' => 'योगदान',
+'blocklogpage' => 'निष्क्रिय खाता',
 
 # Move page
 'movepagebtn' => 'पन्ना स्थांतरण करीं',
-'revertmove'  => 'पिछलका स्थिति',
+'revertmove' => 'पिछलका स्थिति',
 
 # Thumbnails
 'thumbnail-more' => 'बढ़ाईं',
-'filemissing'    => 'फाईल गायब',
+'filemissing' => 'फाईल गायब',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'राउर प्रयोगकर्ता पन्ना',
-'tooltip-pt-mytalk'              => 'राउर वार्ता पन्ना',
-'tooltip-pt-preferences'         => 'राउर पसन्द',
-'tooltip-pt-mycontris'           => 'राउर योगदान के सूची',
-'tooltip-pt-login'               => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
-'tooltip-pt-anonlogin'           => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
-'tooltip-pt-logout'              => 'खाता से बाहर',
-'tooltip-ca-talk'                => 'सामग्री पन्ना के बारे में बात-चीत',
-'tooltip-ca-edit'                => 'रउआ ई पन्ना के सम्पादन कर सकत बानी। कृपया पन्ना सुरक्षित करे से पहिले पूर्वावलोकन बटन के इस्तेमाल करीं।',
-'tooltip-ca-addsection'          => 'एगो नया खण्ड शुरु करीं',
-'tooltip-ca-viewsource'          => 'इ पन्ना के संरक्षित कर दिहल गईल बा। रऊआ एकर मूल देख सकत बानी।',
-'tooltip-ca-history'             => 'ई पन्ना के पिछला संशोधन',
-'tooltip-ca-protect'             => 'इ पन्ना के संरक्षित करीं।',
-'tooltip-ca-unprotect'           => 'इ पन्ना के संरक्षण हटाईं।',
-'tooltip-ca-delete'              => 'ई पन्ना मिटाईं',
-'tooltip-ca-move'                => 'ई पन्ना के स्थांतरण करीं',
-'tooltip-ca-watch'               => 'इ पन्ना के आपन ध्यानसूची में डालीं',
-'tooltip-search'                 => '{{SITENAME}} खोजीं',
-'tooltip-search-go'              => 'यदि पन्ना मौजूद होई त ईहे सटीक नाम के साथ उ पन्ना पर जाईं',
-'tooltip-search-fulltext'        => 'ई पाठ्य खातिर पन्ना खोजीं',
-'tooltip-p-logo'                 => 'मुख्य पन्ना पर जाईं',
-'tooltip-n-mainpage'             => 'मुख्य पन्ना पर जाईं',
+'tooltip-pt-userpage' => 'राउर प्रयोगकर्ता पन्ना',
+'tooltip-pt-mytalk' => 'राउर वार्ता पन्ना',
+'tooltip-pt-preferences' => 'राउर पसन्द',
+'tooltip-pt-mycontris' => 'राउर योगदान के सूची',
+'tooltip-pt-login' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
+'tooltip-pt-anonlogin' => 'रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाँकि ई अनिवार्य नईखे',
+'tooltip-pt-logout' => 'खाता से बाहर',
+'tooltip-ca-talk' => 'सामग्री पन्ना के बारे में बात-चीत',
+'tooltip-ca-edit' => 'रउआ ई पन्ना के सम्पादन कर सकत बानी। कृपया पन्ना सुरक्षित करे से पहिले पूर्वावलोकन बटन के इस्तेमाल करीं।',
+'tooltip-ca-addsection' => 'एगो नया खण्ड शुरु करीं',
+'tooltip-ca-viewsource' => 'इ पन्ना के संरक्षित कर दिहल गईल बा। रऊआ एकर मूल देख सकत बानी।',
+'tooltip-ca-history' => 'ई पन्ना के पिछला संशोधन',
+'tooltip-ca-protect' => 'इ पन्ना के संरक्षित करीं।',
+'tooltip-ca-unprotect' => 'इ पन्ना के संरक्षण हटाईं।',
+'tooltip-ca-delete' => 'ई पन्ना मिटाईं',
+'tooltip-ca-move' => 'ई पन्ना के स्थांतरण करीं',
+'tooltip-ca-watch' => 'इ पन्ना के आपन ध्यानसूची में डालीं',
+'tooltip-search' => '{{SITENAME}} खोजीं',
+'tooltip-search-go' => 'यदि पन्ना मौजूद होई त ईहे सटीक नाम के साथ उ पन्ना पर जाईं',
+'tooltip-search-fulltext' => 'ई पाठ्य खातिर पन्ना खोजीं',
+'tooltip-p-logo' => 'मुख्य पन्ना पर जाईं',
+'tooltip-n-mainpage' => 'मुख्य पन्ना पर जाईं',
 'tooltip-n-mainpage-description' => 'मुख्य पन्ना पर पधारीं',
-'tooltip-n-portal'               => 'परियोजना के बारे मेँ, रउआ का कर सकत बानी, वस्तु कहाँ खोजब',
-'tooltip-n-currentevents'        => 'वर्तमान के घटना पर पृष्ठभूमी जानकारी खोजीं',
-'tooltip-n-recentchanges'        => 'विकि पर तुरंत भईल परिवर्तन के सूची',
-'tooltip-n-randompage'           => 'बेतरतिब पन्ना लादीं (Load करीं)',
-'tooltip-n-help'                 => 'जगह पता लगावे खातिर',
-'tooltip-t-whatlinkshere'        => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
-'tooltip-t-recentchangeslinked'  => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
-'tooltip-t-upload'               => 'फाईल लादीं (अपलोड )',
-'tooltip-t-specialpages'         => 'ख़ाश पन्नवन के सूची',
-'tooltip-t-print'                => 'ई पन्ना के छापे लायक संस्करण।',
-'tooltip-t-permalink'            => 'ई पन्ना के संसोधन खातिर स्थायी लिंक।',
-'tooltip-ca-nstab-main'          => 'सामग्री पन्ना देखीं',
-'tooltip-ca-nstab-special'       => 'ई एगो ख़ाश पन्ना ह, रउआ ई पन्ना के सम्पादन नईखीं कर सकत',
-'tooltip-save'                   => 'आपन बदलाव के सुरक्षित करीं',
+'tooltip-n-portal' => 'परियोजना के बारे मेँ, रउआ का कर सकत बानी, वस्तु कहाँ खोजब',
+'tooltip-n-currentevents' => 'वर्तमान के घटना पर पृष्ठभूमी जानकारी खोजीं',
+'tooltip-n-recentchanges' => 'विकि पर तुरंत भईल परिवर्तन के सूची',
+'tooltip-n-randompage' => 'बेतरतिब पन्ना लादीं (Load करीं)',
+'tooltip-n-help' => 'जगह पता लगावे खातिर',
+'tooltip-t-whatlinkshere' => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
+'tooltip-t-recentchangeslinked' => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
+'tooltip-t-upload' => 'फाईल लादीं (अपलोड )',
+'tooltip-t-specialpages' => 'ख़ाश पन्नवन के सूची',
+'tooltip-t-print' => 'ई पन्ना के छापे लायक संस्करण।',
+'tooltip-t-permalink' => 'ई पन्ना के संसोधन खातिर स्थायी लिंक।',
+'tooltip-ca-nstab-main' => 'सामग्री पन्ना देखीं',
+'tooltip-ca-nstab-special' => 'ई एगो ख़ाश पन्ना ह, रउआ ई पन्ना के सम्पादन नईखीं कर सकत',
+'tooltip-save' => 'आपन बदलाव के सुरक्षित करीं',
 
 # Media information
-'file-nohires'         => ' उच्च गुणवत्ता उपलब्ध नईखे।',
-'svg-long-desc'        => 'एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3',
-'show-big-image'       => 'पुरा गुणवत्ता',
+'file-nohires' => ' उच्च गुणवत्ता उपलब्ध नईखे।',
+'svg-long-desc' => 'एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3',
+'show-big-image' => 'पुरा गुणवत्ता',
 'file-info-gif-looped' => 'लूप्ड',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|फ्रेम}}',
 'file-info-png-looped' => 'लूप्ड',
@@ -696,29 +695,29 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 कोई भी बाद वाला लिंक ओही पंक्ति पर अईला पर उ के अपवाद मानल जाई, अर्थात जौन पन्ना पर फाईल इनलाईन हो सकत बा।',
 
 # Metadata
-'metadata'          => 'मेटाडाटा',
-'metadata-help'     => 'इ फाईल में अतिरिक्त जानकारी उपलब्ध बा, हो सकत बा कि इ डिजीटल कैमरा या स्कैनर से लेवल गईल होखे। यदि इ फाईल एकर मूल फाईल में से संशोधित करल गईल बा त कुछ जानकारी उजागर ना हो सकी।',
-'metadata-expand'   => 'विस्तृत विवरण देखाईं',
+'metadata' => 'मेटाडाटा',
+'metadata-help' => 'इ फाईल में अतिरिक्त जानकारी उपलब्ध बा, हो सकत बा कि इ डिजीटल कैमरा या स्कैनर से लेवल गईल होखे। यदि इ फाईल एकर मूल फाईल में से संशोधित करल गईल बा त कुछ जानकारी उजागर ना हो सकी।',
+'metadata-expand' => 'विस्तृत विवरण देखाईं',
 'metadata-collapse' => 'विस्तृत विवरण छुपाँईं',
 
 # EXIF tags
-'exif-imagewidth'                  => 'चौड़ाई',
-'exif-imagelength'                 => 'ऊँचाई',
-'exif-bitspersample'               => 'अवयव प्रति बीट',
-'exif-compression'                 => 'सम्पीड़न प्रणाली',
-'exif-photometricinterpretation'   => 'पिक्सल रचना',
-'exif-orientation'                 => 'अभिसंस्करण',
-'exif-samplesperpixel'             => 'अवयवन के संख्या',
-'exif-planarconfiguration'         => 'डेटा प्रबन्धन',
-'exif-xresolution'                 => 'क्षैतिज समाधान',
-'exif-yresolution'                 => 'लम्बवत समाधान',
-'exif-stripoffsets'                => 'चित्र डेटा के स्थिती',
+'exif-imagewidth' => 'चौड़ाई',
+'exif-imagelength' => 'ऊँचाई',
+'exif-bitspersample' => 'अवयव प्रति बीट',
+'exif-compression' => 'सम्पीड़न प्रणाली',
+'exif-photometricinterpretation' => 'पिक्सल रचना',
+'exif-orientation' => 'अभिसंस्करण',
+'exif-samplesperpixel' => 'अवयवन के संख्या',
+'exif-planarconfiguration' => 'डेटा प्रबन्धन',
+'exif-xresolution' => 'क्षैतिज समाधान',
+'exif-yresolution' => 'लम्बवत समाधान',
+'exif-stripoffsets' => 'चित्र डेटा के स्थिती',
 'exif-jpeginterchangeformatlength' => 'JPEG डेटा के बाइट',
 
 # 'all' in various places, this might be different for inflected languages
 'namespacesall' => 'सब',
-'monthsall'     => 'सब',
-'limitall'      => 'सब',
+'monthsall' => 'सब',
+'limitall' => 'सब',
 
 # E-mail address confirmation
 'confirmemail' => 'इ-मेल पता कन्फर्म करीं',
@@ -727,7 +726,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'specialpages' => 'ख़ाश पन्ना',
 
 # New logging system
-'revdelete-restricted'   => 'प्रबंधक पर प्रतिबंध लागू',
+'revdelete-restricted' => 'प्रबंधक पर प्रतिबंध लागू',
 'revdelete-unrestricted' => 'प्रबंधक पर से प्रतिबंध समाप्त',
 
 );
index 35aade9..703078b 100644 (file)
@@ -170,11 +170,11 @@ $messages = array(
 'category-empty' => '"Kada tadapat artikal maupun média dalam tumbung ini."',
 'hidden-categories' => '{{PLURAL:$1|Tumbung tasungkup|Tutumbung tasungkup}}',
 'hidden-category-category' => 'Tumbung tasungkup',
-'category-subcat-count' => '{{PLURAL:$2|Tumbung ini baisi asa sub-tumbung barikut.|Tumbung ini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut, matan sabarataan $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|Tumbung ngini baisi asa sub-tumbung barikut.|Tumbung ngini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut, matan sabarataan $2.}}',
 'category-subcat-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut.',
-'category-article-count' => '{{PLURAL:$2|Tumbung ni baisi asa tungkaran barikut haja.|Tutumbung ini baisi {{PLURAL:$1|tungkaran|$1 tutungkaran}}, matan $2 sabarataan.}}',
+'category-article-count' => '{{PLURAL:$2|Tumbung ni baisi asa tungkaran barikut haja.|Tutumbung ngini baisi {{PLURAL:$1|tungkaran|$1 tutungkaran}}, matan $2 sabarataan.}}',
 'category-article-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|asa tungkaran|$1 tutungkaran}} barikut.',
-'category-file-count' => '{{PLURAL:$2|Tumbung ini hanya baisi asa barakas barikut.|Tumbung ini baisi {{PLURAL:$1|barakas|$1 babarakas}} barikut, matan $2 sabarataan.}}',
+'category-file-count' => '{{PLURAL:$2|Tumbung ngini hanya baisi asa barakas barikut.|Tumbung ngini baisi {{PLURAL:$1|barakas|$1 babarakas}} barikut, matan $2 sabarataan.}}',
 'category-file-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|barakas|$1 barakas}} barikut.',
 'listingcontinuesabbrev' => 'samb.',
 'index-category' => 'Tungkaran tasusun bapadalakan kata',
@@ -269,7 +269,7 @@ $messages = array(
 'otherlanguages' => 'Dalam bahasa lain',
 'redirectedfrom' => '(Diugahakan matan $1)',
 'redirectpagesub' => 'Tungkaran paugahan',
-'lastmodifiedat' => 'Tungkaran ini tauncit diubah pada $1, $2.',
+'lastmodifiedat' => 'Tungkaran ngini tauncit diubah pada $1, $2.',
 'viewcount' => 'Tungkaran ini sudah diungkai {{PLURAL:$1|kali|$1 kali}}.',
 'protectedpage' => 'Tungkaran nang dilindungi',
 'jumpto' => 'Malacung ka',
@@ -359,7 +359,7 @@ Lihati [[Special:Version|Tungkaran mudil]]',
 'nosuchaction' => 'Kadada palakuan nangkaitu',
 'nosuchactiontext' => 'Palakuan nang diminta URL kada sah.
 Pian pinanya salah katik URL, atawa maumpati sabuah tautan nang kada bujur.
-Ini jua bisa ai ada bug di parangkat lunak nang dipuruk {{SITENAME}}.',
+Ngini jua bisa ai ada bug di parangkat lunak nang dipuruk {{SITENAME}}.',
 'nosuchspecialpage' => 'Kadada tungkaran istimiwa nangitu',
 'nospecialpagetext' => '<strong>Pian maminta tungkaran istimiwa nang kada sah.</strong>
 Daptar tungkaran istimiwa sah kawa diugai pada [[Special:SpecialPages|{{int:specialpages}}]].',
@@ -368,7 +368,7 @@ Daptar tungkaran istimiwa sah kawa diugai pada [[Special:SpecialPages|{{int:spec
 'error' => 'Kasalahan',
 'databaseerror' => 'Kasalahan Basisdata',
 'dberrortext' => 'Ada kasalahan sintaks pada parmintaan basisdata.
-Kasalahan ini pina manandai adanya sabuah bug dalam parangkat lunak.
+Kasalahan ngini pina manandai adanya sabuah bug dalam parangkat lunak.
 Parmintaan basisdata yang tadudi adalah:
 <blockquote><tt>$1</tt></blockquote>
 matan dalam pungsi "<tt>$2</tt>".
@@ -378,7 +378,7 @@ Parmintaan basisdata nang tadudi adalah:
 "$1"
 matan dalam pungsi "$2".
 Basisdata kasalahan  babulik "$3: $4".',
-'laggedslavemode' => "'''Paringatan:''' Tungkaran ini pinanya kada baisi parubahan tahanyar.",
+'laggedslavemode' => "'''Paringatan:''' Tungkaran ngini pinanya kada baisi parubahan tahanyar.",
 'readonly' => 'Basisdata tasunduk',
 'enterlockreason' => 'Buati sabuah alasan manyunduk, tamasuk jua wayah apa handak dibuka pulang sundukannya.',
 'readonlytext' => 'Basisdata lagi basunduk hagan masukan hanyar wan parubahan lain, pinanya pang lagi ada jadwal paharaguan basis data, imbah ini akan babulik nangkaya biasa.
@@ -388,8 +388,8 @@ Pambakal nang manyunduk mamadahi nangkaini: $1',
 
 Nangkaini biasanya dimargakan tautan lawas ka sabuah tungkaran nang halamnya sudah dihapus.
 
-Munnya lainan ini pasalnya, Pian mungkin batamu bug dalam perangkat lunak.
-Silakan lapurakan ini ka saurang [[Special:ListUsers/sysop|pambakal]], ulah catatan URL nang ditulaki',
+Munnya lainan ngini pasalnya, Pian mungkin batamu bug dalam perangkat lunak.
+Silakan lapurakan ngini ka saurang [[Special:ListUsers/sysop|pambakal]], ulah catatan URL nang ditulaki',
 'missingarticle-rev' => '(ralatan#: $1)',
 'missingarticle-diff' => '(Lain: $1, $2)',
 'readonly_lag' => 'Basisdata sudah utumatis tasunduk pas server basisdata dua lagi marungkuti basisdata tatambaian',
@@ -405,29 +405,29 @@ Silakan lapurakan ini ka saurang [[Special:ListUsers/sysop|pambakal]], ulah cata
 'fileexistserror' => 'Kada kawa manulis ka barakas "$1": barakas sudah ada',
 'unexpected' => 'Nilai kada sasuai harapan: "$1"="$2".',
 'formerror' => 'Kasalahan: kada kawa mangirim purmulir',
-'badarticleerror' => 'Palakuan ini kada kawa dicungulakan pada tungkaran ini.',
+'badarticleerror' => 'Palakuan ngini kada kawa dicungulakan pada tungkaran ngini.',
 'cannotdelete' => "Tungkaran atawa barakas ''$1'' kada kawa dihapus. Pinanya sudah dihapus urang lain badahulu.",
 'cannotdelete-title' => 'Kada kawa mahapus tungkaran "$1"',
 'badtitle' => 'Judul buruk',
 'badtitletext' => 'Judul tungkaran nang diminta kada sah, kada baisi, atawa kada pasnya tautan judul antar-bahasa atawa antar-wiki.
 Nangini bisa baisi satu atawa labih hurup nang saharusnya kadada di judul.',
 'perfcached' => 'Data barikut adalah timbuluk wan pina kada mutakhir. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Data nang dudi ini adalah timbuluk, wan tauncit dihahanyari pada $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
-'querypage-no-updates' => 'Pamugaan matan tungkaran ini rahat dipajahkan. Data nang ada di sia wayahini kada akan dimuat ulang.',
+'perfcachedts' => 'Data nang dudi ni adalah timbuluk, wan tauncit dihahanyari pada $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'querypage-no-updates' => 'Pamugaan matan tungkaran ngini rahat dipajahkan. Data nang ada di sia wayahini kada akan dimuat ulang.',
 'wrong_wfQuery_params' => 'Kada bujur ukuran ka wfQuery ()<br />
 Pungsi: $1<br />
 Parmintaan: $2',
 'viewsource' => 'Tiringi asal mulanya',
 'viewsource-title' => 'Tiringi asalmula matan $1',
 'actionthrottled' => 'Kalakuan dikiripi',
-'actionthrottledtext' => 'Sawagai sabuah takaran anti-spam, Pian dibabatasi hagan balalaku kababanyakan dalam parhatan handap, wan Pian sudah limpuari batasan ini.
+'actionthrottledtext' => 'Sawagai sabuah takaran anti-spam, Pian dibabatasi hagan balalaku kababanyakan dalam parhatan handap, wan Pian sudah limpuari batasan ngini.
 Muhun cubai pulang dalam babarapa minit.',
-'protectedpagetext' => 'Tungkaran ini sudah dilindungi hagan mancagah babakan.',
-'viewsourcetext' => 'Pian kawa maniringi wan manyalin asal mula tungkaran ini:',
+'protectedpagetext' => 'Tungkaran ngini sudah dilindungi hagan mancagah babakan.',
+'viewsourcetext' => 'Pian kawa maniringi wan manyalin asal mula tungkaran ngini:',
 'viewyourtext' => "Pian kawa maniringi wan salain asalmula matan '''babakan pian''' ka tungkaran ngini:",
 'protectedinterface' => 'Tungkaran ini manyadiakan naskah antarmuha gasan parangkat lunak, wan dilindungi hagan mancagah tasalah puruk.',
 'editinginterface' => "'''Paringatan:''' Pian mambabak sabuah tungkaran nang dipuruk hagan manyadiakan naskah antarmuha gasan parangkat lunak.
-Parubahan ka tungkaran ini akan bapangaruh matan tampaian antarmuha gasan pamakai lain.
+Parubahan ka tungkaran ngini akan bapangaruh matan tampaian antarmuha gasan pamakai lain.
 Gasan tarjamahan, muhun puruk [//translatewiki.net/wiki/Main_Page?setlang=bjn translatewiki.net], rangka gawian palokalan MediaWiki.",
 'sqlhidden' => '(Parmintaan SQL disungkupakan)',
 'cascadeprotected' => 'Tungkaran ini sudah dilindungi matan pambabakan, marga nangini tamasuk dalam {{PLURAL:$1|tungkaran|tutungkaran}} dudi nang dilindungi "barénténg": $2',
@@ -435,7 +435,7 @@ Gasan tarjamahan, muhun puruk [//translatewiki.net/wiki/Main_Page?setlang=bjn tr
 'customcssprotected' => 'Pian kada baisi ijin mambabak tungkaran CSS ngini, karana ngini baisi setelan paribadi pamakai lain.',
 'customjsprotected' => 'Pian kada baisi ijin mambabak tungkaran JavaScript ngini, karana ngini baisi setelan paribadi pamakai lain.',
 'ns-specialprotected' => 'Tungkaran istimiwa kada kawa dibabak.',
-'titleprotected' => "Judul ini dilindungi matan paulahan ulih [[User:$1|$1]].
+'titleprotected' => "Judul ngini dilindungi matan paulahan ulih [[User:$1|$1]].
 Alasan nang dibariakan adalah ''$2''.",
 
 # Virus scanner
@@ -444,7 +444,7 @@ Alasan nang dibariakan adalah ''$2''.",
 'virus-unknownscanner' => 'Antivirus kada dipinandui:',
 
 # Login and logout pages
-'logouttext' => "'''Pian parhatan ini sudah kaluar log.'''
+'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.
 Catatan bahwasa babarapa tungkaran pinanya masih ha tarus manampaiakan Pian masih babuat log, sampai Pian mahabisakan timbuluk panjalajah web Pian.",
@@ -490,7 +490,7 @@ Muhun kawa'akan nang itu wan cubai pulang.",
 Yakinakan Pian hudah mangkawa-akan cookies, muat pulang tungkaran naya wan cubai ja lagi.",
 'noname' => 'Ngaran pamakai nang Pian ajuakan kada sah.',
 'loginsuccesstitle' => 'Kulihan babuat log',
-'loginsuccess' => "'''Pian parhatan ini babuat log dalam {{SITENAME}} sawagai \"\$1\".'''",
+'loginsuccess' => "'''Pian parhatan ni babuat log dalam {{SITENAME}} sawagai \"\$1\".'''",
 'nosuchuser' => 'Kadada pamakai bangaran "$1".
 Ngaran pamakai adalah kasus marinci.
 Lihati pulang ijaan Pian, atawa [[Special:UserLogin/signup|ulah sabuting akun hanyar]]',
@@ -507,9 +507,9 @@ Muhun cubai pulang.',
 'password-login-forbidden' => 'Mamakai ngaran wan katasunduk nangini hudah ditangati.',
 'mailmypassword' => 'Kirimi kata sunduk hanyar',
 'passwordremindertitle' => 'Kata sunduk pahadangan gasan {{SITENAME}}',
-'passwordremindertext' => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting katasunduk hanyar gasan {{SITENAME}} ($4). Sabuting katasunduk pahadangan gasan pamakai "$2" hudah diulah wan disetel ka "$3". Amun bujur Pian nang maminta, Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Katasunduk pahadangan Pian akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
+'passwordremindertext' => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting katasunduk hanyar gasan {{SITENAME}} ($4). Sabuting katasunduk pahadangan gasan pamakai "$2" hudah diulah wan disetel ka "$3". Amun bujur Pian nang maminta, Pian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Katasunduk pahadangan Pian akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
 
-Amun urang lain nang maminta ini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamakai katasunduk lawas Pian.',
+Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamakai katasunduk lawas Pian.',
 'noemail' => 'Kadada alamat suril tarakam gasan pamakai "$1".',
 'noemailcreate' => 'Pian parlu manyadiakan sabuah alamat suril nang sah',
 'passwordsent' => 'Sabuting kata sunduk hanyar sudah dikirim ka suril tadaptar gasan "$1".
@@ -531,10 +531,10 @@ Muhun buati sabuting alamat suril nang bujur pormatnya atawa puangkan haja isian
 'accountcreated' => 'Akun diulah',
 'accountcreatedtext' => 'Akun pamakai gasan $1 sudah diulah.',
 'createaccount-title' => 'Paulahan akun gasan {{SITENAME}}',
-'createaccount-text' => 'Ada urang nang maulah akun gasan alam suril Pian pada {{SITENAME}} ($4) bangaran "$2", awan kata sunduk "$3".
-Pian dianjurakan babuat log wan maubah kata sunduk Pian parhatan ini.
+'createaccount-text' => 'Ada urang nang maulah akun gasan alamat suril Pian pada {{SITENAME}} ($4) bangaran "$2", awan kata sunduk "$3".
+Pian dianjurakan babuat log wan maubah kata sunduk Pian parhatan ni.
 
-Pian kawa kada mahual pasan ini, amun paulahan akun ini adalah kasalahan.',
+Pian kawa kada mahual pasan ngini, amun paulahan akun ini adalah kasalahan.',
 'usernamehasherror' => 'Ngaran pamakai kada kawa mangandung tanda kurung',
 'login-throttled' => 'Pian sudah kabanyakan mancuba babuat log.
 Muhun hadangi dahulu sapandang hanyar cubai pulang.',
@@ -556,12 +556,12 @@ Hagan manuntungakan babuat log, Pian musti manyetel sabuah katasunduk hanyar di
 'retypenew' => 'Katik pulang katasunduk hanyar:',
 'resetpass_submit' => 'Setel katasunduk wan babuat log',
 'resetpass_success' => 'Katasunduk Pian bahasil diubah!
-Wayah ini Pian sudah babuat log...',
+Wayah ni Pian sudah babuat log...',
 'resetpass_forbidden' => 'Katasunduk kada kawa diubah',
 'resetpass-no-info' => 'Pian musti babuat log hagan babuat ka tungkaran ini langsung.',
 'resetpass-submit-loggedin' => 'Ubah katasunduk',
 'resetpass-submit-cancel' => 'Walangi',
-'resetpass-wrong-oldpass' => 'Katasunduk samantara atawa wayah ini kada sah.
+'resetpass-wrong-oldpass' => 'Katasunduk samantara atawa wayah ni kada sah.
 Pian pinanya sudah bahasil maubah katasunduk Pian atawa maminta sabuah katasunduk samantara hanyar.',
 'resetpass-temp-password' => 'Katasunduk samantara:',
 
@@ -569,7 +569,7 @@ Pian pinanya sudah bahasil maubah katasunduk Pian atawa maminta sabuah katasundu
 'passwordreset' => 'Bulikakan setelan katasunduk',
 'passwordreset-text' => 'Tuntungakan purmulir ngini gasan manarima sabuah suril pangingat rarincian akun Pian.',
 'passwordreset-legend' => 'Bulikakan setelan katasunduk',
-'passwordreset-disabled' => 'Mambulikakan setelan katasunduk dipajahakan hagan wiki ini.',
+'passwordreset-disabled' => 'Mambulikakan setelan katasunduk dipajahakan hagan wiki ngini.',
 'passwordreset-pretext' => '{{PLURAL:$1||Buati asa data di bawah ngini}}',
 'passwordreset-username' => 'Ngaran pamakai:',
 'passwordreset-domain' => 'Dumain:',
@@ -583,14 +583,14 @@ tarait awan suril:
 $2
 
 {{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
-Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.',
+Pian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.',
 'passwordreset-emailtext-user' => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}
 tarait awan suril:
 
 $2
 
 {{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
-Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.',
+Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.',
 'passwordreset-emailelement' => 'Ngaran pamakai: $1
 Katasunduk pahadangan: $2',
 'passwordreset-emailsent' => 'Sabuah suril pangingat sudah takirim.',
@@ -601,8 +601,8 @@ Katasunduk pahadangan: $2',
 'changeemail' => 'Ganti alamat suril',
 'changeemail-header' => 'Ganti akun alamat suril',
 'changeemail-text' => 'Manuntungakan purmulir ngini hagan mangganti alamat suril Pian. Pian akan parlu mamasukakan katasunduk Pian hagan mayakinakan parubahan ngini.',
-'changeemail-no-info' => 'Pian musti babuat log hagan babuat ka tungkaran ini langsung.',
-'changeemail-oldemail' => 'Alamat suril wayah ini:',
+'changeemail-no-info' => 'Pian musti babuat log hagan babuat ka tungkaran ngini langsung.',
+'changeemail-oldemail' => 'Alamat suril wayah ni:',
 'changeemail-newemail' => 'Alamat suril puga:',
 'changeemail-none' => '(kadada)',
 'changeemail-submit' => 'Ganti suril',
@@ -629,8 +629,8 @@ Katasunduk pahadangan: $2',
 # Edit pages
 'summary' => 'Kasimpulan:',
 'subject' => 'Subyek/judul:',
-'minoredit' => 'Ini adalah babakan sapalih',
-'watchthis' => 'Itihi tungkaran ini',
+'minoredit' => 'Ngini adalah babakan sapalih',
+'watchthis' => 'Itihi tungkaran ngini',
 'savearticle' => 'Simpan tungkaran',
 'preview' => 'Tilik',
 'showpreview' => 'Tampaiakan titilikan',
@@ -638,11 +638,11 @@ Katasunduk pahadangan: $2',
 'showdiff' => 'Tampaiakan parubahan',
 'anoneditwarning' => "'''Paringatan:''' Pian baluman babuat log.
 Alamat IP Pian akan dirakam dalam tungkaran babakan halam",
-'anonpreviewwarning' => "''Pian baluman babuat log. Manyimpan akan tarakam alamat IP Pian pada sajarah bahari tungkaran ini.''",
+'anonpreviewwarning' => "''Pian baluman babuat log. Manyimpan akan tarakam alamat IP Pian pada sajarah bahari tungkaran ngini.''",
 'missingsummary' => "'''Pangingat:''' Pian kada manyadiakan sabuah kasimpulan babakan.
 Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada bakasimpulan.",
-'missingcommenttext' => 'Muhun buati sabuah kumintar di bawah ini.',
-'missingcommentheader' => "'''Pangingat:''' Pian kada manyadiakan sabuah subjek/judul gasan kumin ini.
+'missingcommenttext' => 'Muhun buati sabuah kumintar di bawah ngini.',
+'missingcommentheader' => "'''Pangingat:''' Pian kada manyadiakan sabuah subjek/judul gasan kumin ngini.
 Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada basubjek/bajudul.",
 'summary-preview' => 'Tilikan kasimpulan:',
 'subject-preview' => 'Titilikan subyek/judul:',
@@ -688,15 +688,15 @@ Pinanya ini sudah diugahakan atawa dihapus parhatan Pian maniringi tungkaran nan
 Katasunduk gasan pamakai hanyar nangini kawa diubah pintang tungkaran ''[[Special:ChangePassword|ubah katasunduk]]'' wayah babuat log.",
 'newarticle' => '(Hanyar)',
 'newarticletext' => "Pian maumpati sabuah tautan ka tungkaran nang baluman ada lagi. Gasan maulah tungkaran, mulai ja mangatik pada kutak di bawah (lihati [[{{MediaWiki:Helppage}}|tungkaran patulung]] gasan panjalasan labih). Amun Pian ka sia cagaran tasalah, klik picikan '''back''' di panjalajah web Pian.",
-'anontalkpagetext' => "----''Ini adalah tungkaran pamandiran gasan pamuruk kada bangaran nang baluman maulah akun pulang, atawa  kada mamuruknya. Kami tapaksa mamuruk numurik alamat IP hagan maminanduinya.
-Alamat IP nangkaini kawaai dipuruk ulih babarapa pamuruk.
+'anontalkpagetext' => "----''Ngini adalah tungkaran pamandiran gasan pamakai kada bangaran nang baluman ma-ulah akun pulang, atawa  kada mamakainya. Kami tapaksa mamakai numurik alamat IP hagan maminanduinya.
+Alamat IP nangkaini kawaai dipuruk ulih babarapa pamakai.
 Amun Pian adalah pamuruk kada bangaran wan marasa kumin nang kada pas ta ka Pian, muhun [[Special:UserLogin/signup|ulah sabuah akun]] or [[Special:UserLogin|babuat log]] hagan mahindari kabingungan awan pamuruk kada bangaran lain kaina.",
-'noarticletext' => 'Parhatan ini kadada naskah di tungkaran ini.
-Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ini]] pintang tungkaran lain,
+'noarticletext' => 'Parhatan ni kadada naskah di tungkaran ngini.
+Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ngini]] pintang tungkaran lain,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} manggagai log barait].</span>,
-atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} mambabak tungkaran ini]</span>.',
-'noarticletext-nopermission' => 'Parhatan ini kadada naskah di tungkaran ini.
-Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ini]] pintang tungkaran lain,
+atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} mambabak tungkaran ngini]</span>.',
+'noarticletext-nopermission' => 'Parhatan ni kadada naskah di tungkaran ngini.
+Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ngini]] pintang tungkaran lain,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} manggagai log barait].</span>.',
 'userpage-userdoesnotexist' => 'Akun pamuruk "<nowiki>$1</nowiki>" kada tadaptar.
 Muhun pariksa amun Pian handak maulah/mambabak tungkaran ini.',
@@ -723,7 +723,7 @@ Log blukir pahabisannya tasadia di bawah ini gasan rujukan:',
 Inatakan bahwasa saragam  tungkaran-tungkaran .css wan .js mamuruk aksara halus, cuntuh {{ns:user}}:Foo/vector.css sawagai tandingan {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Dihanyarakan)',
 'note' => "'''Catatan:'''",
-'previewnote' => "'''Ingatakanlah bahwasa ini titilikan haja nang balum disimpan!'''",
+'previewnote' => "'''Ingatakanlah bahwasa ngini titilikan haja''' Parubahan Pian nang baluman disimpan!",
 'previewconflict' => 'Titilikan ini mancarminakan naskah dalam naskah wilayah atas babakan sawagai mana ini akan mancungul amun disimpan.',
 'session_fail_preview' => "'''Ampun! Kami kada kawa manarusakan babakan Pian karana kahilangan sési data.'''
 Cubai pang sa'asa pulang.
@@ -739,6 +739,7 @@ Babakan ini kada ditarima hagan mancagah kasalahan pada naskah tungkaran.
 Nangini ambahanu tajadi amun Pian mamuruk sabuah layanan proxy buggy bapandal web kada bangaran.",
 'edit_form_incomplete' => "'''Babarapa hagian matan purmulir babakan kada sampai server; pariksa pulang apakah babakan Pian tatap utuh wan cubai lagi.'''",
 'editing' => 'Mambabak $1',
+'creating' => 'Ma-ulah $1',
 'editingsection' => 'Mambabak $1 (hagian)',
 'editingcomment' => 'Mambabak $1 (hagian hanyar)',
 'editconflict' => 'Babakan bacakut: $1',
@@ -761,7 +762,7 @@ Pian jua bajanji ka kami amun Pian manulis ini saurangan, atawa manjumput ini ma
 Amun Pian kada hakun tulisan Pian dibabak kada baumpat lalu, lalu ai kada usah manyumbang di sia.<br />
 Pian jua bajanji ka kami amun Pian manulis ini saurangan, atawa manjumput ini matan sabuah asal mula ampun umum atawa nang samacam asal mula bibas (lihati $1 gasan rarincian).
 '''Jangan kirimkan gawian bahak cipta kada baijin!'''",
-'longpageerror' => "'''Kasalahan: Naskah nang Pian kirim panjangnya $1 kilubita, nangapa tapanjang pada pamanjangnya nang kawa $2 kilubita.'''
+'longpageerror' => "'''Kasalahan: Naskah nang Pian kirim panjangnya {{PLURAL:$1|asa kilubita|$1 kilubita}}, nangapa tapanjang pada pamanjangnya nang kawa {{PLURAL:$2|asa kilubita|$2 kilubita}}.'''
 Nangini kada kawa disimpan.",
 'readonlywarning' => "'''Paringatan: Basis data sudah tasunduk gasan diharagu, jadinya Pian kada kawa manyimpan babakab Pian parhatan ini.'''
 Pian kawa amun handak cut-n-paste naskah ka sabuah barakas naskah wan simpan ini gasan kaina.
@@ -804,6 +805,7 @@ Ini cungul pinanya sudah tahapus.',
 'edit-no-change' => 'Babakan Pian diabaiakan, karana kadada parubahan diulah ka naskah ini.',
 'edit-already-exists' => 'Kada kawa maulah sabuah tungkaran hanyar.
 Nangini sudah ada.',
+'defaultmessagetext' => 'Naskah baku pasan',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Paringatan:''' Tungkaran ini mangandung kabanyakan pungsi parser kiauan.
@@ -961,7 +963,7 @@ Muhun pariksa lolog.',
 
 # Suppression log
 'suppressionlog' => 'Log panikinan',
-'suppressionlogtext' => 'Nang di bawah adalah sabuah daptar matan pahahapusan wan Pamblublukiran tamasuk isi tasungkup matan papambakal. Lihati [[Special:IPBlockList|Daptar IP diblukir]] gasan daptar matan uprasi tahanyar tatangatan wan blublukir.',
+'suppressionlogtext' => 'Nang di bawah adalah sabuting daptar matan pahapusan wan pamblukiran tamasuk isi tasungkup matan pambakal. Lihati [[Special:BlockList|Daptar diblukir]] gasan daptar matan uprasi tahanyar tatangatan wan blukir.',
 
 # History merging
 'mergehistory' => 'Gabungakan hahalam tungkaran',
@@ -996,13 +998,12 @@ Catatan bahwasa mamuruk tautan napigasi akan mambulikakan setelan kolum ngini.',
 
 # Diffs
 'history-title' => "Ralatan halam matan ''$1''",
-'difference' => '(Nang balain antar ralatan)',
 'difference-multipage' => '(Nang balain antar tungkaran-tungkaran)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Tandingakan ralatan nang dipilih',
 'showhideselectedversions' => 'Tampaiakan/sungkupakan ralatan-ralatan',
 'editundo' => 'walangi',
-'diff-multi' => '({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih {{PLURAL:$2|asa pamuruk|$2 papamuruk}} kada ditampaiakan)',
+'diff-multi' => '({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih {{PLURAL:$2|asa pamakai|$2 papamakai}} kada ditampaiakan)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Asa ralatan tangah|$1 raralatan tangah}} ulih labih pada $2 {{PLURAL:$2|pamuruk|papamuruk}} kada ditampaiakan)',
 
 # Search results
@@ -1024,7 +1025,7 @@ Catatan bahwasa mamuruk tautan napigasi akan mambulikakan setelan kolum ngini.',
 'viewprevnext' => 'Tiringi ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Papilihan manggagai',
 'searchmenu-exists' => "'''Ada tungkaran bangaran \"[[:\$1]]\" dalam wiki ini.'''",
-'searchmenu-new' => "'''Maulah tungkaran \"[[:\$1]]\" dalam wiki ini!'''",
+'searchmenu-new' => "'''Maulah tungkaran \"[[:\$1]]\" dalam wiki ngini!'''",
 'searchhelp-url' => 'Help:Isi',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Janaki daptar tungkaran lawan awalan ngini]]',
 'searchprofile-articles' => 'Tungkaran isi',
@@ -1042,7 +1043,7 @@ Catatan bahwasa mamuruk tautan napigasi akan mambulikakan setelan kolum ngini.',
 'search-result-score' => 'Kacucukan: $1%',
 'search-redirect' => '(Paugahan $1)',
 'search-section' => '(hagian $1)',
-'search-suggest' => 'Inikah maksud Pian: $1',
+'search-suggest' => 'Nginikah maksud Pian: $1',
 'search-interwiki-caption' => 'Dingsanak rangka gawian',
 'search-interwiki-default' => 'Kulihan $1',
 'search-interwiki-more' => '(lagi)',
@@ -1179,7 +1180,7 @@ Pariksa tag HTML.',
 'prefs-help-realname' => 'Ngaran bujur adalah pilihan haja.
 Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan gawian Pian.',
 'prefs-help-email' => 'Alamat suril adalah opsional, tagal pun parlu gasan mambulikakan setelan katasunduk, amunai Pian kada ingatan.',
-'prefs-help-email-others' => 'Pian kawa jua maijinakan urang mangiau Pian lung tungkaran pamuruk atawa pamandiran Pian kada parlu manampaiakan identitas Pian.',
+'prefs-help-email-others' => 'Pian kawa jua maijinakan urang mangiau Pian lung tungkaran pamakai atawa pamandiran Pian kada parlu manampaiakan identitas Pian.',
 'prefs-help-email-required' => 'Alamat suril diparluakan.',
 'prefs-info' => 'Panjalasan pandal',
 'prefs-i18n' => 'Intarnasionalisasi',
@@ -1357,17 +1358,17 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'recentchanges-legend' => 'Pilihan parubahan tahanyar',
 'recentchangestext' => 'Jajak parubahan wiki pahanyarnya pada tungkaran ngini',
 'recentchanges-feed-description' => 'Susuri parubahan pahanyarnya dalam wiki di kitihan ini',
-'recentchanges-label-newpage' => 'Babakan ini maulah sabuah tungkaran hanyar',
-'recentchanges-label-minor' => 'Ini adalah sabuah babakan sapalih',
-'recentchanges-label-bot' => 'Babakan ini digawi ulih saikung bot',
-'recentchanges-label-unpatrolled' => "Babakan ini baluman ta'awasi",
+'recentchanges-label-newpage' => 'Babakan ngini maulah sabuah tungkaran hanyar',
+'recentchanges-label-minor' => 'Ngini adalah sabuah babakan sapalih',
+'recentchanges-label-bot' => 'Babakan ngini digawi ulih saikung bot',
+'recentchanges-label-unpatrolled' => "Babakan ngini baluman ta'awasi",
 'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} parubahan tahanyar dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.",
 'rcnotefrom' => "Di bawah ngini parubahan tumatan '''$2''' (ditampaiakan sampai '''$1''' parubahan)",
 'rclistfrom' => 'Tampaiakan parubahan tahanyar matan $1',
 'rcshowhideminor' => '$1 pambabakan sapalih',
 'rcshowhidebots' => '$1 bot',
-'rcshowhideliu' => '$1 pamuruk nang babuat di log',
-'rcshowhideanons' => '$1 pamuruk kada bangaran',
+'rcshowhideliu' => '$1 pamakai nang babuat di log',
+'rcshowhideanons' => '$1 pamakai kada bangaran',
 'rcshowhidepatr' => "$1 babakan ta'awasi",
 'rcshowhidemine' => '$1 babakan ulun',
 'rclinks' => 'Tampaiakan $1 parubahan tahanyar dalam $2 hari tauncit<br />$3',
@@ -1393,7 +1394,7 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'recentchangeslinked-toolbox' => 'Parubahan tarait',
 'recentchangeslinked-title' => 'Parubahan nang tarait lawan "$1"',
 'recentchangeslinked-noresult' => 'Kadada parubahan pada tautan tutungkaran salawas wayah ditantuakan',
-'recentchangeslinked-summary' => "Ini adalah sabuah daptar parubahan nang diulah hahanyar ini pada tungkaran batautan matan sabuah tungkaran tartantu (atawa ka angguta matan sabuah tumbung tartantu).
+'recentchangeslinked-summary' => "Ngini adalah sabuah daptar parubahan nang diulah hahanyar ngini pada tungkaran batautan matan sabuah tungkaran tartantu (atawa ka angguta matan sabuah tumbung tartantu).
 Tutungkaran dalam [[Special:Watchlist|daptar itihan Pian]] ditandai '''kandal'''.",
 'recentchangeslinked-page' => 'Ngaran tungkaran:',
 'recentchangeslinked-to' => 'Tampaiakan parubahan matan tungkaran-tungkaran nang tataut lawan tungkaran nang disurungakan',
@@ -1651,7 +1652,7 @@ Parhatan disaring ulih pamuruk, babarakas nang pamuruk hunggah ralatan pahanyarn
 # File description page
 'file-anchor-link' => 'Barakas',
 'filehist' => 'Barakas halam',
-'filehist-help' => 'Klik pada tanggal/waktu gasan maniringi barakas ini pada wayah itu.',
+'filehist-help' => 'Klik pada tanggal/waktu gasan maniringi barakas ngini pada wayah itu.',
 'filehist-deleteall' => 'hapus samunyaan',
 'filehist-deleteone' => 'hapus',
 'filehist-revert' => 'bulikakan',
@@ -1660,13 +1661,13 @@ Parhatan disaring ulih pamuruk, babarakas nang pamuruk hunggah ralatan pahanyarn
 'filehist-thumb' => 'Pahalusan',
 'filehist-thumbtext' => 'Pahalusan gasan bantuk per $1',
 'filehist-nothumb' => 'Kadada thumbnail',
-'filehist-user' => 'Pamuruk',
+'filehist-user' => 'Pamakai',
 'filehist-dimensions' => 'Matra',
 'filehist-filesize' => 'Ukuran barakas',
 'filehist-comment' => 'Ulasan',
 'filehist-missing' => 'Barakas hilang',
 'imagelinks' => 'Tautan barakas',
-'linkstoimage' => '{{PLURAL:$1|tautan tungkaran|$1 tautan tungkaran}} dudi ka barakas ini:',
+'linkstoimage' => '{{PLURAL:$1|tautan tungkaran|$1 tautan tungkaran}} dudi ka barakas ngini:',
 'linkstoimage-more' => 'Labihan pada $1 {{PLURAL:$1|tatautan tungkaran|tautan tutungkaran}} ka barakas ngini.
 Daptar barikut manampaiakan {{PLURAL:$1|tautan panambaian tungkaran|$1 panambaian tatautan tungkaran}} ka barakas ngini haja.
 Sabuah [[Special:WhatLinksHere/$2|daptar hibak]] tasadia.',
@@ -1932,7 +1933,7 @@ Protokol nang didukung: <tt>$1</tt> (jangan tambahakan dalam panggagaian Pian)',
 'activeusers-noresult' => 'Kadada papamuruk tatamu.',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Log pamuruk hanyar',
+'newuserlogpage' => 'Log pamakai hanyar',
 'newuserlogpagetext' => 'Ngini adalah sabuah log paulahan pamuruk.',
 
 # Special:ListGroupRights
@@ -2075,7 +2076,7 @@ kitihan-bulik wan pangganian labih jauh:
 'historywarning' => "'''Paringatan:''' Tungkaran nang Pian pasal hagan hapus baisi sabuah halam sakitar $1 {{PLURAL:$1|ralatan|raralatan}}:",
 'confirmdeletetext' => 'Pian handak mahapus sabuah tungkaran awan samunyaan halamnya.
 Muhun mamastiakan amun Pian handak manggawi ini, bahwasa Pian paham akibatnya, wan apa nang Pian gawi ini sasuai awan [[{{MediaWiki:Policy-url}}|kabijakan {{SITENAME}}]].',
-'actioncomplete' => 'Pangulahan tuntung',
+'actioncomplete' => 'Pa-ulahan tuntung',
 'actionfailed' => 'Palakuan luput',
 'deletedtext' => '"$1" sudah tahapus. Lihati $2 sabuah rakaman gasan nang hanyar ni tahapus.',
 'dellogpage' => 'Log pahapusan',
@@ -2250,8 +2251,8 @@ $1',
 'blanknamespace' => '(Tatambaian)',
 
 # Contributions
-'contributions' => 'Sumbangan pamuruk',
-'contributions-title' => 'Sumbangan pamuruk gasan $1',
+'contributions' => 'Sumbangan pamakai',
+'contributions-title' => 'Sumbangan pamakai gasan $1',
 'mycontris' => 'Sumbangan ulun',
 'contribsub2' => 'Gasan $1 ($2)',
 'nocontribs' => 'Kadada parubahan taugai parsis awan karitaria ngini.',
@@ -2259,7 +2260,7 @@ $1',
 'month' => 'Matan bulan (wan sabalumnya):',
 'year' => 'Matan tahun (wan sabalumnya):',
 
-'sp-contributions-newbies' => 'Tampaiakan sumbangan pamuruk-pamuruk hanyar haja',
+'sp-contributions-newbies' => 'Tampaiakan sumbangan papamakai hanyar haja',
 'sp-contributions-newbies-sub' => 'Gasan akun hanyar',
 'sp-contributions-newbies-title' => 'Sumbangan pamuruk gasan akun hanyar',
 'sp-contributions-blocklog' => 'Log blukir',
@@ -2273,7 +2274,7 @@ Log blukir pahabisannya tasadia di bawah ni gasan rujukan:',
 'sp-contributions-blocked-notice-anon' => 'Alamat IP ngini parhatan ini diblukir.
 Log blukir pahabisannya tasadia di bawah ngini gasan rujukan:',
 'sp-contributions-search' => 'Gagai gasan sumbangan',
-'sp-contributions-username' => 'Alamat IP atawa ngaran pamuruk:',
+'sp-contributions-username' => 'Alamat IP atawa ngaran-pamakai:',
 'sp-contributions-toponly' => 'Tampaiakan hanya ralatan tauncit',
 'sp-contributions-submit' => 'Gagai',
 
@@ -2334,8 +2335,8 @@ Isi sabuah alasan khas di bawah (gasan cuntuh, manulisakan tutungkaran nang suah
 'ipb-confirm' => 'Yakinakan blukir',
 'badipaddress' => 'Alamat IP kada sah',
 'blockipsuccesssub' => 'Pamblukiran ruhui',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] sudah diblukir.<br />
-Janaki [[Special:BlockList|daptar IP dibluk]] hagan maniring-pulang blukir.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] hudah diblukir.<br />
+Janaki [[Special:BlockList|daptar dibluk]] hagan maniring-pulang blukir.',
 'ipb-blockingself' => 'Pian pasal mamblukir Pian surang! Bujurkah Pian mahandaki ngitu?',
 'ipb-confirmhideuser' => 'Pian pasal mamblukir saurang pamuruk awan "sungkupakan pamuruk" di-kawa-akan. Ngini akan manikin/kadada ngaran pamuruk dalam samunyaan daptar wan log masukan. Pian yakin kah handak manggawi ngitu?',
 'ipb-edit-dropdown' => 'Aalasan pamblukiran babakan',
@@ -2350,7 +2351,7 @@ Janaki [[Special:BlockList|daptar IP dibluk]] hagan maniring-pulang blukir.',
 'unblocked-range' => '$1 sudah dilapas blukirnya',
 'unblocked-id' => 'Blukir $1 sudah dibuang',
 'blocklist' => 'Pamuruk tablukir',
-'ipblocklist' => 'Pamuruk tablukir',
+'ipblocklist' => 'Pamakai tablukir',
 'ipblocklist-legend' => 'Ugai saurang pamuruk tablukir',
 'blocklist-userblocks' => 'Sungkupakan pamblukiran akun',
 'blocklist-tempblocks' => 'Sungkupakan pamblukiran samantara',
@@ -2389,8 +2390,8 @@ Log panikinan disadiakan di bawah gasan rujukan:',
 'blocklogentry' => 'mamblukir [[$1]] sampai wayah $2 $3',
 'reblock-logentry' => 'setelan blukir diubah gasan [[$1]] awan sabuah wayah kadaluarsa $2 $3',
 'blocklogtext' => 'Ngini adalah log matan blukir wan lapas-blukir pamuruk.
-Blukir alamat IP utumatis kada didaptar.
-Janaki [[Special:BlockList|daptar IP diblukir]] gasan daptar oparasi diikat wan diblukir tadamini.',
+Blukir alamat IP utumatis kada tadaptar.
+Janaki [[Special:BlockList|daptar diblukir]] gasan daptar uprasi dibabat wan pamblukiran pahanyarnya.',
 'unblocklogentry' => 'Mahilangakan blukir "$1"',
 'block-log-flags-anononly' => 'papamuruk kada bangaran haja',
 'block-log-flags-nocreate' => 'Paulahan akun dipajahakan',
@@ -2639,31 +2640,31 @@ Muhun cubai pulang.',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ralatan|raralatan}} matan $2',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Tungkaran pamuruk Pian',
+'tooltip-pt-userpage' => 'Tungkaran pamakai Pian',
 'tooltip-pt-anonuserpage' => 'Tungkaran pamuruk matan alamat IP Pian mambabak sawagai',
 'tooltip-pt-mytalk' => 'Tungkaran pamandiran Pian',
 'tooltip-pt-anontalk' => 'Pamandiran pasal bababakan matan alamat IP ngini',
 'tooltip-pt-preferences' => 'Nang Pian katuju',
 'tooltip-pt-watchlist' => 'Daptar tungkaran-tungkaran nang Pian itihi parubahannya',
 'tooltip-pt-mycontris' => 'Daptar sumbangan Pian',
-'tooltip-pt-login' => 'Pian sabaiknya babuat ka dalam log; tagal ini kada kawajiban pang',
+'tooltip-pt-login' => 'Pian sabaiknya babuat ka dalam log; tagal ngini kada kawajiban pang',
 'tooltip-pt-anonlogin' => 'Pian sabaiknya babuat ka dalam log; tagal ini kada kawajiban pang',
 'tooltip-pt-logout' => 'Kaluar',
 'tooltip-ca-talk' => 'Pamandiran pasal isi tungkaran',
-'tooltip-ca-edit' => 'Pian kawa mambabak tungkaran ini. Tabéngkéng amun mamuruk picikan titilikan sabalum manyimpan',
+'tooltip-ca-edit' => 'Pian kawa mambabak tungkaran ngini. Tabéngkéng amun mamakai picikan titilikan sabalum manyimpan',
 'tooltip-ca-addsection' => 'Mulai hagian hanyar',
-'tooltip-ca-viewsource' => 'Tungkaran ini dilindungi. Pian kawa maniring asal mulanya.',
-'tooltip-ca-history' => 'Raralatan bahari tungkaran ini',
+'tooltip-ca-viewsource' => 'Tungkaran ngini dilindungi. Pian kawa maniring asal mulanya.',
+'tooltip-ca-history' => 'Raralatan bahari tungkaran ngini',
 'tooltip-ca-protect' => 'Lindungi tungkaran ini',
 'tooltip-ca-unprotect' => 'Ganti parlindungan tungkaran ngini',
 'tooltip-ca-delete' => 'Hapus tungkaran ini',
 'tooltip-ca-undelete' => 'Bulikakan babakan ka tungkaran ini sabalum tungkaran ini dihapus',
-'tooltip-ca-move' => 'Pindahakan tungkaran ini',
-'tooltip-ca-watch' => 'Tambahi tungkaran ini ka daptar itihan Pian',
-'tooltip-ca-unwatch' => 'Buang tungkaran ini matan daptar itihan Pian',
+'tooltip-ca-move' => 'Pindahakan tungkaran ngini',
+'tooltip-ca-watch' => 'Tambahi tungkaran ngini ka daptar itihan Pian',
+'tooltip-ca-unwatch' => 'Buang tungkaran ngini matan daptar itihan Pian',
 'tooltip-search' => 'Gagai {{SITENAME}}',
 'tooltip-search-go' => 'Tulak ka sabuah tungkaran bangaran sama munnya sudah ada',
-'tooltip-search-fulltext' => 'Gagai tungkaran nang baisi naskah nangkaya ini',
+'tooltip-search-fulltext' => 'Gagai tungkaran nang baisi naskah nangkaya ngini',
 'tooltip-p-logo' => 'Ilangi tungkaran tatambaian',
 'tooltip-n-mainpage' => 'Ilangi tungkaran tatambaian',
 'tooltip-n-mainpage-description' => 'Ilangi Tungkaran Tatambaian',
@@ -2673,17 +2674,17 @@ Muhun cubai pulang.',
 'tooltip-n-randompage' => 'Tampaiakan sabuah babarang tungkaran',
 'tooltip-n-help' => 'Wadah maugai patulung',
 'tooltip-t-whatlinkshere' => 'Daptar samunyaan tungkaran wiki nang ada tautan ka sia',
-'tooltip-t-recentchangeslinked' => 'Parubahan tahanyar dalam tutungkaran tataut matan tungkaran ini',
+'tooltip-t-recentchangeslinked' => 'Parubahan tahanyar dalam tutungkaran tataut matan tungkaran ngini',
 'tooltip-feed-rss' => 'Kitihan RSS gasan tungkaran ini',
-'tooltip-feed-atom' => 'Kitihan Atum gasan tungkaran ini',
-'tooltip-t-contributions' => 'Tiringi daptar sumbangan pamuruk ini',
-'tooltip-t-emailuser' => 'Kirimi surel ka pamuruk ini',
+'tooltip-feed-atom' => 'Kitihan Atum gasan tungkaran ngini',
+'tooltip-t-contributions' => 'Sabuah daptar sumbangan pamakai ngini',
+'tooltip-t-emailuser' => 'Kirimi surel ka pamakai ini',
 'tooltip-t-upload' => 'Hunggahakan babarakas',
 'tooltip-t-specialpages' => 'Daptar samunyaan tungkaran istimiwa',
-'tooltip-t-print' => 'Nang kawa dicitaknya tungkaran ini',
-'tooltip-t-permalink' => 'Tautan tatap ka raralatan tungkaran ini',
+'tooltip-t-print' => 'Nang kawa dicitaknya tungkaran ngini',
+'tooltip-t-permalink' => 'Tautan tatap ka raralatan tungkaran ngini',
 'tooltip-ca-nstab-main' => 'Tiringi tungkaran isi',
-'tooltip-ca-nstab-user' => 'Tiring tungkaran pamuruk',
+'tooltip-ca-nstab-user' => 'Tiring tungkaran pamakai',
 'tooltip-ca-nstab-media' => 'Tiringi tungkaran media',
 'tooltip-ca-nstab-special' => 'Nangini sabuah tungkaran istimiwa nang kada kawa dibabak.',
 'tooltip-ca-nstab-project' => 'Tiringi tungkaran rangka gawian',
@@ -2694,14 +2695,14 @@ Muhun cubai pulang.',
 'tooltip-ca-nstab-category' => 'Lihati tungkaran tumbung',
 'tooltip-minoredit' => 'Tandai ini sabagai sabuah pambabakan sapalih',
 'tooltip-save' => 'Simpan parubahan Pian',
-'tooltip-preview' => 'Tilik parubahan Pian, muhun puruk ini sabalum manyimpan!',
+'tooltip-preview' => 'Tilik parubahan Pian, muhun pakai ngini sabalum manyimpan!',
 'tooltip-diff' => 'Tampaiakan nang apa parubahan nang Pian ulah',
-'tooltip-compareselectedversions' => 'Lihati nang balain antara dua ralatan tungkaran tapilih ini',
+'tooltip-compareselectedversions' => 'Lihati nang balain antara dua ralatan tungkaran tapilih ngini',
 'tooltip-watch' => 'Tambahakan tungkaran ini ka daptar itihan Pian',
 'tooltip-recreate' => 'Ulah pulang tungkaran biar gin suah dihapus',
 'tooltip-upload' => 'Mulai pangunggahan',
-'tooltip-rollback' => 'Bulikakan ka babakan-babakan tungkaran ini matan panyumbang tauncit dalam sakali klik.',
-'tooltip-undo' => 'Mamantukakan ralatan ini wan mambuka kutak pambabakan lawan mode tilik. Alasan kawa ditambahakan di kutak kasimpulan.',
+'tooltip-rollback' => 'Bulikakan ka babakan-babakan tungkaran ngini matan panyumbang tauncit dalam sakali klik.',
+'tooltip-undo' => 'Mamantukakan ralatan ngini wan mambuka kutak pambabakan lawan mode tilik. Alasan kawa ditambahakan di kutak kasimpulan.',
 'tooltip-preferences-save' => 'Simpan kakatujuan',
 'tooltip-summary' => 'Buati sabuah kasimpulan handap',
 
@@ -2786,7 +2787,7 @@ Manarusakan ngini, kawa manyarang sistem Pian.",
 'svg-long-desc' => 'Barakas SVG, nominal $1 × $2 piksel, basar barakas: $3',
 'show-big-image' => 'Ukuran hibak',
 'show-big-image-preview' => 'Takaran tilikan ngini: $1.',
-'show-big-image-other' => 'Resolusi lain: $1.',
+'show-big-image-other' => '{{PLURAL:$2|Risulusi|Risulusi}} lain: $1.',
 'show-big-image-size' => '$1 × $2 piksal',
 'file-info-gif-looped' => 'mambulat',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|pigura|pipigura}}',
@@ -2822,7 +2823,7 @@ Tautan-tautan abis tu pada baris sama dipartimbangkan sabagai pangacualian, nang
 
 # Metadata
 'metadata' => 'Metadata',
-'metadata-help' => 'Barakas ini mangandung panjalasan tambahan, mungkin ditambahakan ulih kudakan atawa paundai nang dipurukakan gasan maulah atawa digitalisasi barakas. Amun barakas ini sudah diubah, parincian nang ada mungkin kada sapanuhnya sasuai lawan barakas nang diubah.',
+'metadata-help' => 'Barakas ngini mangandung panjalasan tambahan, mungkin ditambahakan ulih kudakan atawa paundai nang dipurukakan gasan maulah atawa digitalisasi barakas. Amun barakas ngini sudah diubah, parincian nang ada mungkin kada sapanuhnya sasuai lawan barakas nang diubah.',
 'metadata-expand' => 'Tampaiakan tambahan rincian',
 'metadata-collapse' => 'Sungkupakan tambahan rincian',
 'metadata-fields' => 'Pancitraan metadata tadaptar dalam pasan ngini akan masuk dalam tungkaran pancitraan wayah tabel metadata tasungkup. Nang lainnya cagaran babaku tasungkup.
@@ -3230,7 +3231,7 @@ Tautan-tautan abis tu pada baris sama dipartimbangkan sabagai pangacualian, nang
 'exif-urgency-other' => 'Ganti-suai utamaan ($1)',
 
 # External editor support
-'edit-externally' => 'Babak barakas ini puruk sabuah aplikasi luar',
+'edit-externally' => 'Babak barakas ngini puruk sabuah aplikasi luar',
 'edit-externally-help' => '(Lihati [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)',
 
 # 'all' in various places, this might be different for inflected languages
@@ -3431,6 +3432,7 @@ Pian saharusnya [{{SERVER}}{{SCRIPTPATH}}/COPYING sabuah salinan Lisansi Publik
 'version-software' => 'Parangkat lunak tapasang',
 'version-software-product' => 'Produk',
 'version-software-version' => 'Virsi',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Wadah barakas',
@@ -3560,9 +3562,9 @@ Situs ngini mangalami kangalihan teknik.',
 'logentry-move-move_redir-noredirect' => '$1 diugah tungkaran $3 ka $4 lung sabuah paugahan awan-kada maninggalakan sabuah paugahan',
 'logentry-patrol-patrol' => "$1 diciri'i ralatan $4 matan tungkaran $3 taawasi",
 'logentry-patrol-patrol-auto' => "$1 utumatis diciri'i ralatan $4 matan tungkaran $3 taawasi",
-'logentry-newusers-newusers' => '$1 diulah sabuah akun pamuruk',
-'logentry-newusers-create' => '$1 diulah sabuah akun pamuruk',
-'logentry-newusers-create2' => '$1 diulah sabuah akun pamuruk $3',
+'logentry-newusers-newusers' => '$1 ma-ulah sabuting akun pamakai',
+'logentry-newusers-create' => '$1 ma-ulah sabuting akun pamakai',
+'logentry-newusers-create2' => '$1 ma-ulah sabuting akun pamakai $3',
 'logentry-newusers-autocreate' => 'Akun $1 utumatis diulah',
 'newuserlog-byemail' => 'Katasunduk dikirimakan lung suril.',
 
index cbb5f01..ace7aa9 100644 (file)
@@ -451,6 +451,9 @@ $2',
 'customjsprotected' => 'আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।',
 'ns-specialprotected' => '{{ns:special}} নামস্থানে পাতাসমূহ সম্পাদনা করা যাবে না।',
 'titleprotected' => "[[User:$1|$1]]-কে এই শিরোনামের পাতা সৃষ্টি করতে বাধা দেয়া হচ্ছে। কারণ: ''$2''।",
+'filereadonlyerror' => '"$1" ফাইলটিকে পরিবর্তন করা সম্ভব হচ্ছে না কারন "$2" ফাইল রিপোসিটোরি রিড-অনলি-মোডে আছে।
+
+একজন প্রশাসক যিনি এটাকে লকড করেছেন তার যৌক্তিকতা দেওয়া হল: "$3"',
 
 # Virus scanner
 'virus-badscanner' => "ভুল কনফিগারেশন: অজ্ঞাত ভাইরাস স্কেনার: ''$1''",
@@ -534,6 +537,7 @@ $2',
 'emailconfirmlink' => 'আপনার ই-মেইলের ঠিকানা নিশ্চিত করুন',
 'invalidemailaddress' => 'এই ই-মেইল ঠিকানাটি গ্রহণযোগ্য নয়, কারণ সম্ভবত এটি সঠিক ফরম্যাটে লেখা হয়নি। অনুগ্রহ করে সঠিক ফরম্যাটে লেখা ই-মেইল ঠিকানা দিন, অথবা ক্ষেত্রটি খালি রাখুন।',
 'cannotchangeemail' => 'একাউন্ট ইমেইল ঠিকানা এই উইকিতে পরিবর্তন করা যাবে না।',
+'emaildisabled' => 'এই সাইটটিতে ই-মেইল প্রদানের সুবিধা নেই।',
 'accountcreated' => 'অ্যাকাউন্ট তৈরি করা হয়েছে',
 'accountcreatedtext' => '$1 এর জন্য ব্যবহারকারী অ্যাকাউন্ট তৈরি করা হয়েছে।',
 'createaccount-title' => '{{SITENAME}}-এর জন্য অ্যাকাউন্ট সৃষ্টি',
@@ -578,6 +582,7 @@ $2',
 'passwordreset-username' => 'ব্যবহারকারী নাম:',
 'passwordreset-domain' => 'ডোমেইন:',
 'passwordreset-capture' => 'অনুসন্ধানের ফলাফলের ইমেইল দেখুন?',
+'passwordreset-capture-help' => 'আপনি যদি এই চেক বক্সে ক্লিক করেন, তবে অস্থায়ী শব্দচাবিসহ একটি ই-মেইল আপনাকে দেখানো হবে ও সেইসাথে ব্যবহারকারীকে তা পাঠানো হবে।',
 'passwordreset-email' => 'ইমেইল ঠিকানা:',
 'passwordreset-emailtitle' => '{{SITENAME}} সাইটে ব্যবহারকারীর বিস্তারিত তথ্যাদি',
 'passwordreset-emailtext-ip' => 'কেউ একজন (সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে) {{SITENAME}} ($4) সাইটের জন্য আপনার
@@ -712,12 +717,12 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'userpage-userdoesnotexist-view' => 'ব্যবহারকারী অ্যাকাউন্ট "$1" অনিবন্ধিত।',
 'blocked-notice-logextract' => 'এই ব্যবহারকারী বর্তমানে ব্লক রয়েছে।
 রেফারেন্সের জন্য সাম্প্রতিক ব্লক লগ ভুক্তি নিচে দেওয়া হল:',
-'clearyourcache' => "'''লক্ষ্য করুন:আপনার পছন্দগুলো রক্ষা করার পর পরিবর্তনগুলো দেখার জন্য আপনাকে ব্রাউজারের ক্যাশ এড়াতে হতে পারে।'''
-*'''ফায়ারফক্স/সাফারি:''' ''শিফট'' কী চেপে ধরে ''রিলোড''-এ ক্লিক করুন, কিংবা হয় ''কন্ট্রোল-F5'' অথবা ''কন্ট্রোল-R''(ম্যাক-এ ''কমান্ড-R'') একসাথে চাপুন;
-*'''গুগল ক্রোম:''' ''কন্ট্রোল-শিফট-R''  (ম্যাক-এ ''কমান্ড-শিফট-R'') চাপতে হবে
-*'''ইন্টারনেট এক্সপ্লোরার:''' ''কন্ট্রোল'' চেপে ধরে ''রিফ্রেশ''-এ ক্লিক করুন, কিংবা ''কন্ট্রোল-F5'' চাপুন
-*'''কংকারার:''' কেবল ''রিলোড'' ক্লিক করলেই বা ''F5'' চাপলেই চলবে;
-*'''অপেরা:''' ''Tools→Preferences''-এ গিয়ে ক্যাশ পরিষ্কার করে নিন;",
+'clearyourcache' => "'''লক্ষ্য করুন:''' সংরক্ষণের পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারে ক্যাশে পরিস্কার করার প্রয়োজন হতে পারে।
+* '''ফায়ারফক্স / সাফারি:''' ''শিফট'' কি ধরে রাখা অবস্থায় ''রিলোড''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' বা ''Ctrl-R'' (ম্যাক-এ ''⌘-R'') চাপুন
+* '''গুগল ক্রোম:''' ''Ctrl-Shift-R'' (ম্যাক-এ ''⌘-Shift-R'') চাপুন
+* '''ইন্টারনেট এক্সপ্লোরার:''' ''Ctrl'' কি ধরে রাখা অবস্থায় ''রিফ্রেশ''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' চাপুন
+* '''কনকুয়েরার:''' ''রিলোড''-এ ক্লিক করুন বা ''F5'' চাপুন
+* '''অপেরা:''' ''টুলস → প্রিফারেন্স''-এ গিয়ে ক্যাশে পরিস্কার করে নিন",
 'usercssyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন CSS পরীক্ষা করুন।",
 'userjsyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন JavaScript পরীক্ষা করুন।",
 'usercsspreview' => "'''মনে রাখবেন আপনি আপনার জন্য বরাদ্ধকৃত সিএসএস প্রাকদর্শন করছেন।
@@ -732,6 +737,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'note' => "'''নোট:'''",
 'previewnote' => "'''খেয়াল করুন, এটি একটি প্রাকদর্শন মাত্র।'''
 আপনার পরিবর্তন এখনও সংরক্ষণ করা হয়নি!",
+'continue-editing' => 'সম্পাদনা চালিয়ে যান',
 'previewconflict' => 'এই প্রাকদর্শনটি সম্পাদনা ক্ষেত্রের উপরের অংশটির টেক্সট সংরক্ষণ করলে যেরকম দেখাবে, তা দেখাচ্ছে।',
 'session_fail_preview' => "'''দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি। দয়া করে লেখাটি আবার জমা দেয়ার চেষ্টা করুন। যদি এতেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে বেরিয়ে গিয়ে আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন।'''",
 'session_fail_preview_html' => "'''দুঃখিত! সেশন উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়া করতে পারিনি।'''
@@ -742,6 +748,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'token_suffix_mismatch' => "'''আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা টেক্সটের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে। পাতাটির টেক্সটে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে। আপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।'''",
 'edit_form_incomplete' => "'''আপনার সম্পাদনার কিছু অংশ সার্ভারে পৌছায় নি; আপনার সম্পাদনা সম্পূর্ণরুপে আছে কিনা নিশ্চিত হয়ে আবার চেষ্টা করুন'''",
 'editing' => 'সম্পাদনা করছেন: $1',
+'creating' => '$1 পাতাটি তৈরি করছেন',
 'editingsection' => 'সম্পাদনা করছেন $1 (অনুচ্ছেদ)',
 'editingcomment' => 'সম্পাদনা করছেন $1 (নতুন অনুচ্ছেদ)',
 'editconflict' => 'সম্পাদনা দ্বন্দ্ব: $1',
@@ -760,7 +767,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন, বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন।
 '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না!'''",
 'copyrightwarning2' => "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
-'longpageerror' => "'''ত্রুটি: আপনার জমা দেয়া টেক্সটের পরিমাণ $1 কিলোবাইট, যা সর্বোচ্চ সীমা $2 কিলোবাইটের চেয়ে বেশি। এটি সংরক্ষণ করা সম্ভব নয়।'''",
+'longpageerror' => " '''ত্রুটি:  আপনার জমা দেয়া টেক্সটের পরিমাণ $1 কিলোবাইট, যা সর্বোচ্চ সীমা $2 কিলোবাইটের চেয়ে বেশি। এটি সংরক্ষণ করা সম্ভব নয়।'''",
 'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।
 আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।'''
 
@@ -802,6 +809,7 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'edit-no-change' => 'আপনার সম্পাদনাটি উপেক্ষা করা হয়েছে, কারণ লেখাতে কোনো পরিবর্তন করা হয়নি।',
 'edit-already-exists' => 'নতুন পাতা সৃষ্টি করা যায়নি।
 পাতাটি ইতিমধ্যেই বিদ্যমান।',
+'defaultmessagetext' => 'আদি টেক্সট',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''সতর্ক হোন:''' এই পাতাটি অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল রয়েছে।
@@ -815,6 +823,8 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 তাই এই আর্গুমেন্টটি বাদ দেওয়া হয়েছে।",
 'post-expand-template-argument-category' => 'বাদ ফর্মা আর্গুমেন্ট ধারণকারী পাতা',
 'parser-template-loop-warning' => 'টেম্পলেট লুপ সনাক্ত হয়েছে: [[$1]]',
+'parser-template-recursion-depth-warning' => 'টেমপ্লেট  পুনরাবৃত্তি (রিকার্শন)  ডেপথ্‌ সীমা অতক্রম করেছে ($1)',
+'language-converter-depth-warning' => 'ভাষা পরিবর্তন  ডেপথ্‌ সীমা অতক্রম করেছে ($1)',
 
 # "Undo" feature
 'undo-success' => 'সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।',
@@ -905,6 +915,8 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-submit' => 'নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো',
 'revdelete-success' => "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
 'logdelete-success' => "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
+'logdelete-failure' => "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''
+$1",
 'revdel-restore' => 'দৃশ্যমানতা পরিবর্তন করো',
 'revdel-restore-deleted' => 'অপসারিত সংস্করণ',
 'revdel-restore-visible' => 'প্রদর্শনযোগ্য সংস্করণ',
@@ -953,7 +965,6 @@ $3-এর দেয়া কারণ হল ''$2''",
 
 # Diffs
 'history-title' => '"$1" এর সংশোধনের ইতিহাস',
-'difference' => '(সংস্করণগুলোর মধ্যে পার্থক্য)',
 'difference-multipage' => 'পাতাগুলোর মধ্যে পার্থক্য',
 'lineno' => '$1 নং লাইন:',
 'compareselectedversions' => 'নির্বাচিত সংস্করণগুলো তুলনা করো',
@@ -1153,7 +1164,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'userrights-lookup-user' => 'ব্যবহারকারী দল ব্যবস্থাপনা করুন',
 'userrights-user-editname' => 'ব্যবহারকারীর নাম লিখুন:',
 'editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো',
-'editinguser' => "ব্যবহারকারী সম্পাদনা করছেন '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "'''[[User:$1|$1]]''' $2 ব্যবহারকারীর জন্য ব্যবহারকারী অধিকার পরিবর্তন করছেন",
 'userrights-editusergroup' => 'ব্যবহারকারীর দল সম্পাদনা করো',
 'saveusergroups' => 'ব্যবহারকারীর দল সংরক্ষণ করো',
 'userrights-groupsmember' => 'সদস্য:',
@@ -1363,6 +1374,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'illegalfilename' => '"$1" ফাইলনামটিতে এমন কিছু ক্যারেক্টার আছে যেগুলি পাতার শিরোনামে ব্যবহার করা অবৈধ। অনুগ্রহ করে ফাইলটি নতুন করে নামকরণ করুন এবং তারপর আপলোড করার চেষ্টা করুন।',
 'badfilename' => 'ফাইলের নামটি পরিবর্তন করে $1" করা হয়েছে।',
 'filetype-badmime' => '"$1" MIME ধরনের ফাইল আপলোড করা যাবে না।',
+'filetype-bad-ie-mime' => 'এই ফাইলটি আপলোড করা সম্ভব নয় কারণ ইন্টারনেট এক্সপ্লোরার একে "$1" হিসেবে সনাক্ত করতে পারে, যা অননুমোদিত এবং সম্ভাব্য ক্ষতিকারক ফাইল টাইপ।',
 'filetype-unwanted-type' => "'''\".\$1\"''' ফাইল ধরনটি অগ্রহণযোগ্য।
 পছন্দনীয় {{PLURAL:\$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হলো \$2।",
 'filetype-banned-type' => '\'\'\'".$1"\'\'\' {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2।',
@@ -1372,12 +1384,14 @@ $3-এর দেয়া কারণ হল ''$2''",
 'filename-tooshort' => 'ফাইল নামটি খুব ছোট।',
 'filetype-banned' => 'এই ধরনের ফাইল নিষিদ্ধ।',
 'illegal-filename' => 'ফাইলের এই নামটি গ্রহণযোগ্য নয়।',
+'overwrite' => 'বিদ্যমান কোনো ফাইল প্রতিস্থাপন গ্রহণযোগ্য নয়।',
 'unknown-error' => 'একটি অজানা ত্রুটি দেখা দিয়েছে।',
 'tmp-create-error' => 'অস্থায়ী ফাইল তৈরি করা যাবে না।',
 'tmp-write-error' => 'অস্থায়ী ফাইলে লিখতে সমস্যা হয়েছে।',
 'large-file' => '$1-এর চেয়ে বড় আকারের ফাইল সুপারিশ করা হয় না; এই ফাইলটি $2।',
 'largefileserver' => 'সার্ভারে যতখানি অনুমোদিত তার চেয়ে এই ফাইলের আকার বড়।',
 'emptyfile' => 'আপনি যে ফাইলটি আপলোড করেছেন, তা খালি মনে হচ্ছে। ফাইলের নামে টাইপিং ত্রুটির কারণে এরকম হতে পারে। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি আসলেই এই ফাইলটি আপলোড করতে চান কি না।',
+'windows-nonascii-filename' => 'এই উইকি বিশেষ ক্যারেক্টারসমৃদ্ধ ফাইলের নাম সমর্থন করে না।',
 'fileexists' => "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান। অনুগ্রহ করে '''<tt>[[:$1]]</tt>''' পরীক্ষা করে দেখুন, যদি আপনি এটি পরিবর্তনের ব্যাপারে নিশ্চিত না হন। [[$1|thumb]]",
 'fileexists-extension' => "একই নামের আরেকটি ফাইল আছে: [[$2|thumb]]
 * আপলোড করা ফাইলের নাম: '''<tt>[[:$1]]</tt>'''
@@ -1402,6 +1416,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'overwroteimage' => '"[[$1]]"-এর একটি নতুন সংস্করণ আপলোড করা হয়েছে',
 'uploaddisabled' => 'আপলোড নিষ্ক্রিয় আছে',
 'copyuploaddisabled' => 'ইউআরএল এর মাধ্যমে আপলোড নিস্ক্রিয় রয়েছে।',
+'uploadfromurl-queued' => 'আপনার আপলোড সারিবদ্ধ হয়েছে।',
 'uploaddisabledtext' => 'ফাইল আপলোড নিষ্ক্রিয়।',
 'php-uploaddisabledtext' => 'পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।
 অনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।',
@@ -1418,8 +1433,10 @@ $3-এর দেয়া কারণ হল ''$2''",
 'filewasdeleted' => 'এই নামের একটি ফাইল পূর্বে আপলোড করা হয়েছিল এবং তারপর মুছে ফেলা হয়েছিল। আপনি ফাইলটি আবার আপলোড করার আগে $1 পরীক্ষা করে দেখুন।',
 'filename-bad-prefix' => "আপনি যে ফাইলটি আপলোড করছেন, তার নাম '''\"\$1\"''' দিয়ে শুরু হয়েছে। এ ধরনের নাম সাধারণত ডিজিটাল ক্যামেরাগুলি স্বয়ংক্রিয়ভাবে দিয়ে থাকে এবং এগুলি ব্যাখ্যামূলক নয়। অনুগ্রহ করে আপনার ফাইলের জন্য আরও ব্যাখ্যামূলক একটি নাম পছন্দ করুন।",
 'upload-success-subj' => 'আপলোড সফল হয়েছে',
+'upload-success-msg' => '[$2] থেকে আপনার আপলোড সফল হয়েছে। এটি এখানে: [[:{{ns:file}}:$1]] পাওয়া যাবে',
 'upload-failure-subj' => 'আপলোড সমস্যা',
 'upload-warning-subj' => 'আপলোড সতর্কীকরণ',
+'upload-warning-msg' => '[$2] থেকে করা আপনার আপলোডে সমস্যা হয়েছে। সমস্যার সমাধানকল্পে আপনাকে সম্ভবত [[Special:Upload/stash/$1|আপলোড ফর্ম]]-এ ফিরে যেতে হবে।',
 
 'upload-proto-error' => 'ভুল প্রোটোকল',
 'upload-proto-error-text' => 'দূরবর্তী আপলোডের জন্য URLগুলি <code>http://</code> বা <code>ftp://</code> দিয়ে শুরু হওয়া আবশ্যক।',
@@ -1461,6 +1478,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'http-invalid-url' => 'ভুল ইউআরএল: $1',
 'http-read-error' => 'HTTP পঠন ত্রুটি।',
 'http-timed-out' => 'HTTP অনুরোধের সময় পার হয়েছে।',
+'http-curl-error' => 'ইউআরএল নিয়ে আসার ক্ষেত্রে ত্রুটি: $1',
 'http-host-unreachable' => 'URL-এ পৌঁছানো যায়নি',
 'http-bad-status' => 'HTTP অনুরোধের সময় কোন সমস্যা হয়েছে: $1 $2',
 
@@ -1545,6 +1563,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 ** ফাইলের অনুলিপি',
 'filedelete-edit-reasonlist' => 'অপসারণের কারণ সম্পাদনা',
 'filedelete-maintenance' => 'রক্ষণাবেক্ষণের সময় ফাইল অপরাসণ এবং পুনরুদ্ধার সাময়িকভাবে নিস্ক্রিয় রয়েছে।',
+'filedelete-maintenance-title' => 'ফাইলটি অপসারণ করা সম্ভব নয়',
 
 # MIME search
 'mimesearch' => 'MIME অনুসন্ধান',
@@ -1591,7 +1610,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'statistics-users-active-desc' => 'ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।',
 'statistics-mostpopular' => 'সবচেয়ে বেশী বার দেখা পাতাসমূহ',
 
-'disambiguations' => 'দ্ব্যর্থতা-দূরীকরণ পাতাসমূহ',
+'disambiguations' => 'দ্ব্যর্থতা-দূরীকরণ পাতাসমূহে সংযোগকৃত পাতাসমূহ',
 'disambiguationspage' => 'Template:দ্ব্যর্থতা_নিরসন',
 'disambiguations-text' => "নিচের পাতাগুলি থেকে একটি '''দ্ব্যর্থতা নিরসন পাতা'''-তে সংযোগ আছে। এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
 
@@ -1709,6 +1728,10 @@ $3-এর দেয়া কারণ হল ''$2''",
 'allpagesprefix' => 'এই উপসর্গবিশিষ্ট পাতাগুলো দেখাও:',
 'allpagesbadtitle' => 'প্রদত্ত পাতার শিরোনামটি অবৈধ ছিল অথবা এটিতে কোন আন্তঃভাষা বা আন্তঃউইকি উপসর্গ ছিল। এটিতে এক বা একাধিক ক্যারেক্টার থাকতে পারে যা শিরোনামে ব্যবহার করা সম্ভব নয়।',
 'allpages-bad-ns' => '{{SITENAME}}-এ "$1" নামের কোন নামস্থান নেই।',
+'allpages-hide-redirects' => 'পুনর্নির্দেশনাগুলো লুকাও',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'সাম্প্রতিকগুলো প্রদর্শন করো।',
 
 # Special:Categories
 'categories' => 'বিষয়শ্রেণীসমূহ',
@@ -1842,7 +1865,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'enotif_lastvisited' => 'আপনার শেষ আগমনের পরে সংঘটিত সমস্ত পরিবর্তনের জন্য $1 দেখুন।',
 'enotif_lastdiff' => 'এই পরিবর্তনটি দেখার জন্য $1 দেখুন।',
 'enotif_anon_editor' => 'বেনামী ব্যবহারকারী $1',
-'enotif_body' => 'প্রিয় $WATCHINGUSERNAME,
+'enotif_body' => '!প্রিয় $WATCHINGUSERNAME,
 
 {{SITENAME}}-এর $PAGETITLE শিরোনামের পাতাটি $PAGEEDITDATE তারিখে $PAGEEDITOR $CHANGEDORCREATED করেছেন। পাতাটির বর্তমান সংস্করণের জন্য $PAGETITLE_URL দেখুন।
 
@@ -1930,7 +1953,8 @@ $UNWATCHURL
 
 # Protect
 'protectlogpage' => 'সুরক্ষা লগ',
-'protectlogtext' => 'নিচে পাতা বন্ধ ও খোলার একটি তালিকা দেয়া হল। বর্তমানে সক্রিয় পাতার সুরক্ষাগুলির তালিকা দেখতে [[Special:ProtectedPages|সুরক্ষিত পাতার তালিকা]] দেখুন।',
+'protectlogtext' => 'নিচে সুরক্ষিত পাতার  একটি তালিকা দেয়া হল। 
+বর্তমানে সক্রিয় পাতার সুরক্ষাগুলির তালিকা দেখতে [[Special:ProtectedPages|সুরক্ষিত পাতার তালিকা]] দেখুন।',
 'protectedarticle' => 'সুরক্ষিত "[[$1]]"',
 'modifiedarticleprotection' => '"[[$1]]"-এর জন্য সুরক্ষার স্তর পরিবর্তন করা হয়েছে',
 'unprotectedarticle' => '"[[$1]]"-এর সুরক্ষা সরিয়ে নেওয়া হয়েছে',
@@ -1955,6 +1979,7 @@ $UNWATCHURL
 'protect-level-sysop' => 'কেবল প্রশাসকদের জন্য',
 'protect-summary-cascade' => 'প্রপাতাকার',
 'protect-expiring' => '$1 (UTC) সময়ে মেয়াদোত্তীর্ণ',
+'protect-expiring-local' => 'মেয়াদ উত্তীর্ণের সময় $1',
 'protect-expiry-indefinite' => 'অসীম',
 'protect-cascade' => 'এই পাতায় অন্তর্ভুক্ত পাতাগুলিও সুরক্ষিত করা হোক (প্রপাতাকার সুরক্ষা)',
 'protect-cantedit' => 'আপনি এই পাতার সুরক্ষার স্তর পরিবর্তন করতে পারবেন না, কারণ আপনার তা সম্পাদনা করার অনুমতি নেই।',
@@ -2277,12 +2302,14 @@ $1',
 পাতা রপ্তানি করতে চাইলে নিচের টেক্সট বাক্সে শিরোনামগুলি প্রবেশ করান, প্রতি লাইনে একটি শিরোনাম দিয়ে, এবং নির্বাচন করুন আপনি বর্তমান সংস্করণসহ সবগুলি পুরনো সংস্করণ পাতার ইতিহাসের লাইনসহ রপ্তানি করতে চান, নাকি কেবল সর্বশেষ সম্পাদনাটির তথ্যসহ বর্তমান সংস্করণটি রপ্তানি করতে চান।
 
 দ্বিতীয় ক্ষেত্রটিতে আপনি একটি সংযোগও ব্যবহার করতে পারেন, যেমন "[[{{MediaWiki:Mainpage}}]]" পাতাটির জন্য [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।',
+'exportall' => 'সকল পাতা রপ্তানি',
 'exportcuronly' => 'সম্পূর্ণ ইতিহাস নয়, কেবল বর্তমান সংশোধনটি অন্তর্ভুক্ত করা হোক',
 'exportnohistory' => "----
 '''লক্ষ্য করুন:''' কর্মদক্ষতা-সম্পর্কিত কারণের জন্য এই ফর্মের মাধ্যমে কোন পাতার সমগ্র ইতিহাস রপ্তানি করা নিষ্ক্রিয় করা হয়েছে।",
 'export-submit' => 'রপ্তানি করা হোক',
 'export-addcattext' => 'এই বিষয়শ্রেণী থেকে পাতা যোগ করা হোক:',
 'export-addcat' => 'যোগ',
+'export-addnstext' => 'নামস্থান থেকে পাতা যুক্ত করুন:',
 'export-addns' => 'যোগ',
 'export-download' => 'ফাইল হিসেবে সংরক্ষণ করা হোক',
 
@@ -2354,6 +2381,9 @@ $1',
 'import-logentry-interwiki' => '$1 উইকি-স্থানান্তরিত',
 'import-logentry-interwiki-detail' => '$2-এর করা $1 {{PLURAL:$1|সংশোধন|টি সংশোধন}}',
 
+# JavaScriptTest
+'javascripttest' => 'জাভাস্ক্রিপ্ট পরীক্ষা',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'আপনার ব্যবহারকারী পাতা',
 'tooltip-pt-anonuserpage' => 'যে আইপি ঠিকানা থেকে আপনি সম্পাদনা করছেন, তার ব্যবহারকারী পাতা',
@@ -2414,6 +2444,7 @@ $1',
 'tooltip-diff' => 'আপনি টেক্সটে কী কী পরিবর্তন করেছেন, তা দেখানো হোক।',
 'tooltip-compareselectedversions' => 'এই পাতার দুইটি নির্বাচিত সংস্করণের মধ্যে তুলনা দেখুন।',
 'tooltip-watch' => 'এই পাতাটি আমার নজরতালিকায় যোগ করো',
+'tooltip-watchlistedit-normal-submit' => 'শিরোনাম অপসারণ',
 'tooltip-recreate' => 'মুছে ফেলা সত্ত্বেও পাতাটি পুনরায় সৃষ্টি করুন',
 'tooltip-upload' => 'আপলোড শুরু করো',
 'tooltip-rollback' => '"পুনর্বহাল" এই পাতায় সর্বশেষ অবদানকারীর সম্পাদনাসমূহ বাতিল করে পাতাটিকে পূর্বাবস্থায় ফিরিয়ে দেয়',
@@ -2867,6 +2898,7 @@ $1',
 # Pseudotags used for GPSDestDistanceRef
 'exif-gpsdestdistance-k' => 'কিলোমিটার',
 'exif-gpsdestdistance-m' => 'ফাইল',
+'exif-gpsdestdistance-n' => 'নটিক্যাল মাইল',
 
 'exif-gpsdop-excellent' => 'খুব ভাল ($1)',
 'exif-gpsdop-good' => 'ভাল ($1)',
@@ -2894,6 +2926,7 @@ $1',
 
 'exif-rating-rejected' => 'প্রত্যাখাত',
 
+'exif-iimcategory-ace' => 'শিল্প, সংস্কৃতি এবং বিনোদন',
 'exif-iimcategory-clj' => 'অপরাধ ও আইন',
 'exif-iimcategory-dis' => 'দুর্যোগ ও দুর্ঘটনা',
 'exif-iimcategory-fin' => 'অর্থনীতি এবং বাণিজ্য',
@@ -2972,11 +3005,13 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 # action=purge
 'confirm_purge_button' => 'ঠিক আছে',
 'confirm-purge-top' => 'এই পাতার ক্যাশে পরিষ্কার করতে চান?',
+'confirm-purge-bottom' => 'ক্যাশে পরিস্কারের মাধ্যমে পাতাটির সবচেয়ে সাম্প্রতিক সংস্করণটি প্রদর্শিত হবে।',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ঠিক আছে',
 'confirm-watch-top' => 'এই পাতাটি আপনার নজরতালিকায় যুক্ত করা হবে?',
 'confirm-unwatch-button' => 'ঠিক আছে',
+'confirm-unwatch-top' => 'এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলতে ইচ্ছুক?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← পূর্ববর্তী পাতা',
@@ -3065,6 +3100,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'version-software' => 'ইনস্টলকৃত সফটওয়্যার',
 'version-software-product' => 'পণ্য',
 'version-software-version' => 'সংস্করণ',
+'version-entrypoints-header-url' => 'ইউআরএল',
 
 # Special:FilePath
 'filepath' => 'ফাইলের পাথ',
@@ -3156,8 +3192,24 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 # 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 শিরোনামে স্থানান্তর করেছেন',
+'logentry-move-move-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
+'logentry-move-move_redir' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার ওপর দিয়ে স্থানান্তর করেছেন',
+'logentry-move-move_redir-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনার ওপর দিয়ে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
+'logentry-patrol-patrol' => '$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
+'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে চিহ্নিত করেছেন',
+'logentry-newusers-newusers' => '$1 একটি অ্যাকাউন্ট তৈরি করেছেন',
+'logentry-newusers-create' => '$1 একটি অ্যাকাউন্ট তৈরি করেছেন',
+'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামে একটি অ্যাকাউন্ট তৈরি করেছেন',
+'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে',
 'newuserlog-byemail' => 'শব্দচাবি ইমেইলের মাধ্যমে পাঠানো হয়েছে',
 
 # Feedback
@@ -3169,7 +3221,10 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'feedback-error1' => 'ত্রুটি: এপিআই থেকে অজানা ফলাফল এসেছে',
 'feedback-error2' => 'ত্রুটি: সম্পাদনা ব্যর্থ',
 'feedback-error3' => 'ত্রুটি: এপিআই থেকে কোন সাড়া নেই',
+'feedback-thanks' => 'ধন্যবাদ! আপনার মতামত "[$2 $1]" পাতায় করা হয়েছে।',
 'feedback-close' => 'সম্পন্ন',
+'feedback-bugcheck' => 'উত্তম! পরিক্ষা করে দেখুন অবিলম্বে  [$1  জানা বাগ] কিনা।',
+'feedback-bugnew' => 'আমি পরীক্ষা করেছি। নতুন একটি বাগ রিপোর্ট করুন।',
 
 # API errors
 'api-error-badaccess-groups' => 'আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।',
@@ -3180,6 +3235,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'api-error-duplicate-archive-popup-title' => 'অনুলিপি {{PLURAL:$1|ফাইল|ফাইল}} যা ইতমধ্যে অপসারণ করা হয়েছে',
 'api-error-duplicate-popup-title' => 'অনুলিপি {{PLURAL:$1|ফাইল|ফাইল}}',
 'api-error-empty-file' => 'আপনার জমাদানকৃত ফাইলটি খালি।',
+'api-error-emptypage' => 'নতুন ও খালি পাতা তৈরি গ্রহণযোগ্য নয়।',
 'api-error-fetchfileerror' => 'অভ্যন্তরীণ ত্রুটি: ফাইল নিয়ে আসার সময় কোনো সমস্যা হয়েছিলো।',
 'api-error-file-too-large' => 'আপনার জমাদানকৃত ফাইলটি অনেক বড়।',
 'api-error-filename-tooshort' => 'এই ফাইল নামটি খুবই ছোট।',
@@ -3204,6 +3260,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'api-error-unknown-code' => 'অজানা ত্রুটি: "$1"',
 'api-error-unknown-error' => 'অভ্যন্তরীণ ত্রুটি: আপনার ফাইলটি আপলোড করার সময় কিছু সমস্যা হয়েছে।',
 'api-error-unknown-warning' => 'অজানা সতর্কীকরণ: $1',
+'api-error-unknownerror' => 'অজানা ত্রুটি: "$1"',
 'api-error-uploaddisabled' => 'এই উইকির জন্য আপলোড সুবিধা নিস্ক্রিয় রয়েছে।',
 'api-error-verification-error' => 'সম্ভবত এই ফাইলটি ত্রুটিপূর্ণ অথবা এর এক্সটেনশনটি ভুল।',
 
index 7d8dd6c..5112c58 100644 (file)
@@ -813,7 +813,6 @@ $2',
 
 # Diffs
 'history-title' => '"$1"-র রিভিসন ইতিহাসহান',
-'difference' => '(রিভিসনহানির ফারাকহান)',
 'lineno' => 'লাইন $1:',
 'compareselectedversions' => 'বাসাইল সংস্করণহানি তুলনা কর',
 'showhideselectedversions' => 'বাসিসি রিভিশনহানি দেখাদে/গুর',
index 729184c..12ff736 100644 (file)
@@ -17,317 +17,317 @@ $fallback = 'fa';
 
 $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'          => 'اضاف کردن اوصفحاتی که خوم درست کردم به فهرست نمایشی',
-'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'          => 'بی دقتی در استفاده از اصلاح کننده های خارجی',
-'tog-externaldiff'            => 'استفاده زه برنامه های مختلف خارجی بوسیله پیش نمایش(سی تجربه کردن فقط نیاز به تنظیم خاص کامپیوترتان دارین)',
-'tog-showjumplinks'           => 'قادر ساختن "پرش به" لینکهای دردسترس',
-'tog-uselivepreview'          => 'استفاده زه پیش نمایش زنده(جاوااسکریپ) (تجربی )',
-'tog-forceeditsummary'        => 'یادآوری سریع به مو هنگام اصلاح عقیم وخلاصه',
-'tog-watchlisthideown'        => 'قایم کردن اصلاحات مو  زه لیست پیگیریها',
-'tog-watchlisthidebots'       => 'قایم کردن اصلاحات بوت زه لیست پیگیریها',
-'tog-watchlisthideminor'      => 'قایم کردن اصلاحات ریز زه لیست پیگیریها',
-'tog-watchlisthideliu'        => 'قایم کردن اصلاحات انجام وابیده  بوسیله کاربران داخل سیستم وابیده زه لیست پیگیریها',
-'tog-watchlisthideanons'      => 'قایم کردن اصلاحات انجام شده بوسیله کاربران داخل سیستم نشده زه لیست پیگیری',
-'tog-ccmeonemails'            => 'ارسال کپی امیلهایی که مو به  کاربران دیه ارسال کردم به مو',
-'tog-diffonly'                => 'نشو نده صفحه ای که دارای محتوای متفاوت زیره',
-'tog-showhiddencats'          => 'نشودادن دسته بندیهای قایم شده',
-
-'underline-always'  => 'همیشه',
-'underline-never'   => 'هرگز',
+'tog-showtoc' => 'نشودادن فهرست محتوا سی صفحاتی که بیشتر زه سه سرخط دارن',
+'tog-rememberpassword' => 'به حافظه کامپیوتر دادن نحوه ورودی خوم (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'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' => 'بی دقتی در استفاده از اصلاح کننده های خارجی',
+'tog-externaldiff' => 'استفاده زه برنامه های مختلف خارجی بوسیله پیش نمایش(سی تجربه کردن فقط نیاز به تنظیم خاص کامپیوترتان دارین)',
+'tog-showjumplinks' => 'قادر ساختن "پرش به" لینکهای دردسترس',
+'tog-uselivepreview' => 'استفاده زه پیش نمایش زنده(جاوااسکریپ) (تجربی )',
+'tog-forceeditsummary' => 'یادآوری سریع به مو هنگام اصلاح عقیم وخلاصه',
+'tog-watchlisthideown' => 'قایم کردن اصلاحات مو  زه لیست پیگیریها',
+'tog-watchlisthidebots' => 'قایم کردن اصلاحات بوت زه لیست پیگیریها',
+'tog-watchlisthideminor' => 'قایم کردن اصلاحات ریز زه لیست پیگیریها',
+'tog-watchlisthideliu' => 'قایم کردن اصلاحات انجام وابیده  بوسیله کاربران داخل سیستم وابیده زه لیست پیگیریها',
+'tog-watchlisthideanons' => 'قایم کردن اصلاحات انجام شده بوسیله کاربران داخل سیستم نشده زه لیست پیگیری',
+'tog-ccmeonemails' => 'ارسال کپی امیلهایی که مو به  کاربران دیه ارسال کردم به مو',
+'tog-diffonly' => 'نشو نده صفحه ای که دارای محتوای متفاوت زیره',
+'tog-showhiddencats' => 'نشودادن دسته بندیهای قایم شده',
+
+'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|ای دسته فقط دسته های فرعی زیر راداره.|ای دسته چیزهای زیر راداره {{PLURAL:$1|دسته فرعی|$1 دسته های فرعی}}, بیشتراز$2 کل.}}',
-'category-subcat-count-limited'  => 'ای دسته چیزهای زیر راداره {{PLURAL:$1|دسته فرعی|$1 دسته های فرعی}}.',
-'category-article-count'         => '{{PLURAL:$2|ای دسته فقط دارای صفحات زیره.|ذیل الذکر{{PLURAL:$1|صفحه است|$1 صفحات هستند}} دراین دسته, بیشترزه$2 کل.}}',
+'pagecategories' => '{{PLURAL:$1|دسته|دسته ها}}',
+'category_header' => 'صفحات دردسته "$1"',
+'subcategories' => 'دسته های فرعی',
+'category-media-header' => 'مدیا دردسته "$1"',
+'category-empty' => 'ای دسته درحال حاضر دارای هیچ صفحه یا مدیایی نه',
+'hidden-categories' => '{{PLURAL:$1|دسته قایم|دسته های قایم}}',
+'hidden-category-category' => 'دسته های قایم',
+'category-subcat-count' => '{{PLURAL:$2|ای دسته فقط دسته های فرعی زیر راداره.|ای دسته چیزهای زیر راداره {{PLURAL:$1|دسته فرعی|$1 دسته های فرعی}}, بیشتراز$2 کل.}}',
+'category-subcat-count-limited' => 'ای دسته چیزهای زیر راداره {{PLURAL:$1|دسته فرعی|$1 دسته های فرعی}}.',
+'category-article-count' => '{{PLURAL:$2|ای دسته فقط دارای صفحات زیره.|ذیل الذکر{{PLURAL:$1|صفحه است|$1 صفحات هستند}} دراین دسته, بیشترزه$2 کل.}}',
 'category-article-count-limited' => 'ذیل الذکر {{PLURAL:$1|صفحه است|$1 صفحات هستند}} درآن دسته جریانی.',
-'category-file-count'            => '{{PLURAL:$2|ای دسته فقط فایلهای زیر راداره.|ذیل الذکر{{PLURAL:$1|فایل است|$1 فایلهاهستند}} درای دسته, بیشترزه$2 کل.}}',
-'category-file-count-limited'    => 'ذیل الذکر {{PLURAL:$1|فایل است|$1 فایلها هستند}} درآن دسته جریانی.',
-'listingcontinuesabbrev'         => 'دنباله',
+'category-file-count' => '{{PLURAL:$2|ای دسته فقط فایلهای زیر راداره.|ذیل الذکر{{PLURAL:$1|فایل است|$1 فایلهاهستند}} درای دسته, بیشترزه$2 کل.}}',
+'category-file-count-limited' => 'ذیل الذکر {{PLURAL:$1|فایل است|$1 فایلها هستند}} درآن دسته جریانی.',
+'listingcontinuesabbrev' => 'دنباله',
 
-'about'     => 'درباره',
+'about' => 'درباره',
 'newwindow' => '(پنجره تازه واز کن)',
-'cancel'    => 'لغو',
-'mytalk'    => 'صحبت مو',
+'cancel' => 'لغو',
+'mytalk' => 'صحبت مو',
 
 # Cologne Blue skin
-'qbfind'  => 'پیدا کردن',
-'qbedit'  => 'اصلاح',
-'faq'     => 'اف ای کیو',
+'qbfind' => 'پیدا کردن',
+'qbedit' => 'اصلاح',
+'faq' => 'اف ای کیو',
 'faqpage' => 'Project:اف ای کیو',
 
-'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' => 'صحبت',
-'specialpage'      => 'صفحه مخصوص',
-'personaltools'    => 'ابزارهای شخصی',
-'postcomment'      => 'ارسال یک توضیح',
-'articlepage'      => 'دیدن صفحه محتوا',
-'talk'             => 'بحث',
-'views'            => 'مشاهدات',
-'toolbox'          => '
+'specialpage' => 'صفحه مخصوص',
+'personaltools' => 'ابزارهای شخصی',
+'postcomment' => 'ارسال یک توضیح',
+'articlepage' => 'دیدن صفحه محتوا',
+'talk' => 'بحث',
+'views' => 'مشاهدات',
+'toolbox' => '
 جعبه ابزار',
-'userpage'         => 'دیدن صفحه کاربر',
-'projectpage'      => 'دیدن صفحه پروژه',
-'imagepage'        => 'دیدن صفحه مدیا',
-'mediawikipage'    => 'دیدن صفحه پیام',
-'templatepage'     => 'دیدن صفحه قالب',
-'viewhelppage'     => 'دیدن صفحه کمک',
-'categorypage'     => 'دیدن صفحه طبقه بندی',
-'viewtalkpage'     => 'دیدن بحث ها',
-'otherlanguages'   => 'درزبانهای دیگر',
-'redirectedfrom'   => '(تصحیح مجدداز$1)',
-'redirectpagesub'  => 'صفحه تصحیح وهدایت مجدد',
-'lastmodifiedat'   => 'این صفحه اخیرا تغییر واصلاح شددر $1, در $2.',
-'viewcount'        => 'این صفحه قابل دسترسی شده است {{PLURAL:$1|once|$1 times}}.',
-'protectedpage'    => 'صفحه حمایت شده',
-'jumpto'           => 'پریدن به:',
+'userpage' => 'دیدن صفحه کاربر',
+'projectpage' => 'دیدن صفحه پروژه',
+'imagepage' => 'دیدن صفحه مدیا',
+'mediawikipage' => 'دیدن صفحه پیام',
+'templatepage' => 'دیدن صفحه قالب',
+'viewhelppage' => 'دیدن صفحه کمک',
+'categorypage' => 'دیدن صفحه طبقه بندی',
+'viewtalkpage' => 'دیدن بحث ها',
+'otherlanguages' => 'درزبانهای دیگر',
+'redirectedfrom' => '(تصحیح مجدداز$1)',
+'redirectpagesub' => 'صفحه تصحیح وهدایت مجدد',
+'lastmodifiedat' => 'این صفحه اخیرا تغییر واصلاح شددر $1, در $2.',
+'viewcount' => 'این صفحه قابل دسترسی شده است {{PLURAL:$1|once|$1 times}}.',
+'protectedpage' => 'صفحه حمایت شده',
+'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'            => 'محتوا باای شماره قابل دسترسیه
+'aboutsite' => 'درباره {{SITENAME}}',
+'aboutpage' => 'Project:درباره',
+'copyright' => 'محتوا باای شماره قابل دسترسیه
  $1.',
-'copyrightpage'        => '{{ns:project}}:کپی رایت',
-'currentevents'        => 'اتفاقات جاری',
-'currentevents-url'    => 'Project:اتفاقات جاری',
-'disclaimers'          => 'انکار کننده ها',
-'disclaimerpage'       => 'Project:انکار کاربران',
-'edithelp'             => 'کمک برای اصلاح',
-'edithelppage'         => 'Help:اصلاح',
-'helppage'             => 'Help:محتوا',
-'mainpage'             => 'صفحه اصلی',
+'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'     => 'یه نسخه زه نیازمندیهای ویکی مدیا
+'versionrequired' => 'یه نسخه زه نیازمندیهای ویکی مدیا
 $1',
 'versionrequiredtext' => 'یه نسخه زه ویکی مدیا($1) نیازمند ه به استفاده زه ای صفحه
 بوین :[[Special:Version|version page]].',
 
-'ok'                      => 'خووه',
+'ok' => 'خووه',
 'pagetitle-view-mainpage' => 'سرصفحه',
-'retrievedfrom'           => 'بازیافت از"$1"',
-'youhavenewmessages'      => 'پیام تاره داری $1 ($2).',
-'newmessageslink'         => 'پیام تازه',
-'newmessagesdifflink'     => 'تغییر آخری',
+'retrievedfrom' => 'بازیافت از"$1"',
+'youhavenewmessages' => 'پیام تاره داری $1 ($2).',
+'newmessageslink' => 'پیام تازه',
+'newmessagesdifflink' => 'تغییر آخری',
 'youhavenewmessagesmulti' => 'ایسا پیام تازه دارین منه
 $1',
-'editsection'             => 'اصلاح',
-'editold'                 => 'اصلاح',
-'viewsourceold'           => 'دیدن منبع',
-'editsectionhint'         => 'اصلاح یه قسمت: $1',
-'toc'                     => 'محتواها',
-'showtoc'                 => 'نمایش',
-'hidetoc'                 => 'قایم',
-'thisisdeleted'           => 'دیدن یا اعاده $1?',
-'viewdeleted'             => 'دیدن$1?',
-'restorelink'             => '{{PLURAL:$1|پاک کردن یه اصلاح|$1 پاک کردن اصلاحات}}',
-'feedlinks'               => 'تغذیه:',
-'feed-invalid'            => 'اشتراک  زه راه  تایپ باطله',
-'site-rss-feed'           => 'خبرخو RSS سی $1',
-'site-atom-feed'          => 'خبرخو Atom سی $1',
-'page-rss-feed'           => 'خبرخو RSS سی «$1»',
+'editsection' => 'اصلاح',
+'editold' => 'اصلاح',
+'viewsourceold' => 'دیدن منبع',
+'editsectionhint' => 'اصلاح یه قسمت: $1',
+'toc' => 'محتواها',
+'showtoc' => 'نمایش',
+'hidetoc' => 'قایم',
+'thisisdeleted' => 'دیدن یا اعاده $1?',
+'viewdeleted' => 'دیدن$1?',
+'restorelink' => '{{PLURAL:$1|پاک کردن یه اصلاح|$1 پاک کردن اصلاحات}}',
+'feedlinks' => 'تغذیه:',
+'feed-invalid' => 'اشتراک  زه راه  تایپ باطله',
+'site-rss-feed' => 'خبرخو RSS سی $1',
+'site-atom-feed' => 'خبرخو Atom سی $1',
+'page-rss-feed' => 'خبرخو RSS سی «$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'   => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرسته
+'badtitle' => 'عنوان بد',
+'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرسته
 و ممکنه دارای یک یا چند کاراکتر بوه که در عنوان مربوط نوا زش استفاده کنین',
-'viewsource'     => 'مشاهده منبع',
+'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".
 حروف نام را چک کنین, یا [[Special:UserLogin/signup|درست کنین یه حساب کاربری تازه]].',
-'nosuchusershort'         => 'کاربری به ای نام وجود نداره"$1".
+'nosuchusershort' => 'کاربری به ای نام وجود نداره"$1".
 حروف نام راچک کنین.',
-'nouserspecified'         => 'ایسا دارین یه نام کاربر ذکر اکنین.',
-'wrongpassword'           => 'رمز وارد وابیده درست نه.
+'nouserspecified' => 'ایسا دارین یه نام کاربر ذکر اکنین.',
+'wrongpassword' => 'رمز وارد وابیده درست نه.
 لطفا دوباره سعی کنین.',
-'wrongpasswordempty'      => 'رمز وارد وابیده عقیم یامبهم بی.
+'wrongpasswordempty' => 'رمز وارد وابیده عقیم یامبهم بی.
 لطفا دوباره سعی کنین.',
-'passwordtooshort'        => 'رمز ایسا غیر معتبر یا کوتاه هده.
+'passwordtooshort' => 'رمز ایسا غیر معتبر یا کوتاه هده.
 آن وا داشته بوه حداقل {{PLURAL:$1|1 کاراکتر|$1 کاراکترها}} همچنین وا زه نام کاربریتو متفاوت بوه.',
-'mailmypassword'          => 'امیل رمز تازه',
-'passwordremindertitle'   => 'رمز موقتی تازه سی {{SITENAME}}',
-'passwordremindertext'    => 'یه نفر (شاید خودتو, زه نشانی آی پی$1) درخواست یه رمز تازه کرده سی {{SITENAME}} ($4). یه رمز موقتی سی کاربر
+'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'    => '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' => "'''توجه:''' ایسا داخل سیستم نوابیدین.
 آی پی آدرستو درگزارش اصلاح صفحه ضبط ابوه.",
-'summary-preview'            => 'پیش نمایش - خلاصه:',
-'blockedtext'                => ' "\'\'\'دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.\'\'\'
+'summary-preview' => 'پیش نمایش - خلاصه:',
+'blockedtext' => ' "\'\'\'دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.\'\'\'
 ای کار توسط $1 انجام شده‌است.
 دلیلی که گده اینه: $2\'\'
 * آغاز قطع دسترسی: $8
@@ -340,69 +340,68 @@ $1',
 دقت کنین که سی ارسال پست الکترونیکی در ویکی، وا پست الکترونیکی خود را زه طریق صفحه[[Special:Preferences|تنظیمات]] فعال کرده بوین، و نیز، وا امکان استفاده زه ای ویژگی سی ایساقطع نبوه.
 نشانی اینترنتی الان ایسا $3 است و شماره قطع دسترسی $5 است.
 لطفاً ای شماره را در هر درخواستی که در ای مورد مطرح اکنین ذکر کنین',
-'newarticle'                 => '(تازه)',
-'newarticletext'             => 'ایسا لینکی را دنبال کردین و به صفحه‌ای رسیدین که هنی درست نوابیده.
+'newarticle' => '(تازه)',
+'newarticletext' => 'ایسا لینکی را دنبال کردین و به صفحه‌ای رسیدین که هنی درست نوابیده.
 سی ایجاد صفحه، داخل مستطیل زیر شروع به تایپ کنین (سی اطلاعات بیشتر به [[{{ns:project}}:راهنما|صفحه راهنما]] برین).
 ایر اشتباهی ایچو اویدین دکمه «برگشت» مرورگرتو را بزنین.',
-'noarticletext'              => ' الان ای صفحه متنی نداره، ایسا ترین [[Special:Search/{{PAGENAME}}عنوان ای صفحه را در صفحه‌های دیگر جستجو کنین]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای صفحه را اصلاح کنین].',
-'previewnote'                => "'''ای فقط یه پیش نمایشه;
+'noarticletext' => ' الان ای صفحه متنی نداره، ایسا ترین [[Special:Search/{{PAGENAME}}عنوان ای صفحه را در صفحه‌های دیگر جستجو کنین]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای صفحه را اصلاح کنین].',
+'previewnote' => "'''ای فقط یه پیش نمایشه;
 تغییراتی که ایسا دادین هنی ضبط نوابیده!'''",
-'editing'                    => 'درحال اصلاح $1',
-'editingsection'             => 'درحال اصلاح $1 (قسمت)',
-'copyrightwarning'           => "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا  {{SITENAME}} تحت «$2» منتشر ابون ).
+'editing' => 'درحال اصلاح $1',
+'editingsection' => 'درحال اصلاح $1 (قسمت)',
+'copyrightwarning' => "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا  {{SITENAME}} تحت «$2» منتشر ابون ).
 
 
 (سی دیدن  جزئیات بیشتر به $1 برین
 
 ایر نه خوین نوشته‌هاتو بی‌رحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.<br />
 درضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بی‌اجازه نفرستین!'''',",
-'templatesused'              => 'قالبهای استفاده شده من ای صفحه:',
-'templatesusedpreview'       => 'قالبها  یا الگوهای استفاده وابیده در ای پیش نمایش:',
-'template-protected'         => '(تحت حمایت)',
-'template-semiprotected'     => '(نیمه حمایت وابیده)',
-'nocreatetext'               => '{{SITENAME}}قابلیت درست کردن صفحات تازه را محدود کرده‌. ترین برگردین و صفحه‌ موجود را اصلاح کنین یا اینکه  [[Special:UserLogin|به سیستم داخل بوین یا حساب کاربری درست کنین]].',
+'templatesused' => 'قالبهای استفاده شده من ای صفحه:',
+'templatesusedpreview' => 'قالبها  یا الگوهای استفاده وابیده در ای پیش نمایش:',
+'template-protected' => '(تحت حمایت)',
+'template-semiprotected' => '(نیمه حمایت وابیده)',
+'nocreatetext' => '{{SITENAME}}قابلیت درست کردن صفحات تازه را محدود کرده‌. ترین برگردین و صفحه‌ موجود را اصلاح کنین یا اینکه  [[Special:UserLogin|به سیستم داخل بوین یا حساب کاربری درست کنین]].',
 'recreate-moveddeleted-warn' => "'''هشدار: ایسا در حال درست کردن دوباره صفحه‌ای هدین که قبلاً حذف وابیده '''در نظر داشته بوین که ادامه اصلاح ای صفحه کار درستی هده یا نه. نمایه حذف مربوط به ای صفحه سی راحتی کار در ادامه اویده",
 
 # History pages
-'viewpagelogs'        => 'نشودادن نمایه ها سی ای صفحه',
-'currentrev'          => 'نسخه جاری',
-'revisionasof'        => 'اصلاح $1',
-'revision-info'       => 'یه نسخه اصلاح شده درتاریخ  $1 بوسیله $2',
-'previousrevision'    => '← اصلاح قبلی',
-'nextrevision'        => 'نسخه بعدی →',
+'viewpagelogs' => 'نشودادن نمایه ها سی ای صفحه',
+'currentrev' => 'نسخه جاری',
+'revisionasof' => 'اصلاح $1',
+'revision-info' => 'یه نسخه اصلاح شده درتاریخ  $1 بوسیله $2',
+'previousrevision' => '← اصلاح قبلی',
+'nextrevision' => 'نسخه بعدی →',
 'currentrevisionlink' => 'نسخه جاری',
-'cur'                 => 'فعلی',
-'last'                => 'قبلی',
-'page_first'          => 'اولین',
-'page_last'           => 'آخری',
-'histlegend'          => "انتخاب متفاوت: علامت بنین رو رادیو جعبه ها زه آن نسخه ها سی مقایسه وامتیاز دادن ویا داخل تکمه های زیر سی مسابقه بوین  .<br />
+'cur' => 'فعلی',
+'last' => 'قبلی',
+'page_first' => 'اولین',
+'page_last' => 'آخری',
+'histlegend' => "انتخاب متفاوت: علامت بنین رو رادیو جعبه ها زه آن نسخه ها سی مقایسه وامتیاز دادن ویا داخل تکمه های زیر سی مسابقه بوین  .<br />
 'شرح: (فعلی) = تفاوت با نسخه جاری
 (قبلی) = تفاوت با نسخه قبلی، جز = ویرایش جزئی',",
-'histfirst'           => 'کهنه ترین',
-'histlast'            => 'تازه ترین',
+'histfirst' => 'کهنه ترین',
+'histlast' => 'تازه ترین',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 در $2',
 
 # 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}}:مدیران',
@@ -411,39 +410,39 @@ $1',
 'rightslog' => 'نمایه حقوق کاربر',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|تغییر|تغییرات}}',
-'recentchanges'                  => 'تغییرات اخیر',
+'nchanges' => '$1 {{PLURAL:$1|تغییر|تغییرات}}',
+'recentchanges' => 'تغییرات اخیر',
 'recentchanges-feed-description' => 'ردیابی آخرین تغییرات  ویکی در ای خورد',
-'rcnote'                         => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $5، $4 ابینین.",
-'rcnotefrom'                     => 'در زیر تغییرات زه تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشو داده ابوه).',
-'rclistfrom'                     => 'نشودادن تغییرات تازه با شروع زه $1',
-'rcshowhideminor'                => 'اصلاحات کوچیک $1',
-'rcshowhidebots'                 => '$1 ربات‌ها یا بوتها',
-'rcshowhideliu'                  => '$1 کاربران داخل وابیده',
-'rcshowhideanons'                => '$1 کاربران داخل نوابیده',
-'rcshowhidepatr'                 => '$1 اصلاحات پاسداری شده',
-'rcshowhidemine'                 => '$1 اصلاحات مو',
-'rclinks'                        => 'نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3',
-'diff'                           => 'تفاوت',
-'hist'                           => 'گزارش',
-'hide'                           => 'قایم شدن',
-'show'                           => 'نشودادن',
-'minoreditletter'                => 'رز',
-'newpageletter'                  => 'تا',
-'boteditletter'                  => 'ر',
+'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $5، $4 ابینین.",
+'rcnotefrom' => 'در زیر تغییرات زه تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشو داده ابوه).',
+'rclistfrom' => 'نشودادن تغییرات تازه با شروع زه $1',
+'rcshowhideminor' => 'اصلاحات کوچیک $1',
+'rcshowhidebots' => '$1 ربات‌ها یا بوتها',
+'rcshowhideliu' => '$1 کاربران داخل وابیده',
+'rcshowhideanons' => '$1 کاربران داخل نوابیده',
+'rcshowhidepatr' => '$1 اصلاحات پاسداری شده',
+'rcshowhidemine' => '$1 اصلاحات مو',
+'rclinks' => 'نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3',
+'diff' => 'تفاوت',
+'hist' => 'گزارش',
+'hide' => 'قایم شدن',
+'show' => 'نشودادن',
+'minoreditletter' => 'رز',
+'newpageletter' => 'تا',
+'boteditletter' => 'ر',
 
 # 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]]"',
 
@@ -451,19 +450,19 @@ $1',
 'listfiles' => 'لیست فایل',
 
 # File description page
-'file-anchor-link'          => 'فایل',
-'filehist'                  => 'گزارش تاریخی فایل',
-'filehist-help'             => 'رو تاریخ‌ها کلیک کنید تا نسخه مرتبط را ببینین.',
-'filehist-current'          => 'جاری',
-'filehist-datetime'         => 'تاریخ/زمان',
-'filehist-user'             => 'کاربر',
-'filehist-dimensions'       => 'ابعاد',
-'filehist-filesize'         => 'اندازه فایل',
-'filehist-comment'          => 'توضیح',
-'imagelinks'                => 'لینکها',
-'linkstoimage'              => 'ذیل الذکر {{PLURAL:$1|لینکهای صفحه|$1 لینک صفحات}} به ای فایل:',
-'nolinkstoimage'            => 'هیچ صفحه ای نه که لینک وابیده بوه به ای فایل',
-'sharedupload'              => 'ای فایل یک آپلود اشتراکی هده و ممکنه زه طریق  پروژه‌های دیگه  هم قابل دسترسی بوه',
+'file-anchor-link' => 'فایل',
+'filehist' => 'گزارش تاریخی فایل',
+'filehist-help' => 'رو تاریخ‌ها کلیک کنید تا نسخه مرتبط را ببینین.',
+'filehist-current' => 'جاری',
+'filehist-datetime' => 'تاریخ/زمان',
+'filehist-user' => 'کاربر',
+'filehist-dimensions' => 'ابعاد',
+'filehist-filesize' => 'اندازه فایل',
+'filehist-comment' => 'توضیح',
+'imagelinks' => 'لینکها',
+'linkstoimage' => 'ذیل الذکر {{PLURAL:$1|لینکهای صفحه|$1 لینک صفحات}} به ای فایل:',
+'nolinkstoimage' => 'هیچ صفحه ای نه که لینک وابیده بوه به ای فایل',
+'sharedupload' => 'ای فایل یک آپلود اشتراکی هده و ممکنه زه طریق  پروژه‌های دیگه  هم قابل دسترسی بوه',
 'uploadnewversion-linktext' => 'آپلود کردن یه نسخه تازه زه ای فایل',
 
 # MIME search
@@ -495,52 +494,52 @@ $1',
 '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' => 'نشو دادن صفحات همراه با پیشوند:',
 
@@ -551,109 +550,109 @@ $2',
 'emailuser' => 'امیل ای کاربر',
 
 # Watchlist
-'watchlist'         => 'لیست پیگیریهای مو',
-'mywatchlist'       => 'لیست پیگیریهای مو',
-'addedwatchtext'    => "صفحه «<nowiki>$1</nowiki>» به [[Special:Watchlist|لیست پی‌گیری‌های ]] ایسا
+'watchlist' => 'لیست پیگیریهای مو',
+'mywatchlist' => 'لیست پیگیریهای مو',
+'addedwatchtext' => "صفحه «<nowiki>$1</nowiki>» به [[Special:Watchlist|لیست پی‌گیری‌های ]] ایسا
 اضاف وابید.
 تغییرات این صفحه و صفحه صحبت مر بوطه اش در آینده ایچو لیست ابوه. به‌علاوه، ای صفحه، سی واضح‌تر دیده وابیدن در [[Special:RecentChanges|فهرست تغییرات اخیر]] به شکل <b>سیاه</b> ایا.
 
 ایر بعدا خواستین ای  صفحه زه لیست پی‌گیریهاتو ورداشته بوه، رو «'''عدم پی‌گیری'''» در بالای صفحه کلیک کنین.",
-'removedwatchtext'  => 'آن صفحه"[[:$1]]" جابجا وابیده زه[[Special:لیست پیگیری|لیست پیگیری ایسا]].',
-'watch'             => 'پی‌گیری',
-'watchthispage'     => 'پیگیری ای صفحه',
-'unwatch'           => 'عدم پیگیری',
+'removedwatchtext' => 'آن صفحه"[[:$1]]" جابجا وابیده زه[[Special:لیست پیگیری|لیست پیگیری ایسا]].',
+'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|صفحه|صفحات}}
 زیر که گزینه حفاظت وحمایت موجی {{PLURAL:$1|آن|آن‌ها}} فعال هده ،
 ایسا ترین سطح حفاظت ای صفحه را تغییر بدین اما ای کارنتره تاثیری رو
 حفاظت وحمایت موجی صفحه داشته بوه.',
-'protect-default'             => '(پیش فرض)',
-'protect-fallback'            => 'درخواست"$1" اجازه',
+'protect-default' => '(پیش فرض)',
+'protect-fallback' => 'درخواست"$1" اجازه',
 'protect-level-autoconfirmed' => 'بستن کاربران ثبت نام نوابیده',
-'protect-level-sysop'         => 'Sysops فقط',
-'protect-summary-cascade'     => 'موجی کردن',
-'protect-expiring'            => 'سپری وابیده $1 (UTC)',
-'protect-cascade'             => 'حمایت صفحات دربرگیرنده در ای صفحه (cascading protection)',
-'protect-cantedit'            => 'ایسا نترین تغییر بدین سطوح حمایتی ای صفحه را, زیرا ایسا اجازه اصلاح آن را ندارین.',
-'protect-expiry-options'      => '۱ ساعت:1 hour,۱ روز:1 day,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌نهایت:infinite',
-'restriction-type'            => 'اجازه:',
-'restriction-level'           => 'سطح محدودیت:',
+'protect-level-sysop' => 'Sysops فقط',
+'protect-summary-cascade' => 'موجی کردن',
+'protect-expiring' => 'سپری وابیده $1 (UTC)',
+'protect-cascade' => 'حمایت صفحات دربرگیرنده در ای صفحه (cascading protection)',
+'protect-cantedit' => 'ایسا نترین تغییر بدین سطوح حمایتی ای صفحه را, زیرا ایسا اجازه اصلاح آن را ندارین.',
+'protect-expiry-options' => '۱ ساعت:1 hour,۱ روز:1 day,۱ هفته: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' => "با استفاده زه فرم زیر نام صفحه تغییر اکنه و همه گزارش تاریخی هو به نام تازه جابجا ابوه.
 عنوان کهنه تبدیل به یک صفحه تغییر مسیر به عنوان جدید ابوه.
 ایسا ترین بطور اتوماتیک تغییر مسیر های مربوط به عنوان اصلی رو به روز رسانی کنین. ایر ایسا مطمئن نهدین با دیدن یونو مطمئن بوین:
 [[Special:تغییر مسیر دوبل|دوبل ]] یا[[Special:تغییرمسیر خروا یا اشکسته|تغییرمسیرهای خراو یا اشکسته]].
@@ -676,21 +675,21 @@ $2',
 * کادر زیر را تیک نزده بوین.
 
 در ای موارد، وا صفحه را بطور دستی جابجا کرده و یا محتویات دو صفحه را با اصلاح ادغام کنین.",
-'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' => 'صفحات صادره',
@@ -699,74 +698,74 @@ $2',
 '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-recentchangeslinked'   => 'تغییرات آخری  درصفحاتی که لینک شده اند به ای صفحه',
-'tooltip-feed-rss'                => 'تغذیه آراس اس برای ای صفحه',
-'tooltip-feed-atom'               => 'تغذیه کوچیک ترین جزء  ای صفحه',
-'tooltip-t-contributions'         => 'دیدن فهرست مشارکت کننده ها ومقاله دهنده های ای صفحه',
-'tooltip-t-emailuser'             => 'ارسال یه امیل به ای کاربر',
-'tooltip-t-upload'                => 'آپلودکردن فایلها',
-'tooltip-t-specialpages'          => 'فهرست همه صفحات مخصوص',
-'tooltip-t-print'                 => 'نسخه فابل پرینت ای صفحه',
-'tooltip-t-permalink'             => 'لینک دایمی به ای نسخه از صفحه',
-'tooltip-ca-nstab-main'           => 'دیدن آن صفحه محتوا',
-'tooltip-ca-nstab-user'           => 'دیدن صفحه کاربر',
-'tooltip-ca-nstab-media'          => 'دیدن صفحه مدیا',
-'tooltip-ca-nstab-special'        => 'ای صفحه مخصوصه وایسا نترین خود ای صفحه رااصلاح کنین',
-'tooltip-ca-nstab-project'        => 'دیدن صفحه پروژه',
-'tooltip-ca-nstab-image'          => 'دیدن صفحه فایل',
-'tooltip-ca-nstab-mediawiki'      => 'دیدن پیام سیستم',
-'tooltip-ca-nstab-template'       => 'دیدن قالب قابل تغییر',
-'tooltip-ca-nstab-help'           => 'دیدن صفحه کمک',
-'tooltip-ca-nstab-category'       => 'دیدن صفحه طبقه بندی',
-'tooltip-minoredit'               => 'علامت نهادن به این به عنوان اصلاح حداقل یاکم',
-'tooltip-save'                    => 'ضبط کردن تغییرات',
-'tooltip-preview'                 => ' زه قبل دیدن تغییرات قبل از ضبط کردن سی مطمئن وابیدن لطفا استفاده کنید قبل از ضبط کردن',
-'tooltip-diff'                    => 'دیدن تغییراتی که ایسا من ای متن انجام دادین',
+'tooltip-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-recentchangeslinked' => 'تغییرات آخری  درصفحاتی که لینک شده اند به ای صفحه',
+'tooltip-feed-rss' => 'تغذیه آراس اس برای ای صفحه',
+'tooltip-feed-atom' => 'تغذیه کوچیک ترین جزء  ای صفحه',
+'tooltip-t-contributions' => 'دیدن فهرست مشارکت کننده ها ومقاله دهنده های ای صفحه',
+'tooltip-t-emailuser' => 'ارسال یه امیل به ای کاربر',
+'tooltip-t-upload' => 'آپلودکردن فایلها',
+'tooltip-t-specialpages' => 'فهرست همه صفحات مخصوص',
+'tooltip-t-print' => 'نسخه فابل پرینت ای صفحه',
+'tooltip-t-permalink' => 'لینک دایمی به ای نسخه از صفحه',
+'tooltip-ca-nstab-main' => 'دیدن آن صفحه محتوا',
+'tooltip-ca-nstab-user' => 'دیدن صفحه کاربر',
+'tooltip-ca-nstab-media' => 'دیدن صفحه مدیا',
+'tooltip-ca-nstab-special' => 'ای صفحه مخصوصه وایسا نترین خود ای صفحه رااصلاح کنین',
+'tooltip-ca-nstab-project' => 'دیدن صفحه پروژه',
+'tooltip-ca-nstab-image' => 'دیدن صفحه فایل',
+'tooltip-ca-nstab-mediawiki' => 'دیدن پیام سیستم',
+'tooltip-ca-nstab-template' => 'دیدن قالب قابل تغییر',
+'tooltip-ca-nstab-help' => 'دیدن صفحه کمک',
+'tooltip-ca-nstab-category' => 'دیدن صفحه طبقه بندی',
+'tooltip-minoredit' => 'علامت نهادن به این به عنوان اصلاح حداقل یاکم',
+'tooltip-save' => 'ضبط کردن تغییرات',
+'tooltip-preview' => ' زه قبل دیدن تغییرات قبل از ضبط کردن سی مطمئن وابیدن لطفا استفاده کنید قبل از ضبط کردن',
+'tooltip-diff' => 'دیدن تغییراتی که ایسا من ای متن انجام دادین',
 'tooltip-compareselectedversions' => 'دیدن تفاوتهای بین دونسخه انتخاب وابیده زه ای صفحه',
-'tooltip-watch'                   => 'اضاف کردن ای صفحه به فهرست مشاهداتتان',
-'tooltip-recreate'                => 'دوباره درست کردن صفحه ای که زه رو کینه وغرض پاک وابیده',
-'tooltip-upload'                  => 'شروع آپلود',
-'tooltip-rollback'                => '"اعاده" برگرداندن به وضع اولیه سی ای صفحه که بخاطر مشارکت  آخر اصلاح وابیده بایک کلیک',
+'tooltip-watch' => 'اضاف کردن ای صفحه به فهرست مشاهداتتان',
+'tooltip-recreate' => 'دوباره درست کردن صفحه ای که زه رو کینه وغرض پاک وابیده',
+'tooltip-upload' => 'شروع آپلود',
+'tooltip-rollback' => '"اعاده" برگرداندن به وضع اولیه سی ای صفحه که بخاطر مشارکت  آخر اصلاح وابیده بایک کلیک',
 
 # Browsing diffs
 'previousdiff' => '← اصلاح قدیمی',
-'nextdiff'     => 'تفاوت بعدی→',
+'nextdiff' => 'تفاوت بعدی→',
 
 # 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' => 'تصویر با قابلیت تفکیک کامل',
 
 # Special:NewFiles
@@ -779,11 +778,11 @@ $2',
 لینکهای بعدی در همان سطر، به عنوان موارد استثنا در نظر گریده ابون',
 
 # Metadata
-'metadata'          => 'فراداده',
-'metadata-help'     => ' ای فایل دارای اطلاعات اضافه‌ای است که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن آن به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه',
-'metadata-expand'   => 'نشودادن جزئیات تفصیلی',
+'metadata' => 'فراداده',
+'metadata-help' => ' ای فایل دارای اطلاعات اضافه‌ای است که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن آن به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه',
+'metadata-expand' => 'نشودادن جزئیات تفصیلی',
 'metadata-collapse' => 'قایم کردن جزئیات تفصیلی',
-'metadata-fields'   => 'فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.
+'metadata-fields' => 'فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.
 بقیه موارد فقط وقتی نشوداده ابوه که جدول یادشده واز بوه.
 * make
 * model
@@ -800,18 +799,18 @@ $2',
 * gpsaltitude',
 
 # 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:Version
 'version' => 'ترجمه یا تفسیر',
index 14e4eff..0804aed 100644 (file)
@@ -850,6 +850,7 @@ Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'note' => "'''Notenn :'''",
 'previewnote' => "'''Diwallit mat, n'eus ken ur rakweled eus an destenn-mañ.'''
 N'eo ket bet enrollet ho kemmoù evit c'hoazh !",
+'continue-editing' => "Kenderc'hel da gemmañ",
 'previewconflict' => 'Gant ar rakweled e teu testenn ar bajenn war wel evel ma vo pa vo bet enrollet.',
 'session_fail_preview' => "'''Ho tigarez! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.'''
 Klaskit en-dro mar plij.
@@ -939,6 +940,10 @@ A-gostez eo bet lezet an arventenn-se.',
 'parser-template-loop-warning' => "Patrom e kelc'h detektet : [[$1]]",
 'parser-template-recursion-depth-warning' => 'Tizhet bevenn donder galvoù ar patromoù ($1)',
 'language-converter-depth-warning' => "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
+'node-count-exceeded-category' => "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
+'node-count-exceeded-warning' => "Pajenn a ya en tu all d'an niver a skoulmoù",
+'expansion-depth-exceeded-category' => "Pajennoù m'eur aet dreist d'an donder astenn",
+'expansion-depth-exceeded-warning' => "Pajenn a ya dreist d'an donder astenn",
 
 # "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ù.",
@@ -1114,7 +1119,6 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 
 # Diffs
 'history-title' => 'Istor stummoù disheñvel "$1"',
-'difference' => "(Diforc'hioù etre ar stummoù)",
 'difference-multipage' => "(diforc'h etre ar pajennoù)",
 'lineno' => 'Linenn $1:',
 'compareselectedversions' => 'Keñveriañ ar stummoù diuzet',
@@ -3770,7 +3774,7 @@ Diskouezet eo ar skeudennoù gant ur pizhder uhel, erounit a ra ar restroù all
 'feedback-bugornote' => "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [\$1 kemenn un draen].
 A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc'h evezhiadenn d'ar bajenn \"[\$3 \$2]\", a-gevret gant hoc'h anv implijer hag anv ar merdeer a rit gantañ.",
 'feedback-subject' => 'Danvez :',
-'feedback-message' => 'Kemennadenn:',
+'feedback-message' => 'Kemennadenn :',
 'feedback-cancel' => 'Nullañ',
 'feedback-submit' => 'Kas ho soñj',
 'feedback-adding' => "Oc'h ouzhpennañ ho soñj war ar bajenn...",
index b7c9154..5183c67 100644 (file)
@@ -1238,7 +1238,6 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 
 # Diffs
 'history-title' => 'Historija izmjena stranice "$1"',
-'difference' => '(Razlika između revizija)',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Linija $1:',
 'compareselectedversions' => 'Uporedite označene verzije',
index 69ed27b..ede25f7 100644 (file)
@@ -572,6 +572,8 @@ $2",
 Els seus motius han estat: «''$2''».",
 'filereadonlyerror' => 'No s\'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers "$2" està en mode només de lectura.
 L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
+'invalidtitle-knownnamespace' => "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
+'invalidtitle-unknownnamespace' => "El títol amb l'espai de noms desconegut de número «$1» i text «$3» no és vàlid",
 
 # Virus scanner
 'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
@@ -850,6 +852,7 @@ Per més detalls, la darrera entrada del registre es mostra a continuació:",
 'note' => "'''Nota:'''",
 'previewnote' => "'''Recorda que això és només una previsualització.'''
 Els vostres canvis encara no s'han desat!",
+'continue-editing' => "Continua l'edició",
 'previewconflict' => "Aquesta previsualització reflecteix, a l'àrea
 d'edició superior, el text tal i com apareixerà si trieu desar-lo.",
 'session_fail_preview' => "'''No s'ha pogut processar la vostra modificació a causa d'una pèrdua de dades de la sessió.
@@ -1122,7 +1125,8 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi
 
 # Diffs
 'history-title' => 'Historial de versions de «$1»',
-'difference' => '(Diferència entre revisions)',
+'difference-title' => 'Diferència entre les revisions de «$1»',
+'difference-title-multipage' => 'Diferència entre les pàgines «$1» i «$2»',
 'difference-multipage' => '(Diferència entre pàgines)',
 'lineno' => 'Línia $1:',
 'compareselectedversions' => 'Compara les versions seleccionades',
@@ -1733,6 +1737,7 @@ Per seguretat, img_auth.php està desactivat.",
 'http-curl-error' => "Error en recuperar l'URL: $1",
 'http-host-unreachable' => "No s'ha pogut accedir a l'URL.",
 'http-bad-status' => 'Hi ha hagut un problema durant la petició HTTP: $1 $2',
+'http-truncated-body' => "El cos de la sol·licitud només s'ha rebut parcialment.",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => "No s'ha pogut accedir a l'URL",
@@ -2007,6 +2012,11 @@ Podeu reduir l'extensió seleccionant el tipus de registre, el nom d'usuari real
 'allpages-bad-ns' => "El projecte {{SITENAME}} no disposa de l'espai de noms «$1».",
 'allpages-hide-redirects' => 'Amaga les redireccions',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Esteu veient una versió a la memòria cau de la pàgina, que pot tenir fins a $1.',
+'cachedspecial-viewing-cached-ts' => 'Esteu veient una versió a la memòria cau de la pàgina, que podria no ser completament actual.',
+'cachedspecial-refresh-now' => 'Mostra la darrera.',
+
 # Special:Categories
 'categories' => 'Categories',
 'categoriespagetext' => "{{PLURAL:$1|La següent categoria conté|Les següents categories contenen}} pàgines, o fitxers multimèdia.
@@ -3576,6 +3586,9 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'version-software' => 'Programari instaŀlat',
 'version-software-product' => 'Producte',
 'version-software-version' => 'Versió',
+'version-entrypoints' => "URL de punts d'entrada",
+'version-entrypoints-header-entrypoint' => "Punt d'entrada",
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Camí del fitxer',
@@ -3764,4 +3777,15 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'api-error-uploaddisabled' => 'Estan desactivades les càrregues en aquest wiki',
 'api-error-verification-error' => 'Aquest fitxer pot estar danyat, o tenir una extensió incorrecta.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segon|segons}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minuts}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|hores}}',
+'duration-days' => '$1 {{PLURAL:$1|dia|dies}}',
+'duration-weeks' => '$1 {{PLURAL:$1|setmana|setmanes}}',
+'duration-years' => '$1 {{PLURAL:$1|any|anys}}',
+'duration-decades' => '$1 {{PLURAL:$1|dècada|dècades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|segle|segles}}',
+'duration-millennia' => '$1 {{PLURAL:$1|mil·leni|mil·lenis}}',
+
 );
index 1efedc7..8ebb18e 100644 (file)
@@ -348,7 +348,6 @@ Siók-mìng: (dāng) = gâe̤ng dék sĭng bēng-buōng bī-piâng, (sèng) = g
 
 # Diffs
 'history-title' => '"$1" gì siŭ-gāi lĭk-sṳ̄',
-'difference' => '(Bēng-buōng cĭ-găng gì chă-biék)',
 'lineno' => 'Dâ̤ $1 hòng:',
 'compareselectedversions' => 'Bī-piâng gēng-sōng bēng-buōng',
 'editundo' => 'chṳ̄-siĕu',
index 3e4b7e9..cb6fdff 100644 (file)
@@ -719,7 +719,6 @@ $1',
 
 # Diffs
 'history-title' => '$1 — хийцаман исторе',
-'difference' => '(Тайпанара юкъар башхалла)',
 'lineno' => 'Могlа $1:',
 'compareselectedversions' => 'Хаьржиначуьна башхо муха ю хьажа',
 'showhideselectedversions' => 'Гайта/къайлайаха хаьржина башхонаш',
index ab9bfc9..aef2dc4 100644 (file)
@@ -698,7 +698,6 @@ Hinumdomi nga ang paggamit sa mga sumpay sa nabigasyon mo-reset sa column.',
 
 # Diffs
 'history-title' => 'Kaagi sa rebisyon sa "$1"',
-'difference' => '(Kalainan sa mga rebisyon)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'Ikompara ang piniling mga bersiyon',
 'editundo' => 'i-way bili',
index edb8f9e..99d4116 100644 (file)
@@ -616,7 +616,6 @@ Fanapunta na para u na'nuebu i kolumna anggen un usa i inachetton nabegasion.",
 
 # Diffs
 'history-title' => 'Historian tinilaika nu "$1"',
-'difference' => '(Diferensia siha gi tinilaika)',
 'lineno' => 'Liña $1:',
 'compareselectedversions' => "Akompara i tinilaika siha ma'ayek",
 'editundo' => 'funas',
index 5655162..a816257 100644 (file)
@@ -1063,7 +1063,6 @@ $1",
 
 # Diffs
 'history-title' => 'مێژووی پیاچوونەوەکانی «$1»',
-'difference' => '(جیاوازی نێوان پیاچوونەوەکان)',
 'difference-multipage' => '(جیاوازی نێوان پەڕەکان)',
 'lineno' => 'ھێڵی  $1:',
 'compareselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە',
index 499c41f..b63fe8d 100644 (file)
@@ -555,7 +555,6 @@ Indi pag-ilakip ang pila ka mga suleras.',
 
 # Diffs
 'history-title' => 'Kasaysayan sang pagbag-o sang "$1"',
-'difference' => '(Ginkala-in sang mga rebisyon)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'I-kumpara ang pinili-an nga mga rebisyon',
 'editundo' => 'ibalik',
index 265892b..88dfc5d 100644 (file)
@@ -824,7 +824,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 
 # Diffs
 'history-title' => '$1 саифесининъ денъишмелер тарихы',
-'difference' => '(Версиялар арасы фаркълар)',
 'difference-multipage' => '(Саифелер арасындаки фаркъ)',
 'lineno' => '$1 сатыр:',
 'compareselectedversions' => 'Сайлангъан версияларны тенъештир',
index 1f8db74..b1154ee 100644 (file)
@@ -821,7 +821,6 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 
 # Diffs
 'history-title' => '"$1" saifesiniñ deñişmeler tarihı',
-'difference' => '(Versiyalar arası farqlar)',
 'difference-multipage' => '(Saifeler arasındaki farq)',
 'lineno' => '$1 satır:',
 'compareselectedversions' => 'Saylanğan versiyalarnı teñeştir',
index f55e957..af5b5aa 100644 (file)
@@ -740,6 +740,8 @@ $2',
 'filereadonlyerror' => "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je momentálně pouze pro čtení.
 
 Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3''“.",
+'invalidtitle-knownnamespace' => 'Neplatný název se jmenným prostorem „$2“ a textem „$3“',
+'invalidtitle-unknownnamespace' => 'Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“',
 
 # Virus scanner
 'virus-badscanner' => "Špatná konfigurace: neznámý antivirový program: ''$1''",
@@ -1115,6 +1117,12 @@ Tyto argumenty byly vynechány.',
 'parser-template-loop-warning' => 'Nalezena smyčka šablon: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Překročen limit hloubky rekurzivního vkládání šablon ($1)',
 'language-converter-depth-warning' => 'Překročen limit vnoření u jazykové konverze ($1)',
+'node-count-exceeded-category' => 'Stránky překračující počet uzlů',
+'node-count-exceeded-warning' => 'Stránka překročila počet uzlů',
+'expansion-depth-exceeded-category' => 'Stránky překračující hloubku expanze',
+'expansion-depth-exceeded-warning' => 'Stránka překročila hloubku expanze',
+'parser-unstrip-loop-warning' => 'Detekováno zacyklení unstrip',
+'parser-unstrip-recursion-limit' => 'Překročen limit rekurze unstrip ($1)',
 
 # "Undo" feature
 'undo-success' => 'Editace může být zrušena. Zkontrolujte a pak potvrďte změny zobrazené níže.',
@@ -1292,7 +1300,6 @@ Ujistěte se, že tato změna udrží souvislost a posloupnost verzí v historii
 
 # Diffs
 'history-title' => 'Historie verzí stránky „$1“',
-'difference' => '(Rozdíly mezi verzemi)',
 'difference-multipage' => '(Rozdíly mezi stránkami)',
 'lineno' => 'Řádka $1:',
 'compareselectedversions' => 'Porovnat vybrané verze',
@@ -1917,6 +1924,7 @@ Z bezpečnostních důvodů je img_auth.php vypnuto.',
 'http-curl-error' => 'Chyba při čtení z URL: $1',
 'http-host-unreachable' => 'Nepodařilo se kontaktovat URL',
 'http-bad-status' => 'Při provádění HTTP požadavku nastal problém: $1 $2',
+'http-truncated-body' => 'Přijaté tělo požadavku bylo neúplné.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Z URL nelze číst',
index 515e428..bdc4214 100644 (file)
@@ -556,7 +556,6 @@ Administrator, chtëren jã zablokòwôł, pòdôł przëczënã: $1",
 
 # Diffs
 'history-title' => 'Historëjô wersëji dlô "$1"',
-'difference' => '(różnice midzë wersëjama)',
 'lineno' => 'Lëniô $1:',
 'compareselectedversions' => 'Przërównôj wëbróné wersëje',
 'editundo' => 'doprowadzë nazôd',
index 19227ca..ab49bf6 100644 (file)
@@ -89,355 +89,360 @@ $linkTrail = '/^([a-zабвгдеєжѕзїіıићклмнопсстѹфхѡѿ
 
 $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
-'pagecategories'         => '{{PLURAL:$1|Катигорїꙗ|Катигорїи|Катигорїѩ|Катигорїѩ}}',
-'category_header'        => 'катигорїѩ ⁖ $1 ⁖ страницѧ',
-'subcategories'          => 'подъкатигорїѩ',
-'hidden-categories'      => '{{PLURAL:$1|съкрꙑта катигорїꙗ|съкрꙑти катигорїи|съкрꙑтꙑ катигорїѩ}}',
-'category-subcat-count'  => '{{PLURAL:$2|Сѥи катигорїи тъкъмо сꙗ подъкатигорїꙗ ѥстъ|Сѥи катигорїи {{PLURAL:$1|ѥдина подъкатигорїꙗ ѥстъ|2 подъкатигорїи ѥстє|$1 подъкатигорїѩ сѫтъ}} · а вьсѩ жє подъкатигорїѩ число $2 ѥстъ}}',
+'pagecategories' => '{{PLURAL:$1|Катигорїꙗ|Катигорїи|Катигорїѩ|Катигорїѩ}}',
+'category_header' => 'катигорїѩ ⁖ $1 ⁖ страницѧ',
+'subcategories' => 'подъкатигорїѩ',
+'hidden-categories' => '{{PLURAL:$1|съкрꙑта катигорїꙗ|съкрꙑти катигорїи|съкрꙑтꙑ катигорїѩ}}',
+'category-subcat-count' => '{{PLURAL:$2|Сѥи катигорїи тъкъмо сꙗ подъкатигорїꙗ ѥстъ|Сѥи катигорїи {{PLURAL:$1|ѥдина подъкатигорїꙗ ѥстъ|2 подъкатигорїи ѥстє|$1 подъкатигорїѩ сѫтъ}} · а вьсѩ жє подъкатигорїѩ число $2 ѥстъ}}',
 'listingcontinuesabbrev' => '· вѧщє',
 
 'linkprefix' => '/^(.*?)(„|«)$/sD',
 
-'about'         => 'опьсаниѥ',
-'article'       => 'члѣнъ',
-'newwindow'     => '(иномь окънѣ)',
+'about' => 'опьсаниѥ',
+'article' => 'члѣнъ',
+'newwindow' => '(иномь окънѣ)',
 'moredotdotdot' => 'вѧщє ···',
-'mypage'        => 'моꙗ страница',
-'mytalk'        => 'моꙗ бєсѣда',
-'navigation'    => 'плаваниѥ',
-'and'           => '&#32;и',
+'mypage' => 'моꙗ страница',
+'mytalk' => 'моꙗ бєсѣда',
+'navigation' => 'плаваниѥ',
+'and' => '&#32;и',
 
 # Cologne Blue skin
-'qbedit'         => 'исправи',
-'qbpageoptions'  => 'си страни́ца',
-'qbmyoptions'    => 'моꙗ страницѧ',
+'qbedit' => 'исправи',
+'qbpageoptions' => 'си страни́ца',
+'qbmyoptions' => 'моꙗ страницѧ',
 'qbspecialpages' => 'нарочьнꙑ страницѧ',
-'faq'            => 'чѧстꙑ въпросꙑ',
+'faq' => 'чѧстꙑ въпросꙑ',
 
 # Vector skin
 'vector-action-addsection' => 'новꙑ бєсѣдꙑ чѧсти сътворѥниѥ',
-'vector-action-delete'     => 'поничьжєниѥ',
-'vector-action-move'       => 'прѣимєнованиѥ',
-'vector-action-protect'    => 'ꙁабранѥниѥ',
-'vector-action-unprotect'  => 'поущєниѥ',
-'vector-view-create'       => 'сътворѥниѥ',
-'vector-view-edit'         => 'исправи',
-'vector-view-history'      => 'їсторїꙗ',
-'vector-view-view'         => 'чьтѥниѥ',
-'vector-view-viewsource'   => 'страницѧ источьнъ обраꙁъ',
-'actions'                  => 'дѣиства',
-'namespaces'               => 'имєнъ просторꙑ',
-
-'errorpagetitle'    => 'блаꙁна',
-'tagline'           => '{{grammar:genitive|{{SITENAME}}}} страница',
-'help'              => 'помощь',
-'search'            => 'исканиѥ',
-'searchbutton'      => 'ищи',
-'go'                => 'прѣиди',
-'searcharticle'     => 'прѣиди',
-'history'           => 'страницѧ їсторїꙗ',
-'history_short'     => 'їсторїꙗ',
-'printableversion'  => 'пєчатьнъ обраꙁъ',
-'permalink'         => 'въиньна съвѧꙁь',
-'print'             => 'пєчатаниѥ',
-'edit'              => 'исправи',
-'create'            => 'сътворѥниѥ',
-'editthispage'      => 'си страницѧ исправлѥниѥ',
-'create-this-page'  => 'си страницѧ сътворѥниѥ',
-'delete'            => 'поничьжєниѥ',
-'deletethispage'    => 'си страницѧ поничьжєниѥ',
-'protect'           => 'ꙁабранѥниѥ',
-'protect_change'    => 'иꙁмѣнѥниѥ',
-'protectthispage'   => 'си страницѧ ꙁабранєниѥ',
-'unprotect'         => 'поущєниѥ',
-'newpage'           => 'нова страница',
-'talkpage'          => 'си страницѧ бєсѣда',
-'talkpagelinktext'  => 'бєсѣда',
-'specialpage'       => 'нарочьна страница',
-'personaltools'     => 'моꙗ орѫдиꙗ',
-'postcomment'       => 'нова чѧсть',
-'talk'              => 'бєсѣда',
-'toolbox'           => 'орѫдиꙗ',
-'otherlanguages'    => 'дроугꙑ ѩꙁꙑкꙑ',
-'redirectedfrom'    => '(прѣнаправлѥниѥ отъ ⁖ $1 ⁖)',
-'redirectpagesub'   => 'прѣнаправлѥниѥ',
-'lastmodifiedat'    => 'страницѧ послѣдьнꙗ мѣна сътворѥна $2 · $1 бѣ ⁙',
-'jumpto'            => 'прѣиди къ :',
-'jumptonavigation'  => 'плаваниѥ',
-'jumptosearch'      => 'исканиѥ',
+'vector-action-delete' => 'поничьжєниѥ',
+'vector-action-move' => 'прѣимєнованиѥ',
+'vector-action-protect' => 'ꙁабранѥниѥ',
+'vector-action-unprotect' => 'иꙁмѣни ꙁабранѥниꙗ обраꙁъ',
+'vector-view-create' => 'сътворѥниѥ',
+'vector-view-edit' => 'исправи',
+'vector-view-history' => 'їсторїꙗ',
+'vector-view-view' => 'чьтѥниѥ',
+'vector-view-viewsource' => 'страницѧ источьнъ обраꙁъ',
+'actions' => 'дѣиства',
+'namespaces' => 'имєнъ просторꙑ',
+
+'errorpagetitle' => 'блаꙁна',
+'tagline' => '{{grammar:genitive|{{SITENAME}}}} страница',
+'help' => 'помощь',
+'search' => 'исканиѥ',
+'searchbutton' => 'ищи',
+'go' => 'прѣиди',
+'searcharticle' => 'прѣиди',
+'history' => 'страницѧ їсторїꙗ',
+'history_short' => 'їсторїꙗ',
+'printableversion' => 'пєчатьнъ обраꙁъ',
+'permalink' => 'въиньна съвѧꙁь',
+'print' => 'пєчатаниѥ',
+'edit' => 'исправи',
+'create' => 'сътворѥниѥ',
+'editthispage' => 'си страницѧ исправлѥниѥ',
+'create-this-page' => 'си страницѧ сътворѥниѥ',
+'delete' => 'поничьжєниѥ',
+'deletethispage' => 'си страницѧ поничьжєниѥ',
+'protect' => 'ꙁабранѥниѥ',
+'protect_change' => 'иꙁмѣнѥниѥ',
+'protectthispage' => 'си страницѧ ꙁабранєниѥ',
+'unprotect' => 'поущєниѥ',
+'newpage' => 'нова страница',
+'talkpage' => 'си страницѧ бєсѣда',
+'talkpagelinktext' => 'бєсѣда',
+'specialpage' => 'нарочьна страница',
+'personaltools' => 'моꙗ орѫдиꙗ',
+'postcomment' => 'нова чѧсть',
+'talk' => 'бєсѣда',
+'toolbox' => 'орѫдиꙗ',
+'otherlanguages' => 'дроугꙑ ѩꙁꙑкꙑ',
+'redirectedfrom' => '(прѣнаправлѥниѥ отъ ⁖ $1 ⁖)',
+'redirectpagesub' => 'прѣнаправлѥниѥ',
+'lastmodifiedat' => 'страницѧ послѣдьнꙗ мѣна сътворѥна $2 · $1 бѣ ⁙',
+'jumpto' => 'прѣиди къ :',
+'jumptonavigation' => 'плаваниѥ',
+'jumptosearch' => 'исканиѥ',
 'pool-errorunknown' => 'нєвѣдома блаꙁна',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite'            => 'О {{grammar:instrumental|{{SITENAME}}}}',
-'aboutpage'            => 'Project:О сѥмь опꙑтьствовании',
-'copyright'            => 'подъ прощєниѥмь $1 пьсано ѥстъ',
-'copyrightpage'        => '{{ns:project}}:Творьцъ права',
-'currentevents'        => 'сѫщѧѩ вѣщи',
-'currentevents-url'    => 'Project:Сѫщѧѩ вѣщи',
-'edithelp'             => 'помощь по исправлѥниѭ',
-'edithelppage'         => 'Help:Исправлѥниѥ страницѧ',
-'helppage'             => 'Help:Каталогъ',
-'mainpage'             => 'главьна страница',
+'aboutsite' => 'О {{grammar:instrumental|{{SITENAME}}}}',
+'aboutpage' => 'Project:О сѥмь опꙑтьствовании',
+'copyright' => 'подъ прощєниѥмь $1 пьсано ѥстъ',
+'copyrightpage' => '{{ns:project}}:Творьцъ права',
+'currentevents' => 'сѫщѧѩ вѣщи',
+'currentevents-url' => 'Project:Сѫщѧѩ вѣщи',
+'edithelp' => 'помощь по исправлѥниѭ',
+'edithelppage' => 'Help:Исправлѥниѥ страницѧ',
+'helppage' => 'Help:Каталогъ',
+'mainpage' => 'главьна страница',
 'mainpage-description' => 'главьна страница',
-'policy-url'           => 'Project:Полїтїка',
-'portal'               => 'обьщєниꙗ съвѣтъ',
-'portal-url'           => 'Project:Обьщєниꙗ съвѣтъ',
-
-'pagetitle'           => '$1 · {{SITENAME}}',
-'retrievedfrom'       => 'поѩто иꙁ ⁖ $1 ⁖',
-'youhavenewmessages'  => '$1 тєбѣ напьсанꙑ сѫтъ ($2)',
-'newmessageslink'     => 'нови напьсаниꙗ',
+'policy-url' => 'Project:Полїтїка',
+'portal' => 'обьщєниꙗ съвѣтъ',
+'portal-url' => 'Project:Обьщєниꙗ съвѣтъ',
+
+'pagetitle' => '$1 · {{SITENAME}}',
+'retrievedfrom' => 'поѩто иꙁ ⁖ $1 ⁖',
+'youhavenewmessages' => '$1 тєбѣ напьсанꙑ сѫтъ ($2)',
+'newmessageslink' => 'нови напьсаниꙗ',
 'newmessagesdifflink' => 'послѣдьнꙗ мѣна',
-'editsection'         => 'исправи',
-'editold'             => 'исправи',
-'viewsourceold'       => 'страницѧ источьнъ обраꙁъ',
-'editlink'            => 'исправи',
-'viewsourcelink'      => 'страницѧ источьнъ обраꙁъ',
-'editsectionhint'     => 'исправлѥниѥ чѧсти : $1',
-'toc'                 => 'каталогъ',
-'showtoc'             => 'виждь',
-'hidetoc'             => 'съкрꙑи',
-'viewdeleted'         => '$1 видєти хощєши ;',
-'red-link-title'      => '$1 (си страницѧ нѣстъ)',
+'editsection' => 'исправи',
+'editold' => 'исправи',
+'viewsourceold' => 'страницѧ источьнъ обраꙁъ',
+'editlink' => 'исправи',
+'viewsourcelink' => 'страницѧ источьнъ обраꙁъ',
+'editsectionhint' => 'исправлѥниѥ чѧсти : $1',
+'toc' => 'каталогъ',
+'showtoc' => 'виждь',
+'hidetoc' => 'съкрꙑи',
+'viewdeleted' => '$1 видєти хощєши ;',
+'red-link-title' => '$1 (си страницѧ нѣстъ)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'члѣнъ',
-'nstab-user'      => 'польꙃєватєл҄ь',
-'nstab-media'     => 'срѣдьства',
-'nstab-special'   => 'нарочьна',
-'nstab-project'   => 'съвѣтъ',
-'nstab-image'     => 'дѣло',
+'nstab-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' => 'катигорїꙗ',
 
 # General errors
-'error'      => 'блаꙁна',
+'error' => 'блаꙁна',
 'viewsource' => 'страницѧ источьнъ обраꙁъ',
 
 # Login and logout pages
-'yourname'                => 'твоѥ имѧ',
-'yourpassword'            => 'таино слово напиши',
-'yourpasswordagain'       => 'опакꙑ таиноѥ слово напиши',
-'login'                   => 'въниди',
+'yourname' => 'твоѥ имѧ',
+'yourpassword' => 'таино слово напиши',
+'yourpasswordagain' => 'опакꙑ таиноѥ слово напиши',
+'login' => 'въниди',
 'nav-login-createaccount' => 'въниди / съꙁижди си мѣсто',
-'userlogin'               => 'въниди / съꙁижди си мѣсто',
-'userloginnocreate'       => 'въниди',
-'logout'                  => 'ис̾ходъ',
-'userlogout'              => 'ис̾ходъ',
-'nologin'                 => 'мѣсто ти нѣстъ ли ? $1',
-'nologinlink'             => 'съꙁижди си мѣсто',
-'createaccount'           => 'съꙁижди си мѣсто',
-'gotaccount'              => 'мѣсто ти ѥстъ ли? $1',
-'gotaccountlink'          => 'въниди',
-'createaccountreason'     => 'какъ съмꙑслъ :',
-'userexists'              => 'сѫщє польꙃєватєлꙗ имѧ пьса ⁙ ино иꙁобрѧщи',
-'loginerror'              => 'въхода блаꙁна',
-'accountcreated'          => 'мѣсто сътворєно ѥстъ',
-'loginlanguagelabel'      => 'ѩꙁꙑкъ : $1',
+'userlogin' => 'въниди / съꙁижди си мѣсто',
+'userloginnocreate' => 'въниди',
+'logout' => 'ис̾ходъ',
+'userlogout' => 'ис̾ходъ',
+'nologin' => 'мѣсто ти нѣстъ ли ? $1',
+'nologinlink' => 'съꙁижди си мѣсто',
+'createaccount' => 'съꙁижди си мѣсто',
+'gotaccount' => 'мѣсто ти ѥстъ ли? $1',
+'gotaccountlink' => 'въниди',
+'createaccountreason' => 'какъ съмꙑслъ :',
+'userexists' => 'сѫщє польꙃєватєлꙗ имѧ пьса ⁙ ино иꙁобрѧщи',
+'loginerror' => 'въхода блаꙁна',
+'accountcreated' => 'мѣсто сътворєно ѥстъ',
+'loginlanguagelabel' => 'ѩꙁꙑкъ : $1',
 
 # Change password dialog
-'resetpass'                 => 'таина словєсє иꙁмѣнѥниѥ',
-'oldpassword'               => 'старо таино слово :',
-'newpassword'               => 'ново таино слово :',
+'resetpass' => 'таина словєсє иꙁмѣнѥниѥ',
+'oldpassword' => 'старо таино слово :',
+'newpassword' => 'ново таино слово :',
 'resetpass-submit-loggedin' => 'таина словєсє иꙁмѣнѥниѥ',
 
 # Special:PasswordReset
 'passwordreset-username' => 'польꙃєватєлꙗ имѧ :',
 
 # Edit page toolbar
-'link_sample'    => 'съвѧꙁи имѧ',
-'link_tip'       => 'вънѫтрьнꙗ съвѧꙁь',
+'link_sample' => 'съвѧꙁи имѧ',
+'link_tip' => 'вънѫтрьнꙗ съвѧꙁь',
 'extlink_sample' => 'http://www.example.com съвѧꙁи имѧ',
-'extlink_tip'    => 'вънѣщьнꙗ съвѧꙁь (помьни о http://)',
-'media_tip'      => 'дѣла съвѧꙁь',
-'sig_tip'        => 'твои аѵтографъ и нꙑнѣшьна врѣмѧ и дьнь',
+'extlink_tip' => 'вънѣщьнꙗ съвѧꙁь (помьни о http://)',
+'media_tip' => 'дѣла съвѧꙁь',
+'sig_tip' => 'твои аѵтографъ и нꙑнѣшьна врѣмѧ и дьнь',
 
 # Edit pages
-'summary'                    => 'опьсаниѥ :',
-'minoredit'                  => 'малаꙗ мѣна',
-'watchthis'                  => 'си страницѧ блюдєниѥ',
-'savearticle'                => 'съхранѥниѥ',
-'showpreview'                => 'мѣнꙑ поꙁьрѣниѥ (бєꙁ съхранѥниꙗ)',
-'blockedtitle'               => 'польꙃєватєл҄ь ꙁаграждєнъ ѥстъ',
-'loginreqlink'               => 'въниди',
-'newarticle'                 => '(новъ)',
-'noarticletext'              => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙
+'summary' => 'опьсаниѥ :',
+'minoredit' => 'малаꙗ мѣна',
+'watchthis' => 'си страницѧ блюдєниѥ',
+'savearticle' => 'съхранѥниѥ',
+'showpreview' => 'мѣнꙑ поꙁьрѣниѥ (бєꙁ съхранѥниꙗ)',
+'blockedtitle' => 'польꙃєватєл҄ь ꙁаграждєнъ ѥстъ',
+'loginreqlink' => 'въниди',
+'newarticle' => '(новъ)',
+'noarticletext' => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙
 [[Special:Search/{{PAGENAME}}|си страницѧ имѧ искати]] дроугꙑ страницѧ ·
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти] ·
 или [{{fullurl:{{FULLPAGENAME}}|action=edit}} ѭжє исправити]</span> можєши',
 'noarticletext-nopermission' => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙
 [[Special:Search/{{PAGENAME}}|си страницѧ имѧ искати]] дроугꙑ страницѧ или
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти]</span> можєши',
-'userpage-userdoesnotexist'  => 'польꙃєватєльска мѣста ⁖ $1 ⁖ нꙑнѣ нѣстъ ⁙
+'userpage-userdoesnotexist' => 'польꙃєватєльска мѣста ⁖ $1 ⁖ нꙑнѣ нѣстъ ⁙
 прѣдъ сътворѥниѥмь или исправлѥниѥмь си страницѧ помꙑсли жє ащє исто тъ дѣиство ноуждьно ли',
-'clearyourcache'             => 'НАРОЧИТО: По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ ⁙ Mozilla ли Firefox ли Safari ли жьмꙑи Shift а мꙑшиѭ жьми Reload или жьми Ctrl-Shift-R (Cmd-Shift-R вън Apple Mac)  ⁙ Konqueror ли жьми кромѣ Reload или F5 ⁙ Опєрꙑ польꙃєватєльмъ можєть бꙑти ноужда пльнѣ поничьжити ихъ съмотрила съхранъ въ Tools > Preferences ⁙ IE ли жьмꙑи Ctrl а мꙑшиѭ жьми Refresh или жьми Ctrl-F5',
-'note'                       => "'''НАРОЧИТО:'''",
-'editing'                    => 'исправлѥниѥ: $1',
-'editingsection'             => 'исправлѥниѥ ⁖ $1 ⁖ (чѧсть)',
-'editingcomment'             => 'исправлѥниѥ ⁖ $1 ⁖ (нова чѧсть)',
-'templatesused'              => 'сѥѩ страницѧ {{PLURAL:$1|сь обраꙁьць польꙃоуѥтъ сѧ ѥстъ|с҄и обраꙁьца польꙃоуѭтъ сѧ ѥстє|с҄и обраꙁьци польꙃоуѭтъ сѧ сѫтъ}} :',
-'template-protected'         => '(ꙁабранєно ѥстъ)',
-'template-semiprotected'     => '(чѧстьно ꙁабранѥно)',
+'clearyourcache' => "'''НАРОЧИТО''': По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ
+* '''Mozilla ли Firefox ли Safari''' ли жьмꙑи Shift а мꙑшиѭ жьми Reload или жьми Ctrl-Shift-R (⌘-R вън Apple Mac)
+* '''Google Chrome:''' ли жьмꙑи Ctrl-Shift-R (⌘-Shift-R въ Mac)
+* '''Internet Explorer''' ли жьмꙑи Ctrl а мꙑшиѭ жьми Refresh или жьми Ctrl-F5
+* '''Konqueror''' ли жьми кромѣ Reload или F5 
+* '''Опєрꙑ''' польꙃєватєльмъ можєть бꙑти ноужда пльнѣ поничьжити ихъ съмотрила съхранъ въ Tools → Preferences ⁙",
+'note' => "'''НАРОЧИТО:'''",
+'editing' => 'исправлѥниѥ: $1',
+'editingsection' => 'исправлѥниѥ ⁖ $1 ⁖ (чѧсть)',
+'editingcomment' => 'исправлѥниѥ ⁖ $1 ⁖ (нова чѧсть)',
+'templatesused' => 'сѥѩ страницѧ {{PLURAL:$1|сь обраꙁьць польꙃоуѥтъ сѧ ѥстъ|с҄и обраꙁьца польꙃоуѭтъ сѧ ѥстє|с҄и обраꙁьци польꙃоуѭтъ сѧ сѫтъ}} :',
+'template-protected' => '(ꙁабранєно ѥстъ)',
+'template-semiprotected' => '(чѧстьно ꙁабранѥно)',
 
 # History pages
-'viewpagelogs'           => 'си страницѧ їсторїѩ',
-'cur'                    => 'нꙑ҃н',
-'last'                   => 'пс҃лд',
-'page_first'             => 'прьва страница',
-'page_last'              => 'послѣдьнꙗ страница',
+'viewpagelogs' => 'си страницѧ їсторїѩ',
+'cur' => 'нꙑ҃н',
+'last' => 'пс҃лд',
+'page_first' => 'прьва страница',
+'page_last' => 'послѣдьнꙗ страница',
 'history-fieldset-title' => 'виждь мѣнъ їсторїѭ',
-'history-show-deleted'   => 'тъкъмо поничьжєнꙑ мѣнꙑ',
-'histfirst'              => 'прьвꙑ',
-'histlast'               => 'послѣдьнꙗ',
-'historysize'            => '{{PLURAL:$1|1 баитъ|$1 баита|$1 баитъ}}',
-'historyempty'           => '(поусто)',
+'history-show-deleted' => 'тъкъмо поничьжєнꙑ мѣнꙑ',
+'histfirst' => 'прьвꙑ',
+'histlast' => 'послѣдьнꙗ',
+'historysize' => '{{PLURAL:$1|1 баитъ|$1 баита|$1 баитъ}}',
+'historyempty' => '(поусто)',
 
 # Revision feed
-'history-feed-title'          => 'мѣнъ їсторїꙗ',
+'history-feed-title' => 'мѣнъ їсторїꙗ',
 'history-feed-item-nocomment' => '$1 при $2',
 
 # Revision deletion
-'rev-delundel'               => 'каꙁаниѥ / съкрꙑтиѥ',
-'rev-showdeleted'            => 'виждь',
+'rev-delundel' => 'каꙁаниѥ / съкрꙑтиѥ',
+'rev-showdeleted' => 'виждь',
 'revdelete-show-file-submit' => 'да',
-'revdelete-radio-set'        => 'да',
-'revdelete-radio-unset'      => 'нѣтъ',
-'revdelete-log'              => 'какъ съмꙑслъ :',
-'pagehist'                   => 'страницѧ їсторїꙗ',
-'deletedhist'                => 'поничьжєна їсторїꙗ',
-'revdelete-otherreason'      => 'инъ или допльнитєл҄ьнъ съмꙑслъ :',
-'revdelete-reasonotherlist'  => 'инъ съмꙑслъ',
+'revdelete-radio-set' => 'да',
+'revdelete-radio-unset' => 'нѣтъ',
+'revdelete-log' => 'какъ съмꙑслъ :',
+'pagehist' => 'страницѧ їсторїꙗ',
+'deletedhist' => 'поничьжєна їсторїꙗ',
+'revdelete-otherreason' => 'инъ или допльнитєл҄ьнъ съмꙑслъ :',
+'revdelete-reasonotherlist' => 'инъ съмꙑслъ',
 
 # History merging
 'mergehistory-reason' => 'какъ съмꙑслъ :',
 
 # Search results
-'searchresults'                  => 'исканиꙗ слѣдьствиѥ',
-'searchresults-title'            => 'исканиꙗ ⁖ $1 ⁖ слѣдьствиѥ',
-'viewprevnext'                   => 'виждь ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists'              => "'''страница имєньмь ⁖ [[:$1]] ⁖ ѥстъ створѥна ю'''",
-'searchmenu-new'                 => "'''страницѫ ⁖ [[:$1]] ⁖ сътворити можєши'''",
-'searchhelp-url'                 => 'Help:Каталогъ',
-'searchprofile-articles'         => 'члѣни',
-'searchprofile-project'          => 'опꙑтьствовании и помощи страницѧ',
-'searchprofile-images'           => 'дѣла',
-'searchprofile-everything'       => 'вьсѩ страницѧ',
+'searchresults' => 'исканиꙗ слѣдьствиѥ',
+'searchresults-title' => 'исканиꙗ ⁖ $1 ⁖ слѣдьствиѥ',
+'viewprevnext' => 'виждь ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''страница имєньмь ⁖ [[:$1]] ⁖ ѥстъ створѥна ю'''",
+'searchmenu-new' => "'''страницѫ ⁖ [[:$1]] ⁖ сътворити можєши'''",
+'searchhelp-url' => 'Help:Каталогъ',
+'searchprofile-articles' => 'члѣни',
+'searchprofile-project' => 'опꙑтьствовании и помощи страницѧ',
+'searchprofile-images' => 'дѣла',
+'searchprofile-everything' => 'вьсѩ страницѧ',
 'searchprofile-articles-tooltip' => 'ищи въ $1',
-'search-result-size'             => '$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 словєсъ}})',
-'search-redirect'                => '(прѣнаправлєниѥ $1)',
-'search-section'                 => '(чѧсть $1)',
-'search-interwiki-caption'       => 'родьствьна опꙑтьствованиꙗ',
-'search-interwiki-more'          => '(вѧщє)',
-'searchall'                      => 'вьсꙗ',
-'powersearch'                    => 'ищи',
-'powersearch-redir'              => 'прѣнаправлѥниꙗ',
+'search-result-size' => '$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 словєсъ}})',
+'search-redirect' => '(прѣнаправлєниѥ $1)',
+'search-section' => '(чѧсть $1)',
+'search-interwiki-caption' => 'родьствьна опꙑтьствованиꙗ',
+'search-interwiki-more' => '(вѧщє)',
+'searchall' => 'вьсꙗ',
+'powersearch' => 'ищи',
+'powersearch-redir' => 'прѣнаправлѥниꙗ',
 
 # Preferences page
-'preferences'               => 'строи',
-'mypreferences'             => 'мои строи',
-'changepassword'            => 'таина словєсє иꙁмѣнѥниѥ',
-'prefs-rc'                  => 'послѣдьнѩ мѣнꙑ',
-'prefs-watchlist'           => 'блюдєниꙗ',
-'prefs-resetpass'           => 'таина словєсє иꙁмѣнѥниѥ',
-'saveprefs'                 => 'съхранѥниѥ',
-'prefs-editing'             => 'исправлѥниѥ',
-'rows'                      => 'рѧдꙑ :',
-'searchresultshead'         => 'исканиѥ',
-'timezoneregion-africa'     => 'Афрїка',
-'timezoneregion-america'    => 'Амєрїка',
+'preferences' => 'строи',
+'mypreferences' => 'мои строи',
+'changepassword' => 'таина словєсє иꙁмѣнѥниѥ',
+'prefs-rc' => 'послѣдьнѩ мѣнꙑ',
+'prefs-watchlist' => 'блюдєниꙗ',
+'prefs-resetpass' => 'таина словєсє иꙁмѣнѥниѥ',
+'saveprefs' => 'съхранѥниѥ',
+'prefs-editing' => 'исправлѥниѥ',
+'rows' => 'рѧдꙑ :',
+'searchresultshead' => 'исканиѥ',
+'timezoneregion-africa' => 'Афрїка',
+'timezoneregion-america' => 'Амєрїка',
 'timezoneregion-antarctica' => 'Антарктїка',
-'timezoneregion-arctic'     => 'Арктїка',
-'timezoneregion-asia'       => 'Асїꙗ',
-'timezoneregion-atlantic'   => 'Атлантїчьскъ ѡкєанъ',
-'timezoneregion-australia'  => 'Аѵстралїꙗ',
-'timezoneregion-europe'     => 'Єѵрѡпа',
-'timezoneregion-indian'     => 'Їндїискъ ѡкєанъ',
-'timezoneregion-pacific'    => 'Тихꙑи ѡкєанъ',
-'prefs-searchoptions'       => 'исканиꙗ строи',
-'prefs-namespaces'          => 'имєнъ просторꙑ',
-'prefs-files'               => 'дѣла',
-'username'                  => 'польꙃєватєлꙗ имѧ :',
-'uid'                       => 'польꙃєватєлꙗ число :',
-'yourrealname'              => 'истиньно имѧ :',
-'yourlanguage'              => 'ѩꙁꙑкъ :',
-'yournick'                  => 'аѵтографъ :',
-'yourgender'                => 'полъ :',
-'gender-male'               => 'мѫжъ',
-'gender-female'             => 'жєна',
-'prefs-signature'           => 'аѵтографъ',
+'timezoneregion-arctic' => 'Арктїка',
+'timezoneregion-asia' => 'Асїꙗ',
+'timezoneregion-atlantic' => 'Атлантїчьскъ ѡкєанъ',
+'timezoneregion-australia' => 'Аѵстралїꙗ',
+'timezoneregion-europe' => 'Єѵрѡпа',
+'timezoneregion-indian' => 'Їндїискъ ѡкєанъ',
+'timezoneregion-pacific' => 'Тихꙑи ѡкєанъ',
+'prefs-searchoptions' => 'исканиꙗ строи',
+'prefs-namespaces' => 'имєнъ просторꙑ',
+'prefs-files' => 'дѣла',
+'username' => 'польꙃєватєлꙗ имѧ :',
+'uid' => 'польꙃєватєлꙗ число :',
+'yourrealname' => 'истиньно имѧ :',
+'yourlanguage' => 'ѩꙁꙑкъ :',
+'yournick' => 'аѵтографъ :',
+'yourgender' => 'полъ :',
+'gender-male' => 'мѫжъ',
+'gender-female' => 'жєна',
+'prefs-signature' => 'аѵтографъ',
 
 # User rights
 'userrights-reason' => 'какъ съмꙑслъ :',
 
 # Groups
-'group'            => 'чинъ :',
-'group-user'       => 'польꙃєватєлє',
-'group-bot'        => 'аѵтомати',
-'group-sysop'      => 'съмотритєлє',
+'group' => 'чинъ :',
+'group-user' => 'польꙃєватєлє',
+'group-bot' => 'аѵтомати',
+'group-sysop' => 'съмотритєлє',
 'group-bureaucrat' => 'чинодатєлє',
 
-'group-user-member'       => '{{GENDER:$1|польꙃєватєл҄ь|польꙃєватєл҄ьница}}',
-'group-bot-member'        => 'аѵтоматъ',
-'group-sysop-member'      => 'съмотритєл҄ь',
-'group-bureaucrat-member' => 'чинодатєл҄ь',
+'group-user-member' => '{{GENDER:$1|польꙃєватєл҄ь|польꙃєватєл҄ьница}}',
+'group-bot-member' => '{{GENDER:$1|аѵтоматъ}}',
+'group-sysop-member' => '{{GENDER:$1|съмотритєл҄ь}}',
+'group-bureaucrat-member' => '{{GENDER:$1|чинодатєл҄ь}}',
 
-'grouppage-user'       => '{{ns:project}}:Польꙃєватєлє',
-'grouppage-bot'        => '{{ns:project}}:Аѵтомати',
-'grouppage-sysop'      => '{{ns:project}}:Съмотритєлє',
+'grouppage-user' => '{{ns:project}}:Польꙃєватєлє',
+'grouppage-bot' => '{{ns:project}}:Аѵтомати',
+'grouppage-sysop' => '{{ns:project}}:Съмотритєлє',
 'grouppage-bureaucrat' => '{{ns:project}}:Чинодатєлє',
 
 # User rights log
@@ -447,76 +452,76 @@ $messages = array(
 'action-edit' => 'си страницѧ исправлєниѥ',
 
 # Recent changes
-'nchanges'                    => '$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}',
-'recentchanges'               => 'послѣдьнѩ мѣнꙑ',
-'recentchanges-legend'        => 'послѣдьн҄ь мѣнъ строи',
-'recentchangestext'           => 'с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши',
+'nchanges' => '$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}',
+'recentchanges' => 'послѣдьнѩ мѣнꙑ',
+'recentchanges-legend' => 'послѣдьн҄ь мѣнъ строи',
+'recentchangestext' => 'с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши',
 'recentchanges-label-newpage' => 'по сѥи мѣнꙑ нова страница сътворѥна ѥстъ',
-'recentchanges-label-minor'   => 'малаꙗ мѣна',
-'recentchanges-label-bot'     => 'сѭ мѣноу аѵтоматъ сътворихъ',
-'rcnote'                      => "нижѣ {{PLURAL:$1|'''1''' послѣдьнѭ мѣнѫ|'''$1''' послѣдьни мѣнꙑ|'''$1''' послѣдьнъ мѣнъ|'''$1''' послѣдьнъ мѣнъ}} ꙁа {{PLURAL:$2|дьнь|'''$2''' дьнꙗ|'''$2''' дьнъ|'''$2''' дьнъ}} · ꙗко нꙑнѣ $5 · $4 лѣта",
-'rcshowhideminor'             => '$1 малꙑ мѣнꙑ',
-'rcshowhidebots'              => '$1 аѵтоматъ',
-'rcshowhideliu'               => '$1 польꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣсто · мѣнꙑ',
-'rcshowhideanons'             => '$1 анѡнѷмьнъ польꙃєватєлъ мѣнꙑ',
-'rcshowhidemine'              => '$1 моꙗ мѣнꙑ',
-'rclinks'                     => '$1 послѣдьн҄ь  мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3',
-'diff'                        => 'ра҃ꙁн',
-'hist'                        => 'їс҃т',
-'hide'                        => 'съкрꙑи',
-'show'                        => 'виждь',
-'minoreditletter'             => 'м҃л',
-'newpageletter'               => 'н҃в',
-'boteditletter'               => 'а҃ѵ',
+'recentchanges-label-minor' => 'малаꙗ мѣна',
+'recentchanges-label-bot' => 'сѭ мѣноу аѵтоматъ сътворихъ',
+'rcnote' => "нижѣ {{PLURAL:$1|'''1''' послѣдьнѭ мѣнѫ|'''$1''' послѣдьни мѣнꙑ|'''$1''' послѣдьнъ мѣнъ|'''$1''' послѣдьнъ мѣнъ}} ꙁа {{PLURAL:$2|дьнь|'''$2''' дьнꙗ|'''$2''' дьнъ|'''$2''' дьнъ}} · ꙗко нꙑнѣ $5 · $4 лѣта",
+'rcshowhideminor' => '$1 малꙑ мѣнꙑ',
+'rcshowhidebots' => '$1 аѵтоматъ',
+'rcshowhideliu' => '$1 польꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣсто · мѣнꙑ',
+'rcshowhideanons' => '$1 анѡнѷмьнъ польꙃєватєлъ мѣнꙑ',
+'rcshowhidemine' => '$1 моꙗ мѣнꙑ',
+'rclinks' => '$1 послѣдьн҄ь  мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3',
+'diff' => 'ра҃ꙁн',
+'hist' => 'їс҃т',
+'hide' => 'съкрꙑи',
+'show' => 'виждь',
+'minoreditletter' => 'м҃л',
+'newpageletter' => 'н҃в',
+'boteditletter' => 'а҃ѵ',
 
 # Recent changes linked
-'recentchangeslinked'         => 'съвѧꙁанꙑ страницѧ',
-'recentchangeslinked-feed'    => 'съвѧꙁанꙑ страницѧ',
+'recentchangeslinked' => 'съвѧꙁанꙑ страницѧ',
+'recentchangeslinked-feed' => 'съвѧꙁанꙑ страницѧ',
 'recentchangeslinked-toolbox' => 'съвѧꙁанꙑ страницѧ',
-'recentchangeslinked-page'    => 'страницѧ имѧ :',
+'recentchangeslinked-page' => 'страницѧ имѧ :',
 
 # Upload
-'upload'              => 'положєниѥ дѣла',
-'uploadbtn'           => 'положєниѥ дѣла',
-'uploadlog'           => 'дѣлъ положєниꙗ їсторїꙗ',
-'uploadlogpage'       => 'дѣлъ положєниꙗ їсторїꙗ',
-'filename'            => 'дѣла имѧ',
-'filedesc'            => 'опьсаниѥ',
-'fileuploadsummary'   => 'опьсаниѥ:',
-'uploadedimage'       => '⁖ [[$1]] ⁖ положєнъ ѥстъ',
-'watchthisupload'     => 'си дѣла блюдєниѥ',
+'upload' => 'положєниѥ дѣла',
+'uploadbtn' => 'положєниѥ дѣла',
+'uploadlog' => 'дѣлъ положєниꙗ їсторїꙗ',
+'uploadlogpage' => 'дѣлъ положєниꙗ їсторїꙗ',
+'filename' => 'дѣла имѧ',
+'filedesc' => 'опьсаниѥ',
+'fileuploadsummary' => 'опьсаниѥ:',
+'uploadedimage' => '⁖ [[$1]] ⁖ положєнъ ѥстъ',
+'watchthisupload' => 'си дѣла блюдєниѥ',
 'upload-success-subj' => 'дѣло положєно ѥстъ',
 
-'license'        => 'прощєниѥ :',
+'license' => 'прощєниѥ :',
 'license-header' => 'прощєниѥ',
 
 # Special:ListFiles
-'imgfile'        => 'дѣло',
-'listfiles'      => 'дѣлъ каталогъ',
+'imgfile' => 'дѣло',
+'listfiles' => 'дѣлъ каталогъ',
 'listfiles_name' => 'и́мѧ',
 'listfiles_user' => 'польꙃєватєл҄ь',
 'listfiles_size' => 'мѣра',
 
 # File description page
-'file-anchor-link'   => 'дѣло',
-'filehist'           => 'дѣла їсторїꙗ',
+'file-anchor-link' => 'дѣло',
+'filehist' => 'дѣла їсторїꙗ',
 'filehist-deleteone' => 'поничьжєниѥ',
-'filehist-current'   => 'нꙑнѣщьн҄ь обраꙁъ',
-'filehist-datetime'  => 'дьнь / врѣмѧ',
-'filehist-user'      => 'польꙃєватєл҄ь',
-'filehist-filesize'  => 'дѣла мѣра',
-'filehist-comment'   => 'опьсаниѥ',
-'imagelinks'         => 'дѣла польꙃєваниѥ',
-'sharedupload'       => 'сѥ дѣло въ $1 съхранѥно ѥстъ дѣла · ѥгожє дроугꙑ опꙑтьствованиѩ польꙃєвати могѫтъ',
+'filehist-current' => 'нꙑнѣщьн҄ь обраꙁъ',
+'filehist-datetime' => 'дьнь / врѣмѧ',
+'filehist-user' => 'польꙃєватєл҄ь',
+'filehist-filesize' => 'дѣла мѣра',
+'filehist-comment' => 'опьсаниѥ',
+'imagelinks' => 'дѣла польꙃєваниѥ',
+'sharedupload' => 'сѥ дѣло въ $1 съхранѥно ѥстъ дѣла · ѥгожє дроугꙑ опꙑтьствованиѩ польꙃєвати могѫтъ',
 
 # File reversion
 'filerevert-comment' => 'какъ съмꙑслъ :',
 
 # File deletion
-'filedelete'         => 'поничьжєниѥ $1',
-'filedelete-legend'  => 'дѣла поничьжєниѥ',
+'filedelete' => 'поничьжєниѥ $1',
+'filedelete-legend' => 'дѣла поничьжєниѥ',
 'filedelete-comment' => 'какъ съмꙑслъ :',
-'filedelete-submit'  => 'поничьжєниѥ',
+'filedelete-submit' => 'поничьжєниѥ',
 
 # MIME search
 'mimetype' => 'MIME тѷпъ :',
@@ -532,57 +537,57 @@ $messages = array(
 'randomredirect' => 'прѣнаправлѥниє въ нєꙁаапѫ',
 
 # Statistics
-'statistics'              => 'статїстїка',
+'statistics' => 'статїстїка',
 'statistics-header-pages' => 'страницѧ статїстїка',
 'statistics-header-edits' => 'мѣнъ статїстїка',
 'statistics-header-users' => 'польꙃєватєлъ статїстїка',
-'statistics-articles'     => 'истиньнꙑ члѣни',
-'statistics-pages'        => 'страницѧ',
-'statistics-files'        => 'положєнꙑ дѣла',
+'statistics-articles' => 'истиньнꙑ члѣни',
+'statistics-pages' => 'страницѧ',
+'statistics-files' => 'положєнꙑ дѣла',
 
-'disambiguations'     => 'страницѧ ижє съвѧꙁи съ мъногосъмꙑслиꙗ имѫтъ',
+'disambiguations' => 'страницѧ ижє съвѧꙁи съ мъногосъмꙑслиꙗ имѫтъ',
 'disambiguationspage' => 'Template:мъногосъмꙑслиѥ',
 
-'brokenredirects-edit'   => 'исправи',
+'brokenredirects-edit' => 'исправи',
 'brokenredirects-delete' => 'поничьжєниѥ',
 
 # Miscellaneous special pages
-'nbytes'            => '$1 {{PLURAL:$1|баитъ|баита|баитъ}}',
-'nlinks'            => '$1 {{PLURAL:$1|съвѧꙁь|съвѧꙁи|съвѧꙁии}}',
-'nmembers'          => '$1 {{PLURAL:$1|члѣнъ|члѣна|члѣни|члѣнъ}}',
-'shortpages'        => 'кратъкꙑ страницѧ',
-'listusers'         => 'польꙃєватєлъ каталогъ',
-'usercreated'       => '{{GENDER:$3|сътворилъ|сътворила}} мѣсто $1 въ $2',
-'newpages'          => 'нови члѣни',
+'nbytes' => '$1 {{PLURAL:$1|баитъ|баита|баитъ}}',
+'nlinks' => '$1 {{PLURAL:$1|съвѧꙁь|съвѧꙁи|съвѧꙁии}}',
+'nmembers' => '$1 {{PLURAL:$1|члѣнъ|члѣна|члѣни|члѣнъ}}',
+'shortpages' => 'кратъкꙑ страницѧ',
+'listusers' => 'польꙃєватєлъ каталогъ',
+'usercreated' => '{{GENDER:$3|сътворилъ|сътворила}} мѣсто $1 въ $2',
+'newpages' => 'нови члѣни',
 'newpages-username' => 'польꙃєватєлꙗ имѧ :',
-'move'              => 'прѣимєнованиѥ',
-'movethispage'      => 'си страницѧ прѣимєнованиѥ',
+'move' => 'прѣимєнованиѥ',
+'movethispage' => 'си страницѧ прѣимєнованиѥ',
 
 # Book sources
 'booksources-go' => 'прѣиди',
 
 # Special:Log
-'specialloguserlabel'  => 'польꙃєватєл҄ь:',
+'specialloguserlabel' => 'польꙃєватєл҄ь:',
 'speciallogtitlelabel' => 'страницѧ имѧ :',
-'log'                  => 'їсторїѩ',
-'all-logs-page'        => 'вьсѩ обьщѧ їсторїѩ',
+'log' => 'їсторїѩ',
+'all-logs-page' => 'вьсѩ обьщѧ їсторїѩ',
 
 # Special:AllPages
-'allpages'       => 'вьсѩ страницѧ',
+'allpages' => 'вьсѩ страницѧ',
 'alphaindexline' => 'отъ $1 до $2',
-'allpagesfrom'   => 'страницѧ видѣти хощѫ съ начѧльнами боукъвами :',
-'allarticles'    => 'вьсѩ страницѧ',
+'allpagesfrom' => 'страницѧ видѣти хощѫ съ начѧльнами боукъвами :',
+'allarticles' => 'вьсѩ страницѧ',
 'allpagessubmit' => 'прѣиди',
 
 # Special:Categories
 'categories' => 'катигорїѩ',
 
 # Special:DeletedContributions
-'deletedcontributions'       => 'поничьжєнꙑ добродѣꙗниꙗ',
+'deletedcontributions' => 'поничьжєнꙑ добродѣꙗниꙗ',
 'deletedcontributions-title' => 'поничьжєнꙑ добродѣꙗниꙗ',
 
 # Special:LinkSearch
-'linksearch'    => 'вънѣщьн҄ь съвѧꙁь исканиѥ',
+'linksearch' => 'вънѣщьн҄ь съвѧꙁь исканиѥ',
 'linksearch-ok' => 'ищи',
 
 # Special:ListUsers
@@ -595,141 +600,147 @@ $messages = array(
 'emailuser' => 'посъли єпїстолѫ',
 
 # Watchlist
-'watchlist'        => 'моꙗ блюдєниꙗ',
-'mywatchlist'      => 'моꙗ блюдєниꙗ',
-'addedwatchtext'   => "страница ⁖ [[:$1]] ⁖ нꙑнѣ подъ твоимь [[Special:Watchlist|блюдєниѥмь]] ѥстъ ⁙
+'watchlist' => 'моꙗ блюдєниꙗ',
+'mywatchlist' => 'моꙗ блюдєниꙗ',
+'addedwatchtext' => "страница ⁖ [[:$1]] ⁖ нꙑнѣ подъ твоимь [[Special:Watchlist|блюдєниѥмь]] ѥстъ ⁙
 всꙗ ѥѩ и ѥѩжє бєсѣдꙑ мѣнꙑ страницѧ ⁖ [[Special:Watchlist|моꙗ блюдєниꙗ]] ⁖ покаꙁанꙑ сѫтъ и  [[Special:RecentChanges|послѣдьнъ мѣнъ]] каталоꙃѣ '''чрьнꙑимъ''' сѧ авлꙗѭтъ",
 'removedwatchtext' => 'страница ⁖ [[:$1]] ⁖ нꙑнѣ твоѥго [[Special:Watchlist|блюдєниꙗ]] иꙁнєсєна ѥстъ',
-'watch'            => 'блюдєниѥ',
-'watchthispage'    => 'си страницѧ блюдєниѥ',
-'unwatch'          => 'остави блюдєниѥ',
+'watch' => 'блюдєниѥ',
+'watchthispage' => 'си страницѧ блюдєниѥ',
+'unwatch' => 'остави блюдєниѥ',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'блюдєниѥ ...',
+'watching' => 'блюдєниѥ ...',
 'unwatching' => 'оставьлєниѥ блюдєниꙗ ...',
 
 'created' => 'сътворѥнъ ѥстъ',
 
 # Delete
-'deletepage'      => 'поничьжєниѥ',
-'excontent'       => "вънѫтри бѣ: '$1'",
+'deletepage' => 'поничьжєниѥ',
+'excontent' => "вънѫтри бѣ: '$1'",
 'excontentauthor' => "вънѫтри бѣ : '$1' (и послѣдьн҄ии дѣтєл҄ь бѣ '[[Special:Contributions/$2|$2]]')",
-'delete-legend'   => 'поничьжєниѥ',
-'actioncomplete'  => 'дѣиство сътворєно ѥстъ',
-'deletedtext'     => 'страница ⁖ $1 ⁖ поничьжєна ѥстъ ⁙
+'delete-legend' => 'поничьжєниѥ',
+'actioncomplete' => 'дѣиство сътворєно ѥстъ',
+'deletedtext' => 'страница ⁖ $1 ⁖ поничьжєна ѥстъ ⁙
 виждь ⁖ $2 ⁖ послѣдьнъ поничьжєниѩ дѣлꙗ',
-'dellogpage'      => 'поничьжєниꙗ їсторїꙗ',
-'deletionlog'     => 'поничьжєниꙗ їсторїꙗ',
-'deletecomment'   => 'какъ съмꙑслъ :',
+'dellogpage' => 'поничьжєниꙗ їсторїꙗ',
+'deletionlog' => 'поничьжєниꙗ їсторїꙗ',
+'deletecomment' => 'какъ съмꙑслъ :',
 
 # Protect
-'protectlogpage'         => 'ꙁабранѥниꙗ їсторїꙗ',
-'protectedarticle'       => '⁖ [[$1]] ⁖ ꙁабранѥна ѥстъ',
-'prot_1movedto2'         => '⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ',
-'protectcomment'         => 'какъ съмꙑслъ :',
-'protect-level-sysop'    => 'толико съмотритєлє',
-'protect-expiry-options' => '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',
+'protectlogpage' => 'ꙁабранѥниꙗ їсторїꙗ',
+'protectedarticle' => '⁖ [[$1]] ⁖ ꙁабранѥна ѥстъ',
+'prot_1movedto2' => '⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ',
+'protectcomment' => 'какъ съмꙑслъ :',
+'protect-level-sysop' => 'толико съмотритєлє',
+'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',
+'pagesize' => '(баитъ)',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'исправи',
-'restriction-move'   => 'прѣимєнованиѥ',
+'restriction-edit' => 'исправи',
+'restriction-move' => 'прѣимєнованиѥ',
 'restriction-upload' => 'положєниѥ',
 
 # Undelete
-'undeletecomment'        => 'какъ съмꙑслъ :',
+'undeletecomment' => 'какъ съмꙑслъ :',
 'undelete-search-submit' => 'ищи',
 
 # Namespace form on various pages
-'namespace'      => 'имєнъ просторъ:',
+'namespace' => 'имєнъ просторъ:',
 'blanknamespace' => '(главьно)',
 
 # Contributions
-'contributions'       => 'польꙃєватєлꙗ добродѣꙗниꙗ',
+'contributions' => 'польꙃєватєлꙗ добродѣꙗниꙗ',
 'contributions-title' => 'польꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗниꙗ',
-'mycontris'           => 'моꙗ добродѣꙗниꙗ',
-'contribsub2'         => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)',
-'uctop'               => '(послѣдьнꙗ мѣна)',
+'mycontris' => 'моꙗ добродѣꙗниꙗ',
+'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)',
+'uctop' => '(послѣдьнꙗ мѣна)',
 
 'sp-contributions-blocklog' => 'ꙁаграждєниꙗ їсторїꙗ',
-'sp-contributions-deleted'  => 'поничьжєнꙑ добродѣꙗниꙗ',
-'sp-contributions-uploads'  => 'положєнꙑ дѣла',
-'sp-contributions-logs'     => 'їсторїѩ',
-'sp-contributions-talk'     => 'бєсѣда',
+'sp-contributions-deleted' => 'поничьжєнꙑ добродѣꙗниꙗ',
+'sp-contributions-uploads' => 'положєнꙑ дѣла',
+'sp-contributions-logs' => 'їсторїѩ',
+'sp-contributions-talk' => 'бєсѣда',
 'sp-contributions-username' => 'IP число или польꙃєватєлꙗ имѧ :',
-'sp-contributions-submit'   => 'ищи',
+'sp-contributions-submit' => 'ищи',
 
 # What links here
-'whatlinkshere'            => 'дос̑ьдєщьнѩ съвѧꙁи',
-'whatlinkshere-title'      => 'страницѧ ижє съ ⁖ $1 ⁖ съвѧꙁи имѫтъ',
-'whatlinkshere-page'       => 'страница :',
-'isredirect'               => 'прѣнаправлѥниѥ',
-'istemplate'               => 'внѫтри страницѧ',
-'isimage'                  => 'дѣла съвѧꙁь',
-'whatlinkshere-links'      => '← съвѧꙁи',
+'whatlinkshere' => 'дос̑ьдєщьнѩ съвѧꙁи',
+'whatlinkshere-title' => 'страницѧ ижє съ ⁖ $1 ⁖ съвѧꙁи имѫтъ',
+'whatlinkshere-page' => 'страница :',
+'isredirect' => 'прѣнаправлѥниѥ',
+'istemplate' => 'внѫтри страницѧ',
+'isimage' => 'дѣла съвѧꙁь',
+'whatlinkshere-links' => '← съвѧꙁи',
 'whatlinkshere-hideredirs' => '$1 прѣнаправлѥниꙗ',
-'whatlinkshere-hidelinks'  => '$1 съвѧꙁи',
+'whatlinkshere-hidelinks' => '$1 съвѧꙁи',
 
 # Block/unblock
-'blockip'            => 'ꙁагради польꙃєватєл҄ь',
+'blockip' => 'ꙁагради польꙃєватєл҄ь',
 'ipadressorusername' => 'IP число или польꙃєватєлꙗ имѧ :',
-'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',
-'ipblocklist'        => 'ꙁаграждєнꙑ польꙃєватєлє',
-'blocklist-reason'   => 'какъ съмꙑслъ',
+'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',
+'ipblocklist' => 'ꙁаграждєнꙑ польꙃєватєлє',
+'blocklist-reason' => 'какъ съмꙑслъ',
 'ipblocklist-submit' => 'исканиѥ',
-'infiniteblock'      => 'вѣчьно',
-'blocklink'          => 'ꙁагради',
-'contribslink'       => 'добродѣꙗниꙗ',
-'blocklogpage'       => 'ꙁаграждєниꙗ їсторїꙗ',
+'infiniteblock' => 'вѣчьно',
+'blocklink' => 'ꙁагради',
+'contribslink' => 'добродѣꙗниꙗ',
+'blocklogpage' => 'ꙁаграждєниꙗ їсторїꙗ',
 
 # Move page
-'move-page'               => 'прѣимєнованиѥ ⁖ $1 ⁖',
-'move-page-legend'        => 'страницѧ прѣимєнованиѥ',
-'movearticle'             => 'страница :',
-'newtitle'                => 'ново имѧ :',
-'move-watch'              => 'си страницѧ блюдєниѥ',
-'movepagebtn'             => 'прѣимєнованиѥ',
-'pagemovedsub'            => 'прѣимєнованиѥ сътворѥно ѥстъ',
-'movepage-moved'          => "'''⁖ $1 ⁖ нарєчєнъ ⁖ $2⁖ ѥстъ'''",
+'move-page' => 'прѣимєнованиѥ ⁖ $1 ⁖',
+'move-page-legend' => 'страницѧ прѣимєнованиѥ',
+'movearticle' => 'страница :',
+'newtitle' => 'ново имѧ :',
+'move-watch' => 'си страницѧ блюдєниѥ',
+'movepagebtn' => 'прѣимєнованиѥ',
+'pagemovedsub' => 'прѣимєнованиѥ сътворѥно ѥстъ',
+'movepage-moved' => "'''⁖ $1 ⁖ нарєчєнъ ⁖ $2⁖ ѥстъ'''",
 'movepage-moved-redirect' => 'прѣнаправлѥниѥ сътворѥно бѣ',
-'movedto'                 => 'прѣимєновано въ',
-'movetalk'                => 'си страницѧ бєсѣдꙑ прѣимєнованиѥ',
-'movelogpage'             => 'прѣимєнованиꙗ їсторїꙗ',
-'movereason'              => 'какъ съмꙑслъ :',
-'move-leave-redirect'     => 'прѣнаправлѥниꙗ сътворѥниѥ',
+'movedto' => 'прѣимєновано въ',
+'movetalk' => 'си страницѧ бєсѣдꙑ прѣимєнованиѥ',
+'movelogpage' => 'прѣимєнованиꙗ їсторїꙗ',
+'movereason' => 'какъ съмꙑслъ :',
+'move-leave-redirect' => 'прѣнаправлѥниꙗ сътворѥниѥ',
 
 # Namespace 8 related
-'allmessages'     => 'сѷстимьнꙑ напьсаниꙗ',
+'allmessages' => 'сѷстимьнꙑ напьсаниꙗ',
 'allmessagesname' => 'имѧ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'твоꙗ польꙃєватєл҄ьска страница',
-'tooltip-pt-mytalk'              => 'твоꙗ бєсѣдꙑ страница',
-'tooltip-pt-preferences'         => 'твои строи',
-'tooltip-pt-mycontris'           => 'твоѩ добродѣꙗнии каталогъ',
-'tooltip-pt-logout'              => 'ис̾ходъ',
-'tooltip-ca-talk'                => 'си страницѧ бєсѣда',
-'tooltip-ca-viewsource'          => 'си страница ꙁабранєна ѥстъ ⁙
+'tooltip-pt-userpage' => 'твоꙗ польꙃєватєл҄ьска страница',
+'tooltip-pt-mytalk' => 'твоꙗ бєсѣдꙑ страница',
+'tooltip-pt-preferences' => 'твои строи',
+'tooltip-pt-mycontris' => 'твоѩ добродѣꙗнии каталогъ',
+'tooltip-pt-logout' => 'ис̾ходъ',
+'tooltip-ca-talk' => 'си страницѧ бєсѣда',
+'tooltip-ca-viewsource' => 'си страница ꙁабранєна ѥстъ ⁙
 ѥѩ источьнъ обраꙁъ видєти можєши',
-'tooltip-ca-protect'             => 'си страницѧ ꙁабранєниѥ',
-'tooltip-ca-delete'              => 'си страницѧ поничьжєниѥ',
-'tooltip-ca-move'                => 'си страницѧ прѣимєнованиѥ',
-'tooltip-ca-watch'               => 'си страницѧ блюдєниѥ',
-'tooltip-search'                 => 'ищи {{{grammar:genitive|{{SITENAME}}}}} страницѧ',
-'tooltip-p-logo'                 => 'главьна страница',
-'tooltip-n-mainpage'             => 'виждь главьноу страницѫ',
+'tooltip-ca-protect' => 'си страницѧ ꙁабранєниѥ',
+'tooltip-ca-delete' => 'си страницѧ поничьжєниѥ',
+'tooltip-ca-move' => 'си страницѧ прѣимєнованиѥ',
+'tooltip-ca-watch' => 'си страницѧ блюдєниѥ',
+'tooltip-search' => 'ищи {{{grammar:genitive|{{SITENAME}}}}} страницѧ',
+'tooltip-p-logo' => 'главьна страница',
+'tooltip-n-mainpage' => 'виждь главьноу страницѫ',
 'tooltip-n-mainpage-description' => 'виждь главьноу страницѫ',
-'tooltip-n-recentchanges'        => 'послѣдьн҄ь мѣнъ каталогъ',
-'tooltip-t-contributions'        => 'виждь польꙃєватєлꙗ добродѣꙗнии каталогъ',
-'tooltip-t-upload'               => 'положєниѥ дѣлъ',
-'tooltip-t-specialpages'         => 'вьсѣѩ нарочьнъ страницѧ каталогъ',
-'tooltip-t-print'                => 'сѥѩ страницѧ пєчатьнъ обраꙁъ',
-'tooltip-ca-nstab-special'       => 'си нарочьна страница ѥстъ · ѥѩжє иꙁмѣнꙗти нє можєши',
-'tooltip-watch'                  => 'си страницѧ блюдєниѥ',
+'tooltip-n-recentchanges' => 'послѣдьн҄ь мѣнъ каталогъ',
+'tooltip-t-contributions' => 'виждь польꙃєватєлꙗ добродѣꙗнии каталогъ',
+'tooltip-t-upload' => 'положєниѥ дѣлъ',
+'tooltip-t-specialpages' => 'вьсѣѩ нарочьнъ страницѧ каталогъ',
+'tooltip-t-print' => 'сѥѩ страницѧ пєчатьнъ обраꙁъ',
+'tooltip-ca-nstab-special' => 'си нарочьна страница ѥстъ · ѥѩжє иꙁмѣнꙗти нє можєши',
+'tooltip-watch' => 'си страницѧ блюдєниѥ',
+
+# Info page
+'pageinfo-header-watchlist' => 'блюдєниꙗ',
+'pageinfo-subjectpage' => 'страница',
+'pageinfo-talkpage' => 'бєсѣда',
 
 # Media information
 'file-info-size' => '$1 × $2 п҃ѯ · дѣла мѣра : $3 · MIME тѷпъ : $4',
-'svg-long-desc'  => 'дѣло SVG · обꙑчьнъ обраꙁъ : $1 × $2 п҃ѯ · дѣла мѣра : $3',
+'svg-long-desc' => 'дѣло SVG · обꙑчьнъ обраꙁъ : $1 × $2 п҃ѯ · дѣла мѣра : $3',
 'show-big-image' => 'пльнъ вида обраꙁъ',
 
 # Special:NewFiles
@@ -741,7 +752,7 @@ $messages = array(
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'вьсꙗ',
 'namespacesall' => 'вьсꙗ',
-'monthsall'     => 'вьсѩ',
+'monthsall' => 'вьсѩ',
 
 'unit-pixel' => 'п҃ѯ',
 
@@ -755,13 +766,16 @@ $messages = array(
 'autosumm-new' => 'нова страница ⁖ $1 ⁖ сътворєна  ѥстъ',
 
 # Size units
-'size-bytes'     => '$1 Б҃',
+'size-bytes' => '$1 Б҃',
 'size-kilobytes' => '$1 Х҃Б',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|бєсѣда]])',
+
 # Special:Version
-'version'                  => 'MediaWiki обраꙁъ',
-'version-version'          => '(обраꙁъ $1)',
-'version-license'          => 'прощєниѥ',
+'version' => 'MediaWiki обраꙁъ',
+'version-version' => '(обраꙁъ $1)',
+'version-license' => 'прощєниѥ',
 'version-software-version' => 'обраꙁъ',
 
 # Special:FilePath
@@ -776,10 +790,16 @@ $messages = array(
 # Special:Tags
 'tags-edit' => 'исправи',
 
+# Database error messages
+'dberr-header' => 'Вики тєхнїчьнꙑ отѧжєниꙗ имѣтъ',
+
 # New logging system
-'logentry-delete-delete'        => '$1 поничьжихъ страницѫ ⁖ $3 ⁖',
-'logentry-move-move'            => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖',
+'logentry-delete-delete' => '$1 поничьжихъ страницѫ ⁖ $3 ⁖',
+'logentry-move-move' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖',
 'logentry-move-move-noredirect' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ',
-'logentry-newusers-create'      => '$1 сътворихъ польꙃєватєльско мѣсто',
+'logentry-newusers-create' => '$1 сътворихъ польꙃєватєльско мѣсто',
+
+# API errors
+'api-error-unknownerror' => 'нєвѣдома блаꙁна : ⁖ $1 ⁖',
 
 );
index a8ecad3..1efc850 100644 (file)
@@ -187,6 +187,7 @@ $messages = array(
 'vector-view-edit' => 'Тӳрлет',
 'vector-view-history' => 'Кун-çул',
 'vector-view-view' => 'Вула',
+'vector-view-viewsource' => 'пуçламăш текста пăх',
 
 'errorpagetitle' => 'Йăнăш',
 'returnto' => '$1 страницăна таврăн.',
@@ -210,7 +211,7 @@ $messages = array(
 'deletethispage' => 'Хурат ăна',
 'undelete_short' => '$1 тӳрлетӳсене каялла тавăр',
 'protect' => 'хӳтĕле',
-'protect_change' => 'Ñ\85Ó³Ñ\82Ä\95лÄ\95ве Ñ\83лÄ\83Ñ\88Ñ\82аÑ\80',
+'protect_change' => 'улăштар',
 'protectthispage' => 'Хӳтĕле',
 'unprotect' => 'Хӳтĕлеве пăрахăçла',
 'unprotectthispage' => 'Хӳтĕлеве пăрахăçла',
@@ -574,7 +575,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'suppressionlog' => 'Пытару журналĕ',
 
 # Diffs
-'difference' => '(Версисем хушшинчи улшăнусем)',
 'lineno' => '$1-мĕш йĕрке:',
 'editundo' => 'пăрахăçла',
 
@@ -587,6 +587,7 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'searchhelp-url' => 'Help:Пулăшу',
 'search-result-size' => '$1 ({{PLURAL:$2|1 сăмах|$2 сăмах}})',
 'showingresults' => 'Аяларах эсир <b>#$2</b> пуçласа кăтартнă <b>$1</b> йĕркене куратăр.',
+'showingresultsheader' => "{{PLURAL:$5|Результат '''$1'''  '''$3''' хушшинчен|Результатсем'''$1 - $2''' '''$3''' хушшинчен}}  '''$4''' валли",
 'powersearch' => 'Анлă шырав',
 'powersearch-legend' => 'Анлă шырав',
 
@@ -751,9 +752,13 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'file-anchor-link' => 'Файл',
 'filehist' => 'Файл историйĕ',
 'filehist-current' => 'хальхи',
+'filehist-datetime' => 'Дата/Вăхăт',
+'filehist-thumb' => 'Миниатюра',
+'filehist-thumbtext' => '$1 версийĕн миниатюра ӳкерчĕкĕ',
 'filehist-user' => 'Хутшăнакан',
+'filehist-dimensions' => 'Пысăкăш',
 'filehist-comment' => 'Асăрхав',
-'imagelinks' => 'Файл çине каçасем',
+'imagelinks' => 'Файла усă курни',
 'linkstoimage' => 'Çак страницăсем ку файл çине кăтартаççĕ:',
 'nolinkstoimage' => 'Ку файл çине кăтартакан страницăсем çук.',
 'uploadnewversion-linktext' => 'Ку файлăн çĕнĕ версине кĕрт',
@@ -963,6 +968,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'viewdeletedpage' => 'Кăларса пăрахнă страницăсене пăх',
 'undeleterevisions' => 'Архивра пурĕ $1 верси',
 'undeletebtn' => 'Каялла тавăр!',
+'undeleteviewlink' => 'пăх',
 'undeletereset' => 'Тасат',
 'undeletedrevisions' => '$1 кăларса пăрахнă тӳрлетӳсене каялла тавăрнă',
 'undelete-search-box' => 'Кăларса пăрахнă страницăсен хушшинчи шырав',
@@ -1066,12 +1072,14 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'import-logentry-upload' => '«[[$1]]» — файлтан импортла',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Ð\9fолÑ\8cзоваÑ\82елÑ\8c страници',
-'tooltip-pt-mytalk' => 'Ð\9cан канашлу страници',
+'tooltip-pt-userpage' => 'СиÑ\80Ä\95н Ñ\85Ñ\83Ñ\82Ñ\88Ä\83накан страници',
+'tooltip-pt-mytalk' => 'СиÑ\80Ä\95н канашлу страници',
 'tooltip-pt-preferences' => 'Сирĕн ĕнерлевсем',
+'tooltip-pt-watchlist' => 'Эсир пăхакан страницисем',
+'tooltip-pt-logout' => 'Сайтран тух',
 'tooltip-ca-talk' => 'Статьяна сӳтсе явасси',
 'tooltip-ca-edit' => 'Эсир ку страницӑна тӳрлетме пултаратӑр. Тархасшӑн ҫырса хӑваричен страницӑ мӗнле пулассине пӑхӑр.',
-'tooltip-ca-addsection' => 'Кӗске ӑнлантару хушма пултаратӑр.',
+'tooltip-ca-addsection' => 'Çĕнĕ пай ту',
 'tooltip-ca-viewsource' => 'Ку страницӑна эсир улӑштарма пултараймастӑр. Ӑна мӗнле ҫырнине кӑна пӑхма пултаратӑр.',
 'tooltip-ca-protect' => 'Улӑшратусенчен сыхласси',
 'tooltip-ca-delete' => 'Страницӑна кӑларса пӑрахмалли',
@@ -1080,8 +1088,13 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'tooltip-ca-unwatch' => 'Ку страницӑ хыҫҫӑн урӑх сӑнамалла мар',
 'tooltip-search' => 'Шырав',
 'tooltip-p-logo' => 'Тӗп страницӑ',
+'tooltip-feed-atom' => 'Ку страницăн Atom куçару',
+'tooltip-ca-nstab-image' => 'Файлăн страници',
+'tooltip-ca-nstab-template' => 'Шаблонăн страници',
+'tooltip-ca-nstab-category' => 'Категори страницине уç',
 'tooltip-save' => 'Тӳрлетӳсене астуса хăвармалла',
 'tooltip-watch' => 'Çак страницăна пăхса тăмаллисем шутне хуш',
+'tooltip-summary' => 'Кĕскĕн ăнлантарса парăр',
 
 # Attribution
 'anonymous' => '{{GRAMMAR:genitive|{{SITENAME}}}} анонимлă хутшăнакансем',
@@ -1118,6 +1131,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'ilsubmit' => 'Шырамалла',
 'bydate' => 'дата тăрăх',
 
+# Metadata
+'metadata' => 'Метаданнăйсем:',
+
 # EXIF tags
 'exif-exifversion' => 'Exif версийĕ',
 'exif-flashpixversion' => 'Ĕçлеме пултаракан FlashPix версийĕ',
index 95a6c43..8c88f59 100644 (file)
@@ -776,6 +776,7 @@ Cofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:use
 'updated' => '(Diweddariad)',
 'note' => "'''Dalier sylw:'''",
 'previewnote' => "'''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!",
+'continue-editing' => 'Parhau i olygu',
 'previewconflict' => "Mae'r rhagolwg hwn yn dangos y testun yn yr ardal golygu uchaf, fel ag y byddai'n ymddangos petaech yn rhoi'r dudalen ar gadw.",
 'session_fail_preview' => "'''Ymddiheurwn! Methwyd prosesu eich golygiad gan fod rhan o ddata'r sesiwn wedi'i golli. Ceisiwch eto.
 Os digwydd yr un peth eto, ceisiwch [[Special:UserLogout|allgofnodi]] ac yna mewngofnodi eto.'''",
@@ -869,6 +870,10 @@ Cafodd yr argiau hyn eu hepgor.",
 'parser-template-loop-warning' => 'Daethpwyd o hyd i ddolen yn y nodyn: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Wedi mynd dros ben y terfyn ar ddyfnder dychweliad nodiadau ($1)',
 'language-converter-depth-warning' => "Wedi mynd tu hwnt i'r terfyn dyfnder ($1) ar y cyfnewidydd iaith.",
+'node-count-exceeded-category' => 'Tudalennau lle mae nifer y nodau yn ormod',
+'node-count-exceeded-warning' => 'Mae nifer y nodau yn y dudalen yn ormod',
+'expansion-depth-exceeded-category' => "Tudalennau â dyfnder ehangu tu hwnt i'r terfyn",
+'expansion-depth-exceeded-warning' => "Mae dyfnder ehangu'r dudalen y tu hwnt i'r terfyn",
 
 # "Undo" feature
 'undo-success' => "Gellir dadwneud y golygiad. Byddwch gystal â gwirio'r gymhariaeth isod i sicrhau mai dyma sydd arnoch eisiau gwneud, ac yna rhowch y newidiadau ar gadw i gwblhau'r gwaith o ddadwneud y golygiad.",
@@ -1045,7 +1050,6 @@ Pan yn gwneud hyn dylid sicrhau nad yw dilyniant hanes tudalennau yn cael ei ddi
 
 # Diffs
 'history-title' => "Hanes golygu '$1'",
-'difference' => '(Gwahaniaethau rhwng diwygiadau)',
 'difference-multipage' => '(Y gwahaniaeth rhwng y tudalennau)',
 'lineno' => 'Llinell $1:',
 'compareselectedversions' => 'Cymharer y fersiynau dewisedig',
@@ -1945,6 +1949,11 @@ Sylwer bod llythrennau mawr neu fach o bwys i'r chwiliad.",
 'allpages-bad-ns' => 'Nid oes gan {{SITENAME}} barth o\'r enw "$1".',
 'allpages-hide-redirects' => 'Cuddio tudalennau ailgyfeirio',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Rydych yn edrych ar fersiwn o'r dudalen a roddwyd ar gadw mewn celc hyd at $1 yn ôl.",
+'cachedspecial-viewing-cached-ts' => "Rydych yn edrych ar fersiwn o'r dudalen a roddwyd ar gadw mewn celc. Gall fod yn wahanol i'r fersiwn cyfoes.",
+'cachedspecial-refresh-now' => 'Gweld y diwygiad diweddaraf.',
+
 # Special:Categories
 'categories' => 'Categorïau',
 'categoriespagetext' => "Mae'r {{PLURAL:$1|categori|categori|categorïau|categorïau|categorïau|categorïau}} isod yn cynnwys tudalennau neu ffeiliau amlgyfrwng.
@@ -3494,6 +3503,8 @@ Dylech fod wedi derbyn [{{SERVER}}{{SCRIPTPATH}}/COPYING gopi o GNU General Publ
 'version-software' => 'Meddalwedd gosodedig',
 'version-software-product' => 'Cynnyrch',
 'version-software-version' => 'Fersiwn',
+'version-entrypoints' => 'URLs y mannau cyflwyno',
+'version-entrypoints-header-entrypoint' => 'Man cyflwyno',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3690,6 +3701,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'duration-weeks' => '$1 {{PLURAL:$1|wythnos}}',
 'duration-years' => '$1 {{PLURAL:$1|mlynedd|mlynedd|flynedd|mlynedd|mlynedd|mlynedd}}',
 'duration-decades' => '$1 {{PLURAL:$1|degawd|degawd|ddegawd|degawd|degawd|degawd}}',
-'duration-centuries' => '$1 {{PLURAL:$1|canrif|canrif|ganrif|chanrif|chanrif|canrif}}',
+'duration-centuries' => '$1 {{PLURAL:$1|canmlwydd|ganmlwydd|ganmlwydd|canmlwydd|chanmlwydd|canmlwydd}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milflwydd|filflwydd|filflwydd|milflwydd|milflwydd|milflwydd}}',
 
 );
index b330567..8676e06 100644 (file)
@@ -572,6 +572,8 @@ $2',
 'filereadonlyerror' => 'Ude af stand til at redigere filen "$1", fordi fildatabasen "$2" er skrivebeskyttet.
 
 Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
+'invalidtitle-knownnamespace' => 'Ugyldig titel med navnerummet "$2" og teksten "$3"',
+'invalidtitle-unknownnamespace' => 'Ugyldig titel med ukendt navnerum nummer $1 og tekst "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Konfigurationsfejl: ukendt virus-scanner: ''$1''",
@@ -948,6 +950,8 @@ Der bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 k
 'parser-template-loop-warning' => 'Skabelonløkke fundet: [[$1]]',
 'parser-template-recursion-depth-warning' => 'En skabelon er rekursivt inkluderet for mange gange ($1)',
 'language-converter-depth-warning' => 'Dybdegrænse for sprogkonvertering overskredet ($1)',
+'expansion-depth-exceeded-category' => 'Sider, der overskrider ekspansionsdybden',
+'expansion-depth-exceeded-warning' => 'Siden overskred ekspansionsdybden',
 
 # "Undo" feature
 'undo-success' => 'Redigeringen kan fjernes.
@@ -1122,7 +1126,6 @@ Vær opmæksom på at bevare kontinuiteten i sidehistorikken.
 
 # Diffs
 'history-title' => 'Versionshistorik for "$1"',
-'difference' => '(Forskel mellem versioner)',
 'difference-multipage' => '(Forskel mellem sider)',
 'lineno' => 'Linje $1:',
 'compareselectedversions' => 'Sammenlign valgte versioner',
@@ -3550,6 +3553,9 @@ Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General
 'version-software' => 'Installeret software',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Version',
+'version-entrypoints' => 'URL-adresser til indgangspunkter',
+'version-entrypoints-header-entrypoint' => 'Indgangspunkt',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Filsti',
index a0b544a..9375a8d 100644 (file)
@@ -768,6 +768,8 @@ Die Sperre wurde durch [[User:$1|$1]] mit der Begründung ''„$2“'' eingerich
 '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“.',
+'invalidtitle-knownnamespace' => 'Ungültiger Titel mit Namensraum „$2“ und Text „$3“',
+'invalidtitle-unknownnamespace' => 'Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“',
 
 # Virus scanner
 'virus-badscanner' => "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
@@ -1141,6 +1143,12 @@ Sie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|is
 'parser-template-loop-warning' => 'Vorlagenschleife entdeckt: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Vorlagenrekursionstiefengrenze überschritten ($1)',
 'language-converter-depth-warning' => 'Sprachkonvertertiefenlimit überschritten ($1)',
+'node-count-exceeded-category' => 'Seiten, die die Knotenanzahl überschritten haben',
+'node-count-exceeded-warning' => 'Die Seite hat die Knotenpunktanzahl überschritten.',
+'expansion-depth-exceeded-category' => 'Seiten, die die Expansionstiefe überschritten haben',
+'expansion-depth-exceeded-warning' => 'Die Seite hat die Expansionstiefe überschritten.',
+'parser-unstrip-loop-warning' => 'Zirkelbezug festgestellt',
+'parser-unstrip-recursion-limit' => 'Rekursionsgrenze beim Auflösen überschritten ($1)',
 
 # "Undo" feature
 'undo-success' => 'Die Bearbeitung kann rückgängig gemacht werden.
@@ -1174,7 +1182,7 @@ Grund der Sperre: ''$2''",
 * ({{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',
 'history-fieldset-title' => 'In der Versionsgeschichte suchen',
-'history-show-deleted' => 'nur gelöschte Versionen',
+'history-show-deleted' => 'Nur gelöschte Versionen zeigen',
 'histfirst' => 'Älteste',
 'histlast' => 'Neueste',
 'historysize' => '({{PLURAL:$1|1 Byte|$1 Bytes}})',
@@ -1316,7 +1324,8 @@ Stelle sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.',
 
 # Diffs
 'history-title' => 'Versionsgeschichte von „$1“',
-'difference' => '(Unterschied zwischen Versionen)',
+'difference-title' => 'Unterschied zwischen den Versionen von „$1“',
+'difference-title-multipage' => 'Unterschied zwischen den Seiten „$1“ und „$2“',
 'difference-multipage' => '(Unterschied zwischen Seiten)',
 'lineno' => 'Zeile $1:',
 'compareselectedversions' => 'Gewählte Versionen vergleichen',
@@ -1950,6 +1959,7 @@ Aus Sicherheitsgründen ist img_auth.php deaktiviert.',
 'http-curl-error' => 'Fehler beim Abruf der URL: $1',
 'http-host-unreachable' => 'URL konnte nicht erreicht werden.',
 'http-bad-status' => 'Während der HTTP-Anfrage ist ein Fehler aufgetreten: $1 $2',
+'http-truncated-body' => 'Der Inhalt der Anforderung wurde nicht vollständig empfangen.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL ist nicht erreichbar',
@@ -3626,7 +3636,7 @@ Weitere werden standardmäßig nicht angezeigt.
 '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 die E-Mail, bevor du einen neuen Code anforderst.',
 'confirmemail_send' => 'Bestätigungscode zuschicken',
-'confirmemail_sent' => 'Bestätigungs-E-Mail wurde verschickt.',
+'confirmemail_sent' => 'Die Bestätigungs-E-Mail wurde verschickt.',
 'confirmemail_oncreate' => 'Ein Bestätigungs-Code wurde an deine 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 dich versenden.
 Bitte prüfe die E-Mail-Adresse auf ungültige Zeichen.
index 3f59250..e02bfd6 100644 (file)
@@ -59,7 +59,7 @@ $messages = array(
 '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',
-'tog-watchlisthidepatrolled' => 'Lista seyrkerdışi ra vurnayışanê qontrolkerdeyan bınımne',
+'tog-watchlisthidepatrolled' => 'Lista seyrkerdışi ra vurnayışanê qontrol kerdeyan bınımne',
 'tog-ccmeonemails' => 'E-posteyanê ke ez karberanê binan rê rışenan, mı rê kopya inan bırışe',
 'tog-diffonly' => 'Qıyasê versiyonan de tek ferqan bımocne, pela butıne nê',
 'tog-showhiddencats' => 'Kategoriyanê dızdine bımocne',
@@ -167,7 +167,7 @@ $messages = array(
 'qbpageoptions' => 'Ena pele',
 'qbpageinfo' => 'Gıre',
 'qbmyoptions' => 'Pelê mı',
-'qbspecialpages' => 'Pelê Mêniye',
+'qbspecialpages' => 'Peley xısusi',
 'faq' => 'PZP (Persê ke zehf persiyenê)',
 'faqpage' => 'Project: PZP',
 
@@ -188,7 +188,7 @@ $messages = array(
 'namespaces' => 'Cayê namey',
 'variants' => 'Varyanti',
 
-'errorpagetitle' => 'Xeta',
+'errorpagetitle' => 'Xırab',
 'returnto' => 'Peyser şo $1.',
 'tagline' => '{{SITENAME}} ra',
 'help' => 'Peşti',
@@ -200,7 +200,7 @@ $messages = array(
 'history_short' => 'Tarix',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışê çapkerdışi',
-'permalink' => 'Gıreyo jûqere',
+'permalink' => 'Gıreyo daimi',
 'print' => 'Çap ke',
 'view' => 'Bıvêne',
 'edit' => 'Bıvurne',
@@ -219,7 +219,7 @@ $messages = array(
 'newpage' => 'Pela newiye',
 'talkpage' => 'Ena pele sero werêne',
 'talkpagelinktext' => 'Werênayış',
-'specialpage' => 'Pela xase',
+'specialpage' => 'Pela xısusi',
 'personaltools' => 'Hacetê şexsi',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
@@ -298,8 +298,8 @@ $1',
 'toc' => 'Tedeestey',
 'showtoc' => 'bımocne',
 'hidetoc' => 'bınımne',
-'collapsible-collapse' => 'Kılmever ke',
-'collapsible-expand' => 'Hera',
+'collapsible-collapse' => 'Kılm ke',
+'collapsible-expand' => 'Hera ke',
 'thisisdeleted' => 'Bıvêne ya zi $1 peyser bia?',
 'viewdeleted' => '$1 bıvêne?',
 'restorelink' => '{{PLURAL:$1|yew vurnayışo esterıte|$1 vurnayışê esterıtey}}',
@@ -319,13 +319,13 @@ $1',
 'nstab-main' => 'Pele',
 'nstab-user' => 'Pela Karberi',
 'nstab-media' => 'Pela Medya',
-'nstab-special' => 'Pela xase',
+'nstab-special' => 'Pela xısusi',
 'nstab-project' => 'Pela Procey',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesac',
 'nstab-template' => 'Şablon',
 'nstab-help' => 'Pela peşti',
-'nstab-category' => 'Kategoriye',
+'nstab-category' => 'Kategori',
 
 # Main script and global functions
 'nosuchaction' => 'Fealiyeto wınasi çıniyo',
@@ -338,7 +338,7 @@ Keyepelê {{SITENAME}} eşkeno xeta eşkera bıkero.',
 Seba lista pelanê xasanê vêrdeyan kerem ke: [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Xeta',
+'error' => 'Xırab',
 'databaseerror' => 'Xeta serveri',
 'dberrortext' => 'Rêzê vateyê database de xeta bı.
 No xeta belka software ra yo.
@@ -383,7 +383,7 @@ Belka yewna ten kerdo hewn a.',
 'badtitletext' => 'Sernamey pela ke şıma waşt, nêvêrd, thalo/vengo ya ki zıwano miyanêno ğelet gırêdae ya ki sernamey wiki.
 Beno ke, tede yew ya zi zêdê işareti estê ke sernaman de nêxebetiyenê.',
 'perfcached' => 'Datay cı ver hazır biye. No semedê ra nıkayin niyo! tewr zaf {{PLURAL:$1|netice|$1 netice}} debêno de',
-'perfcachedts' => 'Cêr de malumatê nımıteyi esti, demdê newe kerdışo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticeycı}} debyayo de',
+'perfcachedts' => 'Cêr de malumatê nımıteyi esti, demdê newe kerdışo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticey cı}} debyayo de',
 'querypage-no-updates' => 'Nıka newe kerdış nêbeno. no datayi ca de newe nêbeni .',
 'wrong_wfQuery_params' => 'wfQuery() parametreyo şaş<br />
 Fonksiyon: $1<br />
@@ -396,12 +396,14 @@ Perse: $2',
 'protectedpagetext' => 'No pel qey nêvuriyayiş hao (nao) pawyeno.',
 'viewsourcetext' => 'To şikinay çımey na pele bıvêne u kopya kerê:',
 'protectedinterface' => 'No pel qey software nuştey hezır keno u ın semed ra şuxulyayişê no pel qedexe biyo.',
-'editinginterface' => "'''DİQET:''' Şıma pelê software vurneni.[//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net] bıxebıtne, proceyê MediaWiki bigere diqet.",
+'editinginterface' => "'''Teme:''' Şı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.",
 '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',
 'namespaceprotected' => "No '''$1''' ca de icazetê şıma çino şıma pel rêz keri.",
-'ns-specialprotected' => 'Pelê mêniye nênê vurnayış.',
+'ns-specialprotected' => 'Peley xısusi nênê vurnayış.',
 'titleprotected' => 'Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.
 Sebeb: "\'\'$2\'\'".',
 
@@ -548,7 +550,7 @@ Parola vêrdiye: $2',
 'changeemail-newemail' => 'E-postay şımayê newe:',
 'changeemail-none' => '(Çıno)',
 'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıterqne',
+'changeemail-cancel' => 'Bıterkne',
 
 # Edit page toolbar
 'bold_sample' => 'Çapo qalınd',
@@ -646,7 +648,9 @@ Kerem ke, tı ke wazenay na pele bafernê/bıvurnê, qontrol ke.',
 'userpage-userdoesnotexist-view' => 'Hesabê karberi "$1" qeyd nêbiyo.',
 'blocked-notice-logextract' => 'No karber/na karbere emanet blokekerdeyo/blokekediya.
 Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
-'clearyourcache' => "'''Not:''' Bahde sazkerdışi, gani hafızayê cı gerayoğ pak bıbo: '''Mozilla / Firefox / Safari:''' ''Shift'' ri gıştê şıma ser nayi pel newe ra bar kere yana zi ''Ctrl-Shift-R'' bıkere u (qey Apple Mac ''Cmd-Shift-R'');, '''IE:''' ''Ctrl-F5'', '''Konqueror:''' tena tuşê pelaya newi ra bar kere cı sernê.",
+'clearyourcache' => "'''Not:''' Bahde sazkerdışi, gani hafızayê cı gerayoğ pak bıbo.
+*'''Mozilla / Firefox / Safari:''' ''Shift'' ri gıştê şıma ser nayi pel newe ra bar kere yana zi ''Ctrl-Shift-R'' bıkere u (qey Apple Mac ''Cmd-Shift-R'');,
+*'''IE:''' ''Ctrl-F5'', '''Konqueror:''' tena tuşê pelaya newi ra bar kere cı sernê.",
 'usercssyoucanpreview' => "'''Yardim:''' Ser \"{{int:showpreview}}\" sima eskeni CSSe newe test bikeri.",
 'userjsyoucanpreview' => "'''Yardim:''' Ser \"{{int:showpreview}}\" sima eskeni CSSe newe test bikeri.",
 'usercsspreview' => "'''şıma tena verqaydê dosyayê CSS vineni.''' '''Dosyayê Karberi CSS hema qayd nebiyo!'''",
@@ -764,7 +768,7 @@ Sebebo ke terefê $3 ra diyao ''$2''",
 'revision-info' => 'Teshihkerdışê roca $1ine be terefê $2',
 'previousrevision' => '← Çımraviyarnayışo kıhanêr',
 'nextrevision' => 'Tekrar-diyayışo newêr →',
-'currentrevisionlink' => 'Revizyono peni',
+'currentrevisionlink' => 'Revizyono veror',
 'cur' => 'ferq',
 'next' => 'badên',
 'last' => 'pey',
@@ -829,7 +833,7 @@ Eke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].",
 'revdelete-nologid-text' => 'Şıma vıraştışê nê fonksiyoni rê ya yew cıkewtışo waşte diyar nêkerdo, ya ki çıkewtışo diyarkerde çıniyo.',
 'revdelete-no-file' => 'Dosya diyarkerdiye çıniya.',
 'revdelete-show-file-confirm' => 'Şıma eminê ke wazenê çımraviyarnayışê esterıtey na dosya "<nowiki>$1</nowiki>" $2 ra $3 de bıvênê?',
-'revdelete-show-file-submit' => 'Heya',
+'revdelete-show-file-submit' => 'E',
 'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|çımraviyarnayışo weçinıte|çımraviyarnayışê weçinıtey}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Qeydbiyayışo weçinıte|Qeydbiyayışê weçinıtey}}:'''",
 'revdelete-text' => "'''Çımraviyarnayışê esterıtey u kerdışi hewna tarixê pele u qeydan de asenê, hema parçeyê zerrekê dinan areze nêbenê.'''
@@ -847,7 +851,7 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşenê h
 'revdelete-hide-user' => 'Karber u IP ê ke vurnayiş kerdo bınım.',
 'revdelete-hide-restricted' => 'Malumatan pa serkaran u karberan ra bınım.',
 'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'Heya',
+'revdelete-radio-set' => 'E',
 'revdelete-radio-unset' => 'Nê',
 'revdelete-suppress' => 'Hem ê binan ra hem zi serkaran ra malumatan bınım',
 'revdelete-unsuppress' => 'reizyonê ke tepiya anciye serbest ker',
@@ -918,7 +922,6 @@ no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
 
 # Diffs
 'history-title' => 'Tarixê revizyoniyê "$1"',
-'difference' => '(Ferqê revizyonan)',
 'difference-multipage' => '(Ferqê pelan)',
 'lineno' => 'Rêza $1i:',
 'compareselectedversions' => 'Verziyonan kontrol bıke',
@@ -988,13 +991,13 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'powersearch-field' => 'Seba cı seyr ke',
 'powersearch-togglelabel' => 'Qontrol ke:',
 'powersearch-toggleall' => 'Pêro',
-'powersearch-togglenone' => 'Çıniyo',
+'powersearch-togglenone' => 'Çıno',
 'search-external' => 'Cıgeyrayışê teberi',
 'searchdisabled' => '{{SITENAME}} no keyepel de cıgerayiş muweqqet bıryayo. no benatê de şıma pê Google eşkeni zerreyê {{SITENAME}} de cıgerayiş bıkeri.',
 
 # Quickbar
 'qbsettings' => 'Çûwo pêt',
-'qbsettings-none' => 'Çıniyo',
+'qbsettings-none' => 'Çıno',
 'qbsettings-fixedleft' => 'Rêcaene çhep',
 'qbsettings-fixedright' => 'Rêcaene raşt',
 'qbsettings-floatingleft' => 'rêcaene çhep',
@@ -1103,7 +1106,7 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena.',
 'prefs-help-email-required' => 'E-mail adrese mecburiya.',
 'prefs-info' => 'Enformasyonê temelî',
-'prefs-i18n' => 'Beynelbinel kerdişî',
+'prefs-i18n' => 'Şaryayış kerdış',
 'prefs-signature' => 'İmza',
 'prefs-dateformat' => 'Formatê tarixi',
 'prefs-timeoffset' => 'Wext offset',
@@ -1528,7 +1531,7 @@ keyepel nıka zaf meşğulo yew dema herayi de newe ra tesel bıkerê.',
 'filehist-comment' => 'Rexne',
 'filehist-missing' => 'Dosya nieseno',
 'imagelinks' => 'Gurenayışê dosya',
-'linkstoimage' => 'Ena {{PLURAL:$1|pelge şın|$1 pelgayan şın}} ena dosya:',
+'linkstoimage' => 'Ena {{PLURAL:$1|pela|$1 pela}} gıreye ena dosya:',
 'linkstoimage-more' => '$1 ra ziyed {{PLURAL:$1|pel|pel}} re gırey dano.
 listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocnena.
 [[Special:WhatLinksHere/$2|pêroyê liste]] mevcud o.',
@@ -1650,8 +1653,8 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
 'nrevisions' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
 'nviews' => '$1 {{PLURAL:$1|vînayîş|vînayîşî}}',
-'nimagelinks' => '$1 {{PLURAL:$1|ena pela de|ena pela de}} karêno',
-'ntransclusions' => '$1 {{PLURAL:$1|ena pela de|ena pela de}} karêno',
+'nimagelinks' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
+'ntransclusions' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
 'specialpage-empty' => 'Ser ena report netice çini yo.',
 'lonelypages' => 'Pelî ke yetim mend',
 'lonelypagestext' => 'Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.',
@@ -1669,7 +1672,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'wantedtemplates' => 'Templateyî ke ganî estî bî.',
 'mostlinked' => 'Pelî ke tewr zafî lînk bîy.',
 'mostlinkedcategories' => 'Kategorî ke tewr zafî lînk bîy.',
-'mostlinkedtemplates' => 'Templateyî ke tewr zafî lînk bîy.',
+'mostlinkedtemplates' => 'Şablonê ke tewr zafî pela re gıre bîye.',
 'mostcategories' => 'Pelan ke tewr zaf kategorî estê.',
 'mostimages' => 'Dosyayan ke tewr zaf link estê.',
 'mostrevisions' => 'Pelan ke tewr zaf revizyonî biyê.',
@@ -1727,7 +1730,7 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 # Special:AllPages
 'allpages' => 'Pelan hemi',
 'alphaindexline' => '$1 ra $2ine',
-'nextpage' => 'Pela peyêne ($1)',
+'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:',
@@ -1760,7 +1763,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 'linksearch' => 'Gıreyê teberi cı geyrê',
 'linksearch-pat' => 'bıgêr motif:',
 'linksearch-ns' => 'Cayênameyî:',
-'linksearch-ok' => 'Bigêre',
+'linksearch-ok' => 'Cı geyre',
 'linksearch-text' => 'joker ê zey "*.wikipedia.org"i karneno.<br />
 qaydeyê destek biyayeyi: <tt>$1</tt>',
 'linksearch-line' => '$1, $2 ra link biya',
@@ -2084,7 +2087,7 @@ $1',
 'blanknamespace' => '(Ser)',
 
 # Contributions
-'contributions' => 'İştiraqê karberi',
+'contributions' => 'İştirakê karberi',
 'contributions-title' => '$1 de iştırakê karberi',
 'mycontris' => 'İştırakê mı',
 'contribsub2' => 'Semedê $1 ($2)',
@@ -2113,19 +2116,19 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 
 # What links here
 'whatlinkshere' => 'Çı tiyay rê gırê beno',
-'whatlinkshere-title' => 'Peleyan gre biya "$1"',
+'whatlinkshere-title' => 'Peleye ke  "$1" re gre biyê',
 'whatlinkshere-page' => 'Pele:',
 'linkshere' => "Ena peleyan grey biya '''[[:$1]]''':",
 'nolinkshere' => "Yew pel zi '''[[:$1]]''' rê link nibeno.",
 'nolinkshere-ns' => "Ena cayê nameyî de yew pel zi '''[[:$1]]''' rê link nibeno.",
 'isredirect' => 'pele redireksiyon',
-'istemplate' => 'transklusyon',
+'istemplate' => 'Çarnayışin',
 'isimage' => 'gıreyê dosya',
-'whatlinkshere-prev' => '{{PLURAL:$1|peni|peni $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|veror|veror $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|verni|verni $1}}',
 'whatlinkshere-links' => '← gırey',
-'whatlinkshere-hideredirs' => '$1 redreksiyon',
-'whatlinkshere-hidetrans' => '$1 transklusyons',
+'whatlinkshere-hideredirs' => 'Hetekerdışa $1',
+'whatlinkshere-hidetrans' => 'Açarnayışê $1',
 'whatlinkshere-hidelinks' => '$1 greyan',
 'whatlinkshere-hideimages' => 'gireyê resimî $1',
 'whatlinkshere-filters' => 'Filtreyan',
@@ -2186,7 +2189,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'blocklist-expiry' => 'Wahdey qedyayışi',
 'blocklist-by' => 'hizmetdarê blokê',
 'blocklist-reason' => 'Sebeb:',
-'ipblocklist-submit' => 'Bigêre',
+'ipblocklist-submit' => 'Cı geyre',
 'ipblocklist-localblock' => 'blokê mehelli',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|blokê|blokê}} bini',
 'infiniteblock' => 'ebedî',
@@ -2381,7 +2384,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 'export-pagelinks' => 'behsê xorıniya pelê pêrabesteyani:',
 
 # Namespace 8 related
-'allmessages' => 'Mesajanê sistemi',
+'allmessages' => 'Mesacê sistemi',
 'allmessagesname' => 'Name',
 'allmessagesdefault' => 'nuşteyo orjinal',
 'allmessagescurrent' => 'nuşte yo ke şuxuliyeno',
@@ -2391,11 +2394,11 @@ eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê
 'allmessages-filter-legend' => 'Filitre',
 'allmessages-filter' => 'goreyê xususi kerdışi re filtre bıker',
 'allmessages-filter-unmodified' => 'Nivurnaye',
-'allmessages-filter-all' => 'Heme/pêro',
+'allmessages-filter-all' => 'Pêro',
 'allmessages-filter-modified' => 'Vurnaye',
 'allmessages-prefix' => 'pê prefiks filtre bıker',
 'allmessages-language' => 'Ziwan:',
-'allmessages-filter-submit' => 'Şi',
+'allmessages-filter-submit' => 'Şo',
 
 # Thumbnails
 'thumbnail-more' => 'Gırd ke',
@@ -2599,7 +2602,7 @@ $1',
 
 # Browsing diffs
 'previousdiff' => '← Vurnayışê kıhanyer',
-'nextdiff' => 'Vurnayışo newêr →',
+'nextdiff' => 'Vurnayışo peyên →',
 
 # Media information
 'mediawarning' => "'''Teme''': Na dosya de belkia kodê xırabıni estê.
@@ -2649,11 +2652,11 @@ Yew rêze de gırêyo sıfteyın gani gırêyo de dosya xırabıne bo.
 Na rêze de her gırêyo bin zey istisna vêniyeno, yanê pelê ke dosya beno ke sero rêzbiyaye asena.',
 
 # Metadata
-'metadata' => 'Metadata',
+'metadata' => 'Melumato serên',
 'metadata-help' => 'Ena dosya dı zafyer informasyoni esto. Belki ena dosya yew kamareyo dijital ya zi skaner ra vıraziyo.
 Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.',
-'metadata-expand' => 'Extended detayan bımoc',
-'metadata-collapse' => 'extended details bınım',
+'metadata-expand' => 'Detayan bımocne',
+'metadata-collapse' => 'melumati bınımne',
 'metadata-fields' => 'Resımê meydanê metadataê ke na pele de benê lista, pela resımmocnaene de ke tabloê metadata gına waro, gureniyenê.
 Ê bini zey sayekerdoğan nımiyenê.
 * make
@@ -2671,7 +2674,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 * gpsaltitude',
 
 # EXIF tags
-'exif-imagewidth' => 'Verini',
+'exif-imagewidth' => 'Herayey',
 'exif-imagelength' => 'Dergi',
 'exif-bitspersample' => 'yew parçe de biti',
 'exif-compression' => 'Planê kompresyoni',
@@ -2799,7 +2802,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Namey fiksturi',
 'exif-writer' => 'Nuştekar',
-'exif-languagecode' => 'Zuwan',
+'exif-languagecode' => 'Zıwan',
 'exif-iimversion' => 'Verqaydê IIM',
 'exif-iimcategory' => 'Kategori',
 'exif-datetimeexpires' => 'No peyra mekarênê',
@@ -3027,7 +3030,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-iimcategory-wea' => 'Hewa',
 
 'exif-urgency-normal' => 'Normal ($1)',
-'exif-urgency-low' => '($1) Qemiyo',
+'exif-urgency-low' => '($1) Kemiyo',
 'exif-urgency-high' => '( $1 ) Vêşiyo',
 'exif-urgency-other' => 'Sıftê  şınasiya karberi ($1)',
 
@@ -3113,8 +3116,8 @@ kodê tesdiqi heta ıney tarixi $4 meqbul o.',
 
 # Delete conflict
 'deletedwhileediting' => "'''Teme''': Ena pele  verniyê ti de eseteriyaya!",
-'confirmrecreate' => "Karberê [[User:$1|$1]]î ([[User talk:$1|talk]]), verniyê vurnayîşê ti ra ena pele wedarno, sebeb: ''$2''
-Ma rica keno konfirme bike ke ti raştî wazeno eno pel bivirazo.",
+'confirmrecreate' => "Karberê [[User:$1|$1]]î ([[User talk:$1|mesac]]), verniyê vurnayîşê ti ra ena pele wedarno, sebeb: ''$2''
+Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 'recreate' => 'Reyna viraz',
 
 # action=purge
@@ -3129,10 +3132,10 @@ Ma rica keno konfirme bike ke ti raştî wazeno eno pel bivirazo.",
 'confirm-unwatch-top' => 'Ena pele lista xoya seyirkerdışi ra bıvece?',
 
 # Multipage image navigation
-'imgmultipageprev' => 'peleyê verin',
-'imgmultipagenext' => 'pelo serîn →',
+'imgmultipageprev' => '← peleyê verin',
+'imgmultipagenext' => 'pela badê cû →',
 'imgmultigo' => 'Şı!',
-'imgmultigoto' => 'Şi pel $1',
+'imgmultigoto' => 'Şo pela da $1',
 
 # Table pager
 'ascending_abbrev' => 'berz',
@@ -3143,7 +3146,7 @@ Ma rica keno konfirme bike ke ti raştî wazeno eno pel bivirazo.",
 'table_pager_last' => 'Pela peyêne',
 'table_pager_limit' => 'Jû pele de $1 unsuran bımocne',
 'table_pager_limit_label' => 'Her pele ra xacetan',
-'table_pager_limit_submit' => 'Şi',
+'table_pager_limit_submit' => 'Şo',
 'table_pager_empty' => 'Netice çini yo',
 
 # Auto-summaries
@@ -3244,7 +3247,7 @@ Resımi be tam asayış mocniyayê, tipê dosyaê bini be programê cıyo elaqed
 'fileduplicatesearch-noresults' => 'Ebe namey "$1" ra dosya nêdiyayê.',
 
 # Special:SpecialPages
-'specialpages' => 'Pelê mêniye',
+'specialpages' => 'Peley xısusi',
 'specialpages-note' => '----
 * Xısusi pelaya normal
 * <span class="mw-specialpagerestricted">Xısusi peleyê keı rê ray nê deyaya.</span>
@@ -3320,8 +3323,8 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'htmlform-selectorother-other' => 'Bin',
 
 # New logging system
-'logentry-delete-delete' => "$1'i Pelaya $3'i besternê",
-'logentry-delete-restore' => "$1'i pelaya $3'i peyd grot",
+'logentry-delete-delete' => "Karber $1' pelay $3' besternê",
+'logentry-delete-restore' => "Karber $1' pelay $3' peyser grot",
 'logentry-suppress-delete' => '$1  $3 rê pıloxneyê',
 'revdelete-content-hid' => 'nusno nımte',
 'revdelete-summary-hid' => 'Vurnayışi nımtey niyê',
@@ -3331,7 +3334,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'revdelete-uname-unhid' => 'Namey karberi ne nımteyo',
 'revdelete-restricted' => 'verger (vergırewtış) ê ke qey xızmkaran biye',
 'revdelete-unrestricted' => 'verger (ver gırewtış) ê ke qey xızmkaran diyê wera (wedariyê)',
-'logentry-move-move' => "$1'i pelaya $3'i berd $4",
+'logentry-move-move' => "Karber $1' pelay $3' berd $4",
 'logentry-move-move-noredirect' => "$1'i pelay $3 raçarnayış neker dı u berd $4",
 'logentry-newusers-newusers' => '$1 deye namey karberi vıraziya',
 'logentry-newusers-create' => '$1 deye namey karberi vıraziya',
@@ -3359,4 +3362,14 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'api-error-unknown-warning' => "$1'dı ikazo xırab:",
 'api-error-unknownerror' => "$1'dı jew xeta vıciye",
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|saniya|saniyey}}',
+'duration-minutes' => '$1 {{PLURAL:$1|deqa|deqey}}',
+'duration-hours' => '($1 {{PLURAL:$1|seate|seati}})',
+'duration-days' => '($1 {{PLURAL:$1|roce|roci}})',
+'duration-weeks' => '$1 {{PLURAL: $1|hefte|heftey}}',
+'duration-years' => '$1 {{PLURAL:$1|serre|serri}}',
+'duration-centuries' => '$1 {{PLURAL:$1|seserre|seserri}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenyum|milenyumi}}',
+
 );
index b9e10e6..789e13e 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Dbc334
  * @author Derbeth
  * @author Dunak
  * @author Dundak
@@ -541,6 +542,8 @@ Wótpšašanje: $2',
 'filereadonlyerror' => 'Njejo móžno dataju "$1" změniś, dokulaž datajowy repozitorium "$2" jo jano cytajobny.
 
 Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
+'invalidtitle-knownnamespace' => 'Njepłaśiwy titel z mjenjowym rumom "$2" a tekstom "$3"',
+'invalidtitle-unknownnamespace' => 'Njepłaśiwy titel z njeznatym mjenjowym rumom $1 a tekstom "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Špatna konfiguracija: njeznaty wirusowy scanner: ''$1''",
@@ -895,6 +898,12 @@ Njesmějo daś wěcej nježli $2 {{PLURAL:$2|wołanja|wołanjowu|wołanjow|woła
 'parser-template-loop-warning' => 'Pśedłogowa šlejfa namakana: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limit rekursijneje dłymi pśedłogi pśekšocony ($1)',
 'language-converter-depth-warning' => 'Limit dłymokosći rěcnego konwertera pśekšocony ($1)',
+'node-count-exceeded-category' => 'Boki, źož licba sukow jo pśekšocona',
+'node-count-exceeded-warning' => 'Bok jo licbu sukow pśekšocył',
+'expansion-depth-exceeded-category' => 'Boki, źož ekspansiska dłymokosć jo pśekšocona',
+'expansion-depth-exceeded-warning' => 'Bok jo ekspansisku dłymokosć pśekšocył',
+'parser-unstrip-loop-warning' => 'Njeskóńcna kokula namakana',
+'parser-unstrip-recursion-limit' => 'Rekursiska granica pśekšocona ($1)',
 
 # "Undo" feature
 'undo-success' => 'Wobźěłanje móžo se wótpóraś. Pšosym pśeglěduj dołojcne pśirownowanje aby se wěsty był, až to wót wěrnosći coš, a pón składuj změny, aby se wobźěłanje doskóńcnje wótpórało.',
@@ -1071,7 +1080,8 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.',
 
 # Diffs
 'history-title' => 'Stawizny wersijow boka „$1“',
-'difference' => '(rozdźěle mjazy wersijoma/wersijami)',
+'difference-title' => 'Rozdźěl mjazy wersijami "$1"',
+'difference-title-multipage' => 'Rozdźěl mjazy bokami "$1" a "$2"',
 'difference-multipage' => '(Rozdźěl mjazy bokami)',
 'lineno' => 'Rědka $1:',
 'compareselectedversions' => 'Wuzwólonej wersiji pśirownaś',
@@ -1163,7 +1173,7 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.',
 'prefs-skin' => 'Šat',
 'skin-preview' => 'Pśeglěd',
 'datedefault' => 'Standard',
-'prefs-beta' => 'Betafunkcije',
+'prefs-beta' => 'Preizkusne funkcije',
 'prefs-datetime' => 'Datum a cas',
 'prefs-labs' => 'Laborowe funkcije',
 'prefs-personal' => 'Wužywarski profil',
@@ -1697,6 +1707,7 @@ Za optimalnu wěstotu img_auth.php jo znjemóžnjony.',
 'http-curl-error' => 'Zmólka pśi wótwółowanju URL: $1',
 'http-host-unreachable' => 'URL njejo był pśistupny.',
 'http-bad-status' => 'Wob cas HTTP-napšašowanje jo problem był: $1 $2',
+'http-truncated-body' => 'Wopśimjeśe napšašowanja jo se jano pó źělach pśiwzeło.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL njejo pśistupna.',
@@ -1705,7 +1716,7 @@ Za optimalnu wěstotu img_auth.php jo znjemóžnjony.',
 'upload-curl-error28-text' => 'Bok pśedłujko njejo wótegronił. Kontrolěruj, lic jo bok online, pócakaj wokognuśe a wopytaj pón hyšći raz. Móžo byś zmysłapołne, w drugem casu hyšći raz proběrowaś.',
 
 'license' => 'Licenca:',
-'license-header' => 'Licencowanje',
+'license-header' => 'Licencěrowanje',
 'nolicense' => 'Nic njejo wuzwólone.',
 'license-nopreview' => '(Pśeglěd njejo móžny.)',
 'upload_source_url' => ' (płaśeca, zjawnje pśistupna URL)',
@@ -3035,7 +3046,7 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž
 'exif-gpsdestdistance' => 'Distanca k celowemu městnu',
 'exif-gpsprocessingmethod' => 'Mě metody pśeźěłanja GPS',
 'exif-gpsareainformation' => 'Mě wobcerka GPS',
-'exif-gpsdatestamp' => 'Datum GPS',
+'exif-gpsdatestamp' => 'GPS-datum',
 'exif-gpsdifferential' => 'Diferencialna korektura GPS',
 'exif-jpegfilecomment' => 'Komentar JPEG-dataje',
 'exif-keywords' => 'Klucowe słowa',
index f40255e..d32ea2b 100644 (file)
@@ -848,7 +848,6 @@ Intaai [[Special:BlockList|lis IP nantaban]] montok lis kawawagu karaja mogoduh
 
 # Diffs
 'history-title' => 'Susuyan sinimakan do "$1"',
-'difference' => '(Pisuaian mantad sinimakan)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Popitimbang sinimakan nopili',
 'showhideselectedversions' => 'Pokitono/polisoko sinimakan nopili',
index 86c5252..8dc6ecb 100644 (file)
@@ -28,6 +28,7 @@
  * @author MF-Warburg
  * @author Malafaya
  * @author Omnipaedista
+ * @author Protnet
  * @author Reedy
  * @author Remember the dot
  * @author Sinopeus
@@ -385,8 +386,8 @@ $messages = array(
 'tog-showjumplinks' => 'Ενεργοποίησε τους συνδέσμους προσβασιμότητας του τύπου "μετάβαση σε"',
 'tog-uselivepreview' => 'Χρησιμοποίησε άμεση προεπισκόπηση (JavaScript) (Πειραματικό)',
 'tog-forceeditsummary' => 'Ειδοποίησέ με όταν εισάγω μια κενή σύνοψη επεξεργασίας',
-'tog-watchlisthideown' => 'Απόκρυψε τις επεξεργασίες μου απο τη λίστα παρακολούθησης',
-'tog-watchlisthidebots' => 'Απόκρυψε τις επεξεργασίες των bots από τη λίστα παρακολούθησης',
+'tog-watchlisthideown' => 'Απόκρυψε τις επεξεργασίες μου από τη λίστα παρακολούθησης',
+'tog-watchlisthidebots' => 'Απόκρυψε τις επεξεργασίες των bot από τη λίστα παρακολούθησης',
 'tog-watchlisthideminor' => 'Απόκρυψε τις μικρής σημασίας επεξεργασίες από τη λίστα παρακολούθησης',
 'tog-watchlisthideliu' => 'Απόκρυψη επεξεργασιών συνδεδεμένων χρηστών από τη λίστα παρακολούθησης',
 'tog-watchlisthideanons' => 'Απόκρυψη επεξεργασιών ανωνύμων χρηστών από τη λίστα παρακολούθησης',
@@ -732,6 +733,9 @@ $2',
 'ns-specialprotected' => 'Σελίδες στον τομέα {{ns:special}} δεν γίνεται να επεξεργαστούν.',
 'titleprotected' => "Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].
 Ο λόγος που δίνεται είναι ''$2''.",
+'filereadonlyerror' => 'Δεν είναι δυνατή η τροποποίηση του αρχείου " $1 " επειδή το αποθετήριο αρχείων " $2 " είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.
+
+Ο διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: " $3 ".',
 
 # Virus scanner
 'virus-badscanner' => "Λάθος ρύθμιση: άγνωστος ανιχνευτής ιών: ''$1''",
@@ -816,6 +820,7 @@ $2',
 'emailconfirmlink' => 'Επαληθεύστε την ηλεκτρονική σας διεύθυνση',
 'invalidemailaddress' => 'Η ηλεκτρονική διεύθυνση δεν μπορεί να γίνει δεκτή γιατί ενδεχομένως δεν έχει έγκυρη μορφή. Παρακαλούμε συμπληρώστε μια σωστά διαμορφωμένη διεύθυνση ή αφήστε το πεδίο κενό.',
 'cannotchangeemail' => "Οι διευθύνσεις ηλεκτρονικού ταχυδρομείου του λογαριασμού δεν μπορούν να αλλάξουν σ' αυτό το wiki.",
+'emaildisabled' => 'Αυτός ο ιστότοπος  δεν μπορεί να στείλει μηνύματα ηλεκτρονικού ταχυδρομείου.',
 'accountcreated' => 'Ο λογαριασμός δημιουργήθηκε',
 'accountcreatedtext' => 'Ο λογαριασμός χρήστη για τον/την $1 έχει δημιουργηθεί.',
 'createaccount-title' => 'Δημιουργία λογαριασμού για {{SITENAME}}',
@@ -1000,7 +1005,9 @@ $2
 'userinvalidcssjstitle' => "'''Προσοχή:''' Δεν υπάρχει skin με τίτλο \"\$1\". Θυμηθείτε οι προσαρμοσμένες σελίδες .css και .js χρησιμοποιούν έναν τίτλο με μικρά γράμματα, π.χ. {{ns:user}}:Foo/vector.css σε αντίθεση με το {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Ενημερώθηκε)',
 'note' => "'''Προσοχή: '''",
-'previewnote' => "'''Σας υπενθυμίζουμε ότι βλέπετε μόνον την προεπισκόπηση -δεν έχετε ακόμα αποθηκεύσει τις αλλαγές σας!'''",
+'previewnote' => "'''Να θυμάστε ότι αυτή είναι μόνο μια προεπισκόπηση.'''
+Οι αλλαγές σας δεν έχουν ακόμη αποθηκευτεί!",
+'continue-editing' => 'Συνέχεια επεξεργασίας',
 'previewconflict' => 'Αυτή η προεπισκόπηση απεικονίζει το κείμενο στην επάνω περιοχή επεξεργασίας κειμένου, όπως θα εμφανιστεί εάν επιλέξετε να το αποθηκεύσετε.',
 'session_fail_preview' => "'''Συγγνώμη! Δεν μπορούσαμε να διεκπεραιώσουμε την επεξεργασία σας λόγω απώλειας των δεδομένων της συνεδρίας.
 Παρακαλώ προσπαθήστε ξανά. Αν δεν δουλεύει ξανά, δοκιμάστε να αποσυνδεθείτε και να συνδεθείτε πάλι.'''",
@@ -1013,6 +1020,7 @@ $2
 Αυτό μερικές φορές συμβαίνει όταν χρησιμοποιείται ένας ανώνυμος διακομιστής μεσολάβησης διαθέσιμος μέσω του παγκόσμιου ιστού με σφάλματα.'''",
 'edit_form_incomplete' => "'''Ορισμένα τμήματα της φόρμας επεξεργασίας δεν έφθασαν στο διακομιστή. Ελέγξτε ότι οι αλλαγές σας είναι άθικτες και προσπαθήστε ξανά.'''",
 'editing' => 'Επεξεργασία $1',
+'creating' => 'Δημιουργία: $1',
 'editingsection' => 'Επεξεργασία $1 (τμήμα)',
 'editingcomment' => 'Επεξεργασία $1 (νέο τμήμα)',
 'editconflict' => 'Σύγκρουση επεξεργασίας: $1',
@@ -1078,6 +1086,7 @@ $2
 'edit-no-change' => 'Η επεξεργασία σας αγνοήθηκε, επειδή δεν έγινε καμία αλλαγή στο κείμενο.',
 'edit-already-exists' => 'Δεν ήταν εφικτό να δημιουργηθεί η νέα σελίδα.
 Υπάρχει ήδη.',
+'defaultmessagetext' => 'Προεπιλεγμένο κείμενο μηνύματος',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.
@@ -1234,7 +1243,7 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'Κατάλογος διαγραφών',
-'suppressionlogtext' => 'Παρακάτω βρίσκεται μία λίστα με τις διαγραφές και τις φραγές σχετικές με περιεχόμενο που έχει κρυφθεί από τους διαχειριστές.
+'suppressionlogtext' => 'Παρακάτω βρίσκεται μία λίστα με τις διαγραφές και τις φραγές σχετικό  με περιεχόμενο που έχει αποκρυβεί από τους διαχειριστές.
 Δείτε την [[Special:BlockList|λίστα φραγών IP]] για τις τρέχουσες λειτουργικές απαγορεύσεις και φραγές.',
 
 # History merging
@@ -1268,7 +1277,6 @@ $1",
 
 # Diffs
 'history-title' => 'Ιστορικό εκδόσεων για τη σελίδα "$1"',
-'difference' => '(Διαφορές μεταξύ αναθεωρήσεων)',
 'difference-multipage' => '(Διαφορές μεταξύ των σελίδων)',
 'lineno' => 'Γραμμή $1:',
 'compareselectedversions' => 'Σύγκριση των εκδόσεων που έχουν επιλεγεί',
@@ -1653,6 +1661,7 @@ $1",
 'newsectionsummary' => '/* $1 */ νέα ενότητα',
 'rc-enhanced-expand' => 'Εμφάνιση λεπτομερειών (απαιτείται JavaScript)',
 'rc-enhanced-hide' => 'Απόκρυψη λεπτομερειών',
+'rc-old-title' => 'αρχικά δημιουργήθηκε ως " $1 "',
 
 # Recent changes linked
 'recentchangeslinked' => 'Σχετικές αλλαγές',
@@ -1807,6 +1816,7 @@ $1',
 'upload-too-many-redirects' => 'Το URL περιείχε πάρα πολλές ανακατευθύνσεις',
 'upload-unknown-size' => 'Άγνωστο μέγεθος',
 'upload-http-error' => 'Εμφανίστηκε κάποιο σφάλμα HTTP: $1',
+'upload-copy-upload-invalid-domain' => 'Δεν υπάρχουν διαθέσιμα ανεβάσματα αντιγράφων από αυτό τον τομέα.',
 
 # File backend
 'backend-fail-stream' => 'Αδύνατη η μετάδοση του αρχείου $1.',
@@ -1934,6 +1944,10 @@ $1',
 Παρακαλούμε δείτε τη [$2 σελίδα περιγραφής του αρχείου] για περισσότερες πληροφορίες.',
 'sharedupload-desc-here' => 'Το αρχείο είναι από το $1 και ενδέχεται να χρησιμοποιείται από άλλα εγχειρήματα.
 Η περιγραφή στη [$2 σελίδα περιγραφής αρχείου] εμφανίζεται παρακάτω.',
+'sharedupload-desc-edit' => 'Αυτό το αρχείο είναι από  $1  και μπορεί να χρησιμοποιείται από άλλα εγχειρήματα.
+Ίσως θέλετε να επεξεργαστείτε την περιγραφή του στην   [$2  σελίδα περιγραφής αρχείου] εκεί.',
+'sharedupload-desc-create' => 'Αυτό το αρχείο είναι από $1 και μπορεί να χρησιμοποιείται από άλλα εγχειρήματα.
+Ίσως θέλετε να επεξεργαστείτε την περιγραφή του στην [$2 σελίδα περιγραφής αρχείου] εκεί.',
 'filepage-nofile' => 'Κανένα αρχείο με αυτό το όνομα δεν υπάρχει',
 'filepage-nofile-link' => 'Δεν υπάρχει τέτοιο αρχείο, αλλἀ μπορείτε να [$1 το επιφορτώσετε].',
 'uploadnewversion-linktext' => 'Φορτώστε μια νέα έκδοση αυτού του αρχείου',
@@ -2065,6 +2079,7 @@ $1',
 'wantedpages-badtitle' => 'Μη εγκυρός τίτλος στο σύνολο αποτελέσματος: $1',
 'wantedfiles' => 'Επιθυμητά αρχεία',
 'wantedfiletext-cat' => 'Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Αρχεία από εξωτερικά αποθετήρια ενδέχεται να παρατίθενται παρότι υπάρχουν. Κάθε τέτοιες λανθασμένες αναφορές θα <del>διαγραμμίζονται</del>. Επιπλέον, σελίδες που ενσωματώνουν αρχεία που δεν υπάρχουν παρατίθενται στο [[:$1]].',
+'wantedfiletext-nocat' => 'Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Πέρα από τα υπάρχοντα ενδέχεται να έχουν καταχωριστεί και αρχεία από εξωτερικές πηγές λογισμικού. Τέτοιες ψευδο-υπαρκτές καταχωρίσεις θα εμφανίζονται <del>διαγραμμισμένες</del>.',
 'wantedtemplates' => 'Επιθυμητά πρότυπα',
 'mostlinked' => 'Οι σελίδες με τις περισσότερες αναφορές',
 'mostlinkedcategories' => 'Περισσότερο χρησιμοποιούμενες κατηγορίες',
@@ -2073,6 +2088,7 @@ $1',
 'mostimages' => 'Περισσότερο χρησιμοποιούμενα αρχεία',
 'mostrevisions' => 'Άρθρα με τις περισσότερες αναθεωρήσεις',
 'prefixindex' => 'Όλες οι σελίδες με πρόθεμα',
+'prefixindex-namespace' => 'Όλες οι σελίδες με πρόθεμα (περιοχής  $1)',
 'shortpages' => 'Σύντομες σελίδες',
 'longpages' => 'Εκτενείς σελίδες',
 'deadendpages' => 'Αδιέξοδες σελίδες',
@@ -2110,6 +2126,7 @@ $1',
 # Book sources
 'booksources' => 'Πηγές βιβλίων',
 'booksources-search-legend' => 'Αναζήτηση για πηγές βιβλίων',
+'booksources-isbn' => 'ISBN:',
 'booksources-go' => 'Πήγαινε',
 'booksources-text' => 'Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:',
 'booksources-invalid-isbn' => 'Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.',
@@ -2139,6 +2156,12 @@ $1',
 'allpagesprefix' => 'Προβολή των σελίδων με πρόθεμα:',
 'allpagesbadtitle' => 'Ο δοσμένος τίτλος σελίδας ήταν άκυρος ή είχε ένα διαγλωσσικό ή δια-wiki πρόθεμα. Μπορεί να περιέχει έναν ή περισσότερους χαρακτήρες οι οποίοι δεν μπορούν να χρησιμοποιοθούν σε τίτλους.',
 'allpages-bad-ns' => 'Το {{SITENAME}} δεν έχει τον τομέα "$1".',
+'allpages-hide-redirects' => 'Απόκρυψη ανακατευθύνσεων',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Βλέπετε μια προσωρινά αποθηκευμένη έκδοση αυτής της σελίδας, που μπορεί να είναι μέχρι και $1 παλιά.',
+'cachedspecial-viewing-cached-ts' => 'Βλέπετε μια προσωρινά αποθηκευμένη έκδοση αυτής της σελίδας, που μπορεί να μην είναι εντελώς πραγματική.',
+'cachedspecial-refresh-now' => 'Προβολή τελευταίας.',
 
 # Special:Categories
 'categories' => 'Κατηγορίες',
@@ -2159,7 +2182,9 @@ $1',
 'linksearch-pat' => 'Μοτίβο αναζήτησης:',
 'linksearch-ns' => 'Περιοχή:',
 'linksearch-ok' => 'Αναζήτηση',
-'linksearch-text' => '',
+'linksearch-text' => 'Χαρακτήρες όπως "*.wikipedia.org" μπορούν να χρησιμοποιηθούν. 
+Χρειάζεται τουλάχιστον ένα domain ανώτατου επιπέδου, για παράδειγμα "*.org".<br />
+Υποστηριζόμενα πρωτόκολλα: <tt> $1 </tt> (μην προσθέτετε οποιαδήποτε από αυτές στην αναζήτησή σας).',
 'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
 'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
 
@@ -2380,6 +2405,7 @@ $UNWATCHURL
 'protect-title-notallowed' => 'Εμφάνιση επιπέδου προστασίας για την "$1"',
 'prot_1movedto2' => 'Η [[$1]] μετακινήθηκε στη θέση [[$2]]',
 'protect-badnamespace-title' => 'Μη-προστατευόμενη ομάδα σελίδων',
+'protect-badnamespace-text' => 'Οι  σελίδες σε αυτόν τον ονοματοχώρο δεν μπορούν να κλειδωθούν.',
 'protect-legend' => 'Επιβεβαίωση κλειδώματος',
 'protectcomment' => 'Αιτία:',
 'protectexpiry' => 'Λήξη',
@@ -2577,8 +2603,8 @@ $1',
 'ipb-confirm' => 'Επιβεβαίωση φραγής',
 'badipaddress' => 'Άκυρη διεύθυνση IP.',
 'blockipsuccesssub' => 'Η φραγή ολοκληρώθηκε επιτυχώς.',
-'blockipsuccesstext' => 'Η διεύθυνση [[Special:Contributions/$1|$1]] έχει υποστεί φραγή.<br />
\94είÏ\84ε Ï\84η [[Special:BlockList|λίÏ\83Ï\84α Î´Î¹ÎµÏ\85θÏ\8dνÏ\83εÏ\89ν IP Ï\80οÏ\85 Î­Ï\87οÏ\85ν Ï\85Ï\80οÏ\83Ï\84εί Ï\86Ï\81αγή]] Î³Î¹Î± Î½Î± Ï\84ο ÎµÏ\80ιβεβαιÏ\8eÏ\83εÏ\84ε.',
+'blockipsuccesstext' => '{{GENDER:$1|Ο|Η}} [[Special:Contributions/$1|$1]] έχει υποστεί φραγή.<br />
\94είÏ\84ε Ï\84ον [[Special:BlockList|καÏ\84άλογο Ï\86Ï\81αγÏ\8eν]] Î³Î¹Î± Î½Î± ÎµÏ\80οÏ\80Ï\84εÏ\8dÏ\83εÏ\84ε Ï\84ιÏ\82 Ï\86Ï\81αγέÏ\82.',
 'ipb-blockingself' => 'Είστε έτοιμος να επιβάλετε φραγή στον ευατό σας! Είστε σίγουροι ότι θέλετε να το κάνετε αυτό;',
 'ipb-confirmhideuser' => 'Είστε {{GENDER:|έτοιμος|έτοιμη}} να μπλοκάρετε ένα χρήστη με ενεργοποιημένη την "απόκρυψη χρήστη" . Αυτό θα καταστείλει το όνομα του χρήστη σε όλες τις λίστες και τις καταχωρήσεις ημερολογίου. Είστε {{GENDER:|σίγουρος|σίγουρη}} ότι θέλετε να το κάνετε αυτό;',
 'ipb-edit-dropdown' => 'Επεξεργασία λόγων φραγής',
@@ -2631,8 +2657,8 @@ $1',
 'blocklogentry' => 'O/H [[$1]] φράχθηκε με χρόνο λήξης $2 $3',
 'reblock-logentry' => 'άλλαξε τις ρυθμίσεις φραγής για τον/την [[$1]] με χρόνο λήξης $2 $3',
 'blocklogtext' => 'Αυτό είναι ένα αρχείο καταγραφής των ενεργειών φραγής και κατάργησης φραγής χρηστών.
-Δεν συμπεριλαμβάνονται οι διευθύνσεις IP που υπέστησαν αυτόματα φραγή.
-Δείτε τον [[Special:BlockList|κατάλογο φραγμένων διευθύνσεων IP]] για τη λίστα των τρεχόντων ενεργών αποκλεισμών και φραγών.',
+Δεν συμπεριλαμβάνονται οι διευθύνσεις IP που υπέστησαν φραγή αυτόματα.
+Δείτε τον [[Special:BlockList|κατάλογο φραγών]] για τη λίστα των τρεχόντων ενεργών αποκλεισμών και φραγών.',
 'unblocklogentry' => 'Άρση φραγής του "$1"',
 'block-log-flags-anononly' => 'μόνο ανώνυμοι χρήστες',
 'block-log-flags-nocreate' => 'δημιουργία λογαριασμού απενεργοποιημένη',
@@ -2879,7 +2905,15 @@ $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 ".',
+'javascripttest-pagetext-frameworks' => 'Παρακαλώ επιλέξτε ένα από τα ακόλουθα πλαίσια δοκιμών: $1',
+'javascripttest-pagetext-skins' => 'Επιλέξτε ένα skin για να εκτελέσετε δοκιμές με αυτό:',
+'javascripttest-qunit-intro' => 'Ανατρέξτε στην ενότητα [ $1 τεκμηρίωση δοκιμών] στο mediawiki.org.',
+'javascripttest-qunit-heading' => 'Σουίτα δοκιμών JavaScript QUnit του MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Η σελίδα χρήστη σας',
@@ -2941,6 +2975,7 @@ $1',
 'tooltip-diff' => 'Προβολή των αλλαγών που κάνατε στο κείμενο.',
 'tooltip-compareselectedversions' => 'Εμφάνιση των διαφορών ανάμεσα στις δύο αναθεωρήσεις της σελίδας που έχετε επιλέξει.',
 'tooltip-watch' => 'Προσθήκη της σελίδας στη λίστα παρακολούθησης',
+'tooltip-watchlistedit-normal-submit' => 'Μετακίνηση τίτλων',
 'tooltip-watchlistedit-raw-submit' => 'Ενημέρωση λίστας παρακολούθησης',
 'tooltip-recreate' => 'Ξαναδημιούργησε τη σελίδα παρόλο που έχει διαγραφεί',
 'tooltip-upload' => 'Έναρξη φόρτωσης',
@@ -3661,6 +3696,9 @@ $5
 'watchlisttools-edit' => 'Δείτε και επεξεργαστείτε τη λίστα παρακολούθησης',
 'watchlisttools-raw' => 'Επεξεργαστείτε την πρωτογενή λίστα παρακολούθησης',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|συζήτηση]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'Άγνωστη ετικέτα επέκτασης "$1"',
 'duplicate-defaultsort' => 'Προσοχή: Το προκαθορισμένο κλειδί ταξινόμησης "$2" υπερκαλύπτει το προηγούμενο "$1".',
@@ -3683,16 +3721,17 @@ $5
 'version-hook-subscribedby' => 'Υπογεγραμμένο από',
 'version-version' => '(Έκδοση $1)',
 'version-license' => 'Άδεια χρήσης',
-'version-poweredby-credits' => "Αυτό το βίκι τροφοδοτείται από '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
+'version-poweredby-credits' => "Αυτό το βίκι λειτουργεί χάρις στο '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
 'version-poweredby-others' => 'άλλοι',
-'version-license-info' => "To Το MediaWiki είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανέμετε ή / και να το τροποποιήσετε υπό τους όρους της GNU General Public License όπως αυτή εκδόθηκε από το Free Software Foundation.Είτε η δεύτερη έκδοση της άδειας, είτε (κατ' επιλογή σας) οποιδήποτε επόμενη έκδοση.
-Το MediaWiki διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.Ούτε καν την σιωπηρή εγγύση της  ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή της ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΕΝΑ PARTICULAR ΣΚΟΠΟ.Όπως δείτε την GNU General Public License για περισσότερες λεπτομέρειες.
+'version-license-info' => "Το MediaWiki είναι ελεύθερο λογισμικό. Μπορείτε να το αναδιανείμετε ή/και να το τροποποιήσετε υπό τους όρους της άδειας GNU General Public License όπως αυτή εκδόθηκε από το Free Software Foundation· είτε της δεύτερης έκδοσης της άδειας, είτε (κατ' επιλογή σας) οποιασδήποτε επόμενης έκδοσης.
 
- Θα πρέπει να έχετε λάβει [((SERVER)) ((SCRIPTPATH)) / COPYING ένα αντίγραφο της GNU General Public License] μαζί με αυτό το πρόγραμμα.Αν όχι, γράψτε προς το Free Software Foundation, Inc, 51 Franklin Street, πέμπτο όροφο , Boston, MA 02110-1301, USA ή [//www.gnu.org/licenses/old-licenses/gpl-2.0.html διαβάστε το online].",
+Το MediaWiki διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ· ούτε καν την σιωπηρή εγγύηση ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΕΝΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ. Βλ. GNU General Public License για περισσότερες λεπτομέρειες.
+
+Θα πρέπει να έχετε λάβει [{{SERVER}}{{SCRIPTPATH}}/COPYING ένα αντίγραφο της GNU General Public License] μαζί με αυτό το πρόγραμμα· αν όχι, στείλτε ένα γράμμα στο Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ή [//www.gnu.org/licenses/old-licenses/gpl-2.0.html διαβάστε το διαδικτυακά].",
 'version-software' => 'Εγκατεστημένο λογισμικό',
 'version-software-product' => 'Προϊόν',
 'version-software-version' => 'Έκδοση',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Διαδρομή αρχείου',
@@ -3797,16 +3836,30 @@ $5
 # New logging system
 'logentry-delete-delete' => 'Ο/η $1 διέγραψε τη σελίδα $3',
 'logentry-delete-restore' => 'Ο/η $1 αποκατέστησε τη σελίδα $3',
+'logentry-delete-event' => '$1 άλλαξε την ορατότητα σε  {{PLURAL:$5|ένα γεγονός καταγραφής|$5 log events}} στο  $3: $4',
 'revdelete-content-hid' => 'το περιεχόμενο αποκρύφθηκε',
 'revdelete-summary-hid' => 'Η σύνοψη επεξεργασίας αποκρύφθηκε',
 'revdelete-uname-hid' => 'Το όνομα χρήστη αποκρύφθηκε',
+'revdelete-content-unhid' => 'το περιεχόμενο έπαψε να είναι κρυφό',
+'revdelete-summary-unhid' => 'η σύνοψη επεξεργασίας έπαψε να είναι κρυφή',
+'revdelete-uname-unhid' => 'το όνομα χρήστη έπαψε να είναι κρυφό',
 'revdelete-restricted' => 'εφάρμοσε περιορισμούς στους sysops',
 'revdelete-unrestricted' => 'αφαίρεσε περιορισμούς στους sysops',
-'logentry-newusers-create' => '$1 δημιούργησε έναν λογαριασμό χρήστη',
+'logentry-move-move' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4',
+'logentry-move-move-noredirect' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 χωρίς να αφήσει ανακατεύθυνση',
+'logentry-move-move_redir' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 πάνω από την ανανακατεύθυνση',
+'logentry-move-move_redir-noredirect' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση',
+'logentry-patrol-patrol' => '{{GENDER:$1|Ο|Η}} $1 σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
+'logentry-patrol-patrol-auto' => '{{GENDER:$1|Ο|Η}} $1 αυτόματα σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
+'logentry-newusers-newusers' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε έναν λογαριασμό χρήστη',
+'logentry-newusers-create' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε έναν λογαριασμό χρήστη',
+'logentry-newusers-create2' => '{{GENDER:$1|Ο|Η}} $1 δημιούργησε τον λογαριασμό χρήστη $3',
 'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
 'newuserlog-byemail' => 'ο κωδικός έχει σταλεί μέσω ηλεκτρονικού μηνύματος',
 
 # Feedback
+'feedback-bugornote' => 'Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλώ [ $1  κάντε μια αναφορά σφάλματος].
+Διαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα "[ $3  $2 ]", μαζί με το όνομα χρήστη σας και ποιο πρόγραμμα περιήγησης χρησιμοποιείτε.',
 'feedback-subject' => 'Θέμα:',
 'feedback-message' => 'Μήνυμα:',
 'feedback-cancel' => 'Ακύρωση',
@@ -3817,6 +3870,8 @@ $5
 'feedback-error3' => 'Σφάλμα: Καμία απάντηση από το API',
 'feedback-thanks' => 'Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα "[$2 $1]".',
 'feedback-close' => 'Ολοκληρώθηκε',
+'feedback-bugcheck' => 'Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [ $1  γνωστά σφάλματα].',
+'feedback-bugnew' => 'Έλεγξα. Αναφέρετε ένα νέο σφάλμα',
 
 # API errors
 'api-error-badaccess-groups' => 'Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.',
@@ -3856,4 +3911,15 @@ $5
 'api-error-uploaddisabled' => 'Η επιφόρτωση είναι απενεργοποιημένη σε αυτό το wiki.',
 'api-error-verification-error' => 'Αυτό το αρχείο μπορεί να είναι κατεστραμμένο, ή να έχει λανθασμένη επέκταση.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}',
+'duration-minutes' => '$1 {{PLURAL:$1|λεπτό|λεπτά}}',
+'duration-hours' => '$1 {{PLURAL:$1|ώρα|ώρες}}',
+'duration-days' => '$1 {{PLURAL:$1|μέρα|μέρες}}',
+'duration-weeks' => '$1 {{PLURAL:$1|εβδομάδα|εβδομάδες}}',
+'duration-years' => '$1 {{PLURAL:$1|χρόνο|χρόνια}}',
+'duration-decades' => '$1 {{PLURAL:$1|δεκαετία|δεκαετίες}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Αιώνα|αιώνες}}',
+'duration-millennia' => '$1 {{PLURAL:$1|Χιλιετία|Χιλιετίες}}',
+
 );
index 238f136..95495ce 100644 (file)
@@ -1040,6 +1040,8 @@ The reason given is "\'\'$2\'\'".',
 'filereadonlyerror'    => 'Unable to modify the file "$1" because the file repository "$2" is in read-only mode.
 
 The administrator who locked it offered this explanation: "$3".',
+'invalidtitle-knownnamespace'   => 'Invalid title with namespace "$2" and text "$3"',
+'invalidtitle-unknownnamespace' => 'Invalid title with unknown namespace number $1 and text "$2"',
 
 # Virus scanner
 'virus-badscanner'     => "Bad configuration: Unknown virus scanner: ''$1''",
@@ -1483,6 +1485,8 @@ These arguments have been omitted.",
 'node-count-exceeded-warning'             => 'Page exceeded the node-count',
 'expansion-depth-exceeded-category'       => 'Pages where expansion depth is exceeded',
 'expansion-depth-exceeded-warning'        => 'Page exceeded the expansion depth',
+'parser-unstrip-loop-warning'             => 'Unstrip loop detected',
+'parser-unstrip-recursion-limit'          => 'Unstrip recursion limit exceeded ($1)',
 
 # "Undo" feature
 'undo-success' => 'The edit can be undone.
@@ -1666,15 +1670,16 @@ Note that using the navigation links will reset this column.',
 'mergelogpagetext'   => 'Below is a list of the most recent merges of one page history into another.',
 
 # Diffs
-'history-title'            => 'Revision history of "$1"',
-'difference'               => '(Difference between revisions)',
-'difference-multipage'     => '(Difference between pages)',
-'lineno'                   => 'Line $1:',
-'compareselectedversions'  => 'Compare selected revisions',
-'showhideselectedversions' => 'Show/hide selected revisions',
-'editundo'                 => 'undo',
-'diff-multi'               => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
-'diff-multi-manyusers'     => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)',
+'history-title'              => 'Revision history of "$1"',
+'difference-title'           => 'Difference between revisions of "$1"',
+'difference-title-multipage' => 'Difference between pages "$1" and "$2"',
+'difference-multipage'       => '(Difference between pages)',
+'lineno'                     => 'Line $1:',
+'compareselectedversions'    => 'Compare selected revisions',
+'showhideselectedversions'   => 'Show/hide selected revisions',
+'editundo'                   => 'undo',
+'diff-multi'                 => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
+'diff-multi-manyusers'       => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)',
 
 # Search results
 'search-summary'                   => '', # do not translate or duplicate this message to other languages
@@ -2348,6 +2353,7 @@ For optimal security, img_auth.php is disabled.',
 'http-curl-error'       => 'Error fetching URL: $1',
 'http-host-unreachable' => 'Could not reach URL.',
 'http-bad-status'       => 'There was a problem during the HTTP request: $1 $2',
+'http-truncated-body'   => 'The request body was only partially received.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6'       => 'Could not reach URL',
index 8921eb2..dbc3f09 100644 (file)
@@ -534,12 +534,12 @@ $messages = array(
 'jumpto' => 'Iri al:',
 'jumptonavigation' => 'navigado',
 'jumptosearch' => 'serĉi',
-'view-pool-error' => 'Bedaŭrinde la serviloj estas tro uzata ĉi-momente.
+'view-pool-error' => 'Bedaŭrinde la serviloj estas tro uzataj ĉi-momente.
 Tro da uzantoj provas vidi ĉi tiun paĝon.
-Bonvolu atendi iom antaŭ vi provas atingi ĝin denove.
+Bonvolu atendi iom antaŭ provi atingi ĝin denove.
 
 $1',
-'pool-timeout' => 'Tempolimo atingis atendante ŝlosadon',
+'pool-timeout' => 'Tempolimo atingita dum atendo de ŝlosado',
 'pool-queuefull' => 'Atendovico de servilaro estas plena.',
 'pool-errorunknown' => 'Nekonata eraro',
 
@@ -989,7 +989,9 @@ La lasta protokolero estas jene montrata por via referenco:',
 Rememoru ke individuaj .css-aj kaj .js-aj paĝoj uzas minusklan titolon, ekz. {{ns:user}}:Foo/vector.css kontraŭe al {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Ŝanĝo registrita)',
 'note' => "'''Noto:'''",
-'previewnote' => "'''Memoru, ke ĉi tio estas nur antaŭrigardo kaj ankoraŭ ne konservita!'''",
+'previewnote' => "'''Memoru, ke ĉi tio estas nur antaŭrigardo.''' 
+Viaj ŝanĝoj ne ankoraŭ estas konservitaj!",
+'continue-editing' => 'Redaktu plu',
 'previewconflict' => 'La jena antaŭrigardo montras la tekston el la supra tekstujo,
 kiel ĝi aperos se vi elektos konservi la paĝon.',
 'session_fail_preview' => "'''Ni ne povas procezi vian redakton pro perdo de seancaj datenoj.
@@ -1006,6 +1008,7 @@ La redakto estis malpermesita por preventi koruptado de la teksto de la paĝo.
 Ĉi tiel malofte okazas kiam vi uzas fuŝan TTT-an anoniman prokurilon.'''",
 'edit_form_incomplete' => "'''Kelkaj partoj de la redaktada formo ne atingis la servilon; rekontrolu ke via redakto estas ĝusta kaj reprovu.'''",
 'editing' => 'Redaktado de $1',
+'creating' => 'Kreado de $1',
 'editingsection' => 'Redaktante $1 (sekcion)',
 'editingcomment' => 'Redaktante $1 (nova sekcio)',
 'editconflict' => 'Redakta konflikto: $1',
@@ -1084,6 +1087,10 @@ Iuj ŝablonoj ne estos inkluzivitaj.',
 'parser-template-loop-warning' => 'Rekursiva ŝablono estis trovita: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limo de ŝablona profundeco pligrandiĝis ($1)',
 'language-converter-depth-warning' => 'Profundo de lingvo-konvertilo preterpasis limon ($1)',
+'node-count-exceeded-category' => 'Paĝoj kie la nombro da nodoj estis preterpasita',
+'node-count-exceeded-warning' => 'Paĝo preterpasis la nombron da nodoj.',
+'expansion-depth-exceeded-category' => 'Paĝoj en kiuj la ekpansiprofundo estis preterpasita.',
+'expansion-depth-exceeded-warning' => 'Paĝo preterpasis la ekpansiprofundon.',
 
 # "Undo" feature
 'undo-success' => 'La redakto estas malfarebla.
@@ -1261,7 +1268,6 @@ Certigu ke ĉi tiu ŝanĝo tenos kontinuecon de la historia paĝo.',
 
 # Diffs
 'history-title' => 'Redakto-historio de "$1"',
-'difference' => '(Malsamoj inter versioj)',
 'difference-multipage' => '(Diferenco inter paĝoj)',
 'lineno' => 'Linio $1:',
 'compareselectedversions' => 'Kompari la elektitajn versiojn',
index 9fceb11..682e6df 100644 (file)
@@ -730,6 +730,8 @@ $2',
 El motivo dado fue: "\'\'$2\'\'".',
 'filereadonlyerror' => 'No se puede modificar el archivo "$1" porque el repositorio de archivos "$2" está en modo de sólo lectura.
 El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
+'invalidtitle-knownnamespace' => 'Título no válido con el espacio de nombres "$2" y el texto "$3"',
+'invalidtitle-unknownnamespace' => 'Título no válido con número de espacio de nombres desconocido  $1  y el texto "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
@@ -1121,6 +1123,12 @@ Ese o esos parámetros han sido omitidos.',
 'parser-template-loop-warning' => 'Detectado bucle de plantilla: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Se ha excedido el límite de recursión de plantillas ($1)',
 'language-converter-depth-warning' => 'El límite de profundidad del convertidor de idioma ha excedido ($1)',
+'node-count-exceeded-category' => 'Páginas donde se supera el número de nodos',
+'node-count-exceeded-warning' => 'Página que ha superado el número de nodos',
+'expansion-depth-exceeded-category' => 'Páginas donde se supera la profundidad de expansión',
+'expansion-depth-exceeded-warning' => 'Página que ha superado la profundidad de expansión',
+'parser-unstrip-loop-warning' => 'Se ha detectado un bucle "unstrip"',
+'parser-unstrip-recursion-limit' => 'Se ha superado el límite de recursión de "unstrip" ($1)',
 
 # "Undo" feature
 'undo-success' => 'La edición puede deshacerse. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así deshacer la edición.',
@@ -1300,7 +1308,8 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 
 # Diffs
 'history-title' => 'Historial de revisiones para «$1»',
-'difference' => '(Diferencias entre revisiones)',
+'difference-title' => 'Diferencia entre revisiones de «$1»',
+'difference-title-multipage' => 'Diferencia entre las páginas «$1» y «$2»',
 'difference-multipage' => '(Diferencia entre las páginas)',
 'lineno' => 'Línea $1:',
 'compareselectedversions' => 'Comparar versiones seleccionadas',
@@ -1512,9 +1521,9 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'saveusergroups' => 'Guardar grupos de usuarios',
 'userrights-groupsmember' => 'Miembro de:',
 'userrights-groupsmember-auto' => 'Miembro implícito de:',
-'userrights-groups-help' => 'Puedes modificar los grupos a los que pertenece este usuario:
-* Un recuadro marcado significa que el usuario está en ese grupo.
-* Un recuadro no marcado significa que el usuario no está en ese grupo.
+'userrights-groups-help' => 'Puedes modificar los grupos a los que pertenece {{GENDER:$1|este usuario|esta usuaria}}:
+* Un recuadro marcado significa que {{GENDER:$1|el usuario|la usuaria}} está en ese grupo.
+* Un recuadro no marcado significa que {{GENDER:$1|el usuario|la usuaria}} no está en ese grupo.
 * Un * indica que no podrás retirar el grupo una vez que lo concedas, o viceversa.',
 'userrights-reason' => 'Motivo:',
 'userrights-no-interwiki' => 'No tienes permiso para editar los grupos a los que pertenece un usuario en otros wikis.',
@@ -1916,6 +1925,7 @@ Para óptima seguridad, img_auth.php está desactivado.',
 'http-curl-error' => 'Error al recuperar el URL: $1',
 'http-host-unreachable' => 'No fue posible acceder a la URL.',
 'http-bad-status' => 'Ha habido un problema durante la solicitud HTTP: $1 $2',
+'http-truncated-body' => 'El cuerpo solicitado sólo fue recibido parcialmente.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'No se pudo alcanzar la URL',
@@ -3891,7 +3901,7 @@ Este sitio está experimentando dificultades técnicas.',
 'logentry-delete-revision' => '$1 modificó la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4',
 'logentry-delete-event-legacy' => '$1 modificó la visibilidad de los eventos del registro en $3',
 'logentry-delete-revision-legacy' => '$1 modificó la visibilidad de las ediciones en la página $3',
-'logentry-suppress-delete' => '$1 borró la página $3',
+'logentry-suppress-delete' => '$1 borró (restricciones para administradores aplicadas) la página $3',
 'logentry-suppress-event' => '$1 modificó secretamente la visibilidad de {{PLURAL:$5|un evento del registro|$5 eventos del registro}} en $3: $4',
 'logentry-suppress-revision' => '$1 modificó secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4',
 'logentry-suppress-event-legacy' => '$1 modificó secretamente la visibilidad de los eventos del registro en $3',
index e27db56..1085a2e 100644 (file)
@@ -1223,7 +1223,6 @@ Navigeerimislinkide kasutamine tühistab redaktsioonide valiku.',
 
 # Diffs
 'history-title' => 'Lehekülje "$1" muudatuste ajalugu',
-'difference' => '(Erinevused redaktsioonide vahel)',
 'difference-multipage' => '(Lehekülgede erinevus)',
 'lineno' => 'Rida $1:',
 'compareselectedversions' => 'Võrdle valitud redaktsioone',
@@ -3336,11 +3335,11 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-flash-return-0' => 'ei ole välgu peegeldumist tuvastavat funktsiooni',
 'exif-flash-return-2' => 'välgu peegeldust ei tuvastatud',
 'exif-flash-return-3' => 'tuvastati välgu peegeldus',
-'exif-flash-mode-1' => 'sund välk',
+'exif-flash-mode-1' => 'sundvälk',
 'exif-flash-mode-2' => 'välk keelatud',
 'exif-flash-mode-3' => 'automaatne töörežiim',
 'exif-flash-function-1' => 'Välgu funktsiooni ei ole',
-'exif-flash-redeye-1' => 'Punasilmsust vähendav reziim',
+'exif-flash-redeye-1' => 'punasilmsust vähendav režiim',
 
 'exif-focalplaneresolutionunit-2' => 'toll',
 
@@ -3431,6 +3430,9 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-gpsdirection-t' => 'Tegelik suund',
 'exif-gpsdirection-m' => 'Magneetiline suund',
 
+'exif-ycbcrpositioning-1' => 'Keskele asetatud',
+'exif-ycbcrpositioning-2' => 'Kõrvuti asetatud',
+
 'exif-dc-contributor' => 'Asjaosalised',
 'exif-dc-coverage' => 'Teabevahendi ruumiline või ajaline ulatus',
 'exif-dc-date' => 'Kuupäevad',
index 61b9cff..801b18a 100644 (file)
@@ -1017,7 +1017,6 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 
 # Diffs
 'history-title' => '"$1" orrialdearen historia laburpena',
-'difference' => '(Bertsioen arteko ezberdintasunak)',
 'difference-multipage' => '(Orrialdeen arteko ezberdintasunak)',
 'lineno' => '$1. lerroa:',
 'compareselectedversions' => 'Hautatutako bertsioak alderatu',
index 4366ff1..7970945 100644 (file)
@@ -752,7 +752,6 @@ Asigurati e qu'esti chambu mantenga la continuiá el estorial la páhina.",
 
 # Diffs
 'history-title' => 'Estorial de revisionis de "$1"',
-'difference' => '(Deferéncias entri las revisionis)',
 'lineno' => 'Línia $1:',
 'compareselectedversions' => 'Comparal velsionis aseñalás',
 'editundo' => 'esjazel',
index 0f84990..6c609da 100644 (file)
@@ -453,10 +453,10 @@ $messages = array(
 'tog-previewontop' => 'پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد',
 'tog-previewonfirst' => 'پیش‌نمایش هنگام اولین ویرایش نمایش یابد',
 'tog-nocache' => 'حافظهٔ نهانی مرورگر از کار انداخته شود',
-'tog-enotifwatchlistpages' => 'اگر صفحه‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من نامه الکترونیکی فرستاده شود',
-'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه الکترونیکی فرستاده شود',
-'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها هم به من نامه الکترونیکی فرستاده شود',
-'tog-enotifrevealaddr' => 'نشانی پست الکترونیکی من را در نامه‌های اطلاع‌رسانی نمایش یابد',
+'tog-enotifwatchlistpages' => 'اگر صفحه‌ای از فهرست پی‌گیری‌هایم ویرایش شد برای من نامه‌ای فرستاده شود',
+'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود',
+'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها هم به من نامه‌ای فرستاده شود',
+'tog-enotifrevealaddr' => 'نشانی رایانامهٔ من را در نامه‌های اطلاع‌رسانی نمایش یابد',
 'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده نمایش یابد',
 'tog-oldsig' => 'امضای کنونی:',
 'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)',
@@ -472,7 +472,7 @@ $messages = array(
 'tog-watchlisthideanons' => 'ویرایش‌های کاربران ناشناس در فهرست پی‌گیری‌های من پنهان شود',
 'tog-watchlisthidepatrolled' => 'ویرایش‌های گشت‌خورده در فهرست پی‌گیری‌ها پنهان شود',
 'tog-nolangconversion' => 'تبدیل گویش‌ها غیرفعال شود',
-'tog-ccmeonemails' => 'رونوشتی از نامه‌های الکترونیکی که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود',
+'tog-ccmeonemails' => 'رونوشتی از نامه‌ای که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود',
 'tog-diffonly' => 'محتوای صفحه، زیر تفاوت نمایش داده نشود',
 'tog-showhiddencats' => 'رده‌های پنهان نمایش داده شود',
 'tog-noconvertlink' => 'تبدیل عنوان پیوند غیرفعال شود',
@@ -863,7 +863,7 @@ $2',
 'gotaccount' => "حساب کاربری دارید؟ '''$1'''.",
 'gotaccountlink' => 'وارد شوید',
 'userlogin-resetlink' => 'جزئیات ورود را فراموش کرده‌اید؟',
-'createaccountmail' => 'با پست الکترونیکی',
+'createaccountmail' => 'با رایانامه',
 'createaccountreason' => 'دلیل:',
 'badretype' => 'گذرواژه‌هایی که وارد کرده‌اید یکسان نیستند.',
 'userexists' => 'نام کاربری‌ای که وارد کردید قبلاً استفاده شده‌است.
@@ -896,7 +896,7 @@ $2',
 'passwordtooshort' => 'گذرواژه باید دست‌کم {{PLURAL:$1|$1 حرف|$1 حرف}} داشته باشد.',
 'password-name-match' => 'گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.',
 'password-login-forbidden' => 'استفاده از این نام کاربری و گذرواژه ممنوع است.',
-'mailmypassword' => 'گذرواژهٔ جدید با پست الکترونیکی فرستاده شود',
+'mailmypassword' => 'گذرواژهٔ جدید با رایانامه فرستاده شود',
 'passwordremindertitle' => 'یادآور گذرواژهٔ {{SITENAME}}',
 'passwordremindertext' => 'یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری‌ شما در {{SITENAME}} درخواست کرده‌است ($4). 
 یک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است.
@@ -904,31 +904,31 @@ $2',
 گذرواژهٔ موقت شما ظرف {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.
 
 اگر کس دیگری این درخواست را کرده‌است یا اینکه شما گذرواژهٔ پیشین خود را به یاد آورده‌اید و دیگر تمایلی به تغییر آن ندارید، می‌توانید این پیغام را نادیده بگیرید و همان گذرواژهٔ پیشین را به کار برید.',
-'noemail' => 'هیچ نشانی پست الکترونیکی‌ای برای کاربر «$1» ثبت نشده‌است.',
-'noemailcreate' => 'باید یک نشانی پست الکترونیک معتبر وارد کنید',
-'passwordsent' => 'گذرÙ\88اÚ\98Ù\87â\80\8cاÛ\8c Ø¬Ø¯Û\8cد Ø¨Ù\87 Ù\86شاÙ\86Û\8c Ø§Ù\84کترÙ\88Ù\86Û\8cÚ©Û\8c ثبت‌شده برای «$1» فرستاده شد.
+'noemail' => 'هیچ نشانی رایانامه‌ای برای کاربر «$1» ثبت نشده‌است.',
+'noemailcreate' => 'باید یک نشانی رایانامه معتبر وارد کنید',
+'passwordsent' => 'گذرÙ\88اÚ\98Ù\87â\80\8cاÛ\8c Ø¬Ø¯Û\8cد Ø¨Ù\87 Ù\86شاÙ\86Û\8c Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87 ثبت‌شده برای «$1» فرستاده شد.
 لطفاً پس از دریافت آن دوباره به سامانه وارد شوید.',
 'blocked-mailpassword' => 'نشانی آی‌پی شما از ویرایش بازداشته شده‌است و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیابی گذرواژه را ندارد.',
-'eauthentsent' => 'یک نامهٔ الکترونیکی برای تأیید نشانی پست الکترونیکی به نشانی موردنظر ارسال شد.
+'eauthentsent' => 'یک نامه برای تأیید نشانی رایانامه به نشانی موردنظر ارسال شد.
 قبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهایی که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.',
 'throttled-mailpassword' => 'یک یادآور گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته برای شما فرستاده شده‌است.
 برای جلوگیری از سوءاستفاده هر  $1 ساعت تنها یک یادآوری فرستاده می‌شود.',
-'mailerror' => 'خطا در فرستادن پست الکترونیکی: $1',
+'mailerror' => 'خطا در فرستادن رایانامه: $1',
 'acct_creation_throttle_hit' => 'بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.
 به همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.',
-'emailauthenticated' => 'نشانی پست الکترونیکی شما در $2 ساعت $3 تصدیق شد.',
-'emailnotauthenticated' => 'نشانی پست الکترونیکی شما هنوز تصدیق نشده‌است.
-برای هیچ‌یک از ویژگی‌های زیر نامهٔ الکترونیکی ارسال نخواهد شد.',
-'noemailprefs' => 'برای راه‌اندازی این قابلیت‌ها یک نشانی پست الکترونیکی مشخص کنید.',
-'emailconfirmlink' => 'تأیید نشانی پست الکترونیکی',
-'invalidemailaddress' => 'نشانی واردشدهٔ پست الکترونیک قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است.
+'emailauthenticated' => 'نشانی رایانامه شما در $2 ساعت $3 تصدیق شد.',
+'emailnotauthenticated' => 'نشانی رایانامه شما هنوز تصدیق نشده‌است.
+برای هیچ‌یک از ویژگی‌های زیر رایانامه ارسال نخواهد شد.',
+'noemailprefs' => 'برای راه‌اندازی این قابلیت‌ها یک نشانی رایانامه مشخص کنید.',
+'emailconfirmlink' => 'تأیید نشانی رایانامه',
+'invalidemailaddress' => 'نشانی واردشدهٔ رایانامه قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است.
 لطفاً نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.',
-'cannotchangeemail' => 'نشانی‌های پست الکترونیکی حساب کاربری در این ویکی قابل تغییر نیست.',
+'cannotchangeemail' => 'نشانی‌های رایانامهٔ حساب کاربری در این ویکی قابل تغییر نیست.',
 'emaildisabled' => 'این وب‌گاه قادر به ارسال رایانامه نیست.',
 'accountcreated' => 'حساب کاربری ایجاد شد',
 'accountcreatedtext' => 'حساب کاربری $1 ایجاد شده‌است.',
 'createaccount-title' => 'ایجاد حساب کاربری در {{SITENAME}}',
-'createaccount-text' => 'یک نفر برای پست الکترونیک شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3
+'createaccount-text' => 'یک نفر برای رایانامه شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3
 شما باید به سامانه وارد شوید تا گذرواژهٔ خود را تغییر بدهید.
 
 اگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.',
@@ -941,7 +941,7 @@ $2',
 
 # E-mail sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
-'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس پست الکترونیک.',
+'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس رایانامه.',
 
 # Change password dialog
 'resetpass' => 'تغییر گذرواژه',
@@ -971,9 +971,9 @@ $2',
 'passwordreset-pretext' => '{{PLURAL:$1||یکی از قطعه‌های داده را در زیر وارد کنید}}',
 'passwordreset-username' => 'نام کاربری:',
 'passwordreset-domain' => 'دامنه:',
-'passwordreset-capture' => 'پست الکترونیکی نهایی نشان داده شود؟',
-'passwordreset-capture-help' => 'اگر این گزینه را علامت بزنید پست الکترونیکی (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.',
-'passwordreset-email' => 'نشانی پست الکترونیک:',
+'passwordreset-capture' => 'رایانامهٔ نهایی نشان داده شود؟',
+'passwordreset-capture-help' => 'اگر این گزینه را علامت بزنید رایانامهٔ (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.',
+'passwordreset-email' => 'نشانی رایانامه:',
 'passwordreset-emailtitle' => 'جزئیات حساب در {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'شخصی (احتمالاً شما، با نشانی آی‌پی $1) درخواست یادآوری جزئیات حساب کاربریتان در {{SITENAME}} ($4) را کرده‌است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این رایانشانی مرتبط هستند:
 
@@ -991,18 +991,18 @@ $2
 'passwordreset-emailelement' => 'نام کاربری: $1
 گذرواژهٔ موقت: $2',
 'passwordreset-emailsent' => 'یک نامهٔ یادآور فرستاده شده است.',
-'passwordreset-emailsent-capture' => 'پست الکترونیکی یادآور فرستاده شد، که به شرح زیر است.',
-'passwordreset-emailerror-capture' => 'پست الکترونیکی یادآور همانطور که در زیر مشاهده‌ می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
+'passwordreset-emailsent-capture' => 'رایانامهٔ یادآور فرستاده شد، که به شرح زیر است.',
+'passwordreset-emailerror-capture' => 'رایانامهٔ یادآور همانطور که در زیر مشاهده‌ می‌فرمایید ایجاد شد ولی ارسال آن به کاربر موفقیت‌آمیز نبود: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'تغÛ\8cÛ\8cر Ø¢Ø¯Ø±Ø³ Ù¾Ø³Øª Ø§Ù\84کترÙ\88Ù\86Û\8cÚ©',
+'changeemail' => 'تغÛ\8cÛ\8cر Ø¢Ø¯Ø±Ø³ Ù¾Ø³Øª Ø±Ø§Û\8cاÙ\86اÙ\85Ù\87',
 'changeemail-header' => 'تغییر آدرس ایمیل حساب کاربری',
-'changeemail-text' => 'این فرم را تکمیل کنید تا آدرس پست الکترونیکی‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.',
+'changeemail-text' => 'این فرم را تکمیل کنید تا آدرس رایانامه‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.',
 'changeemail-no-info' => 'برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.',
-'changeemail-oldemail' => 'نشانی پست الکترونیکی کنونی:',
-'changeemail-newemail' => 'نشانی پست الکترونیکی جدید:',
+'changeemail-oldemail' => 'نشانی رایانامهٔ کنونی:',
+'changeemail-newemail' => 'نشانی رایانامهٔ جدید:',
 'changeemail-none' => '(هیچ)',
-'changeemail-submit' => 'تغییر پست الکترونیکی',
+'changeemail-submit' => 'تغییر رایانامه',
 'changeemail-cancel' => 'انصراف',
 
 # Edit page toolbar
@@ -1056,7 +1056,7 @@ $2
 * کاربری که قطع دسترسی‌اش مد نظر بوده‌است: $7
 
 شما می‌توانید با $1 یا  [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.
-توجه کنید که شما نمی‌توانید از ویژگی «فرستادن پست الکترونیکی به این کاربر» استفاده کنید مگر آنکه نشانی پست الکترونیکی معتبری در [[Special:Preferences|ترجیحات کاربری]]‌تان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.
+توجه کنید که شما نمی‌توانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]]‌تان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.
 نشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.
 لطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
 'autoblockedtext' => "دسترسی نشانی آی‌پی شما قطع شده‌است، زیرا این نشانی آی‌پی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شده‌است.
@@ -1070,13 +1070,13 @@ $2
 
 شما می‌توانید با $1 یا یکی دیگر از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرید، تا پیرامون این قطع دسترسی صحبت کنید.
 
-توجه کنید که برای ارسال پست الکترونیکی در ویکی، باید پست الکترونیکی خود را از طریق صفحهٔ [[Special:Preferences|تنظیمات]] فعال کرده باشید، و نیز، باید امکان استفاده از این ویژگی برای شما قطع نباشد.
+توجه کنید که برای ارسال رایانامه در ویکی، باید رایانامهٔ خود را از طریق صفحهٔ [[Special:Preferences|تنظیمات]] فعال کرده باشید، و نیز، باید امکان استفاده از این ویژگی برای شما قطع نباشد.
 
 نشانی آی‌پی فعلی شما $3 است و شمارهٔ قطع دسترسی $5 است.
 لطفاً این شماره را در هر درخواستی که در این باره مطرح می‌کنید ذکر کنید.",
 'blockednoreason' => 'دلیلی مشخص نشده‌است',
 'whitelistedittext' => 'برای ویرایش مقاله‌ها باید $1.',
-'confirmedittext' => 'شما باید، پیش از ویرایش صفحه‌ها، نشانی پست الکترونیکی خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.',
+'confirmedittext' => 'شما باید، پیش از ویرایش صفحه‌ها، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.',
 'nosuchsectiontitle' => 'چنین بخشی پیدا نشد',
 'nosuchsectiontext' => 'شما تلاش کرده‌اید یک بخش در صفحه را ویرایش کنید که وجود ندارد.
 ممکن است در مدتی که شما صفحه را مشاهده می‌کردید این بخش جا به جا یا حذف شده باشد.',
@@ -1406,7 +1406,6 @@ $1",
 
 # Diffs
 'history-title' => 'تاریخچهٔ ویرایش‌های «$1»',
-'difference' => '(تفاوت بین نسخه‌ها)',
 'difference-multipage' => '(تفاوت بین صفحه‌ها)',
 'lineno' => 'سطر $1:',
 'compareselectedversions' => 'مقایسهٔ نسخه‌های انتخاب‌شده',
@@ -1514,9 +1513,9 @@ $1",
 'prefs-watchlist-token' => 'رمز فهرست پی‌گیری:',
 'prefs-misc' => 'تنظیمات متفرقه',
 'prefs-resetpass' => 'تغییر گذرواژه',
-'prefs-changeemail' => 'تغییر پست الکترونیکی',
-'prefs-setemail' => 'تغیین آدرس پست الکترونیکی',
-'prefs-email' => 'گزینه‌های پست الکترونیک',
+'prefs-changeemail' => 'تغییر رایانامه',
+'prefs-setemail' => 'تغیین آدرس رایانامه',
+'prefs-email' => 'گزینه‌های رایانامه',
 'prefs-rendering' => 'نمایش صفحه',
 'saveprefs' => 'ذخیره',
 'resetprefs' => 'صفرکردن ترجیحات',
@@ -1554,7 +1553,7 @@ $1",
 'timezoneregion-europe' => 'اروپا',
 'timezoneregion-indian' => 'اقیانوس هند',
 'timezoneregion-pacific' => 'اقیانوس آرام',
-'allowemail' => 'امکان دریافت پست الکترونیکی از دیگر کاربران',
+'allowemail' => 'امکان دریافت رایانامه از دیگر کاربران',
 'prefs-searchoptions' => 'گزینه‌های جستجو',
 'prefs-namespaces' => 'فضاهای نام',
 'defaultns' => 'در غیر این صورت جستجو در این فضاهای نام:',
@@ -1565,9 +1564,9 @@ $1",
 'prefs-common-css-js' => 'سی‌اس‌اس/جاوااسکریپت مشترک برای تمام پوسته‌ها:',
 'prefs-reset-intro' => 'شما می‌توانید از این صفحه برای بازگرداندن تنظیمات خود به پیش‌فرض تارنما استفاده کنید.
 این کار بازگشت‌ناپذیر است.',
-'prefs-emailconfirm-label' => 'تأیید پست الکترونیکی:',
+'prefs-emailconfirm-label' => 'تأیید رایانامه:',
 'prefs-textboxsize' => 'اندازهٔ جعبهٔ ویرایش',
-'youremail' => 'پست الکترونیکی:',
+'youremail' => 'رایانامه:',
 'username' => 'نام کاربری:',
 'uid' => 'شمارهٔ کاربری:',
 'prefs-memberingroups' => 'عضو این {{PLURAL:$1|گروه|گروه‌ها}}:',
@@ -1588,13 +1587,13 @@ $1",
 'gender-female' => 'زن',
 'prefs-help-gender' => 'اختیاری: برای خطاب‌شدن با جنسیت درست توسط نرم‌افزار به کار می‌رود.
 این اطلاعات عمومی خواهد بود.',
-'email' => 'پست الکترونیکی',
+'email' => 'رایانامه',
 'prefs-help-realname' => 'نام واقعی اختیاری است
 اگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.',
-'prefs-help-email' => 'نشانی پست الکترونیکی اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.',
-'prefs-help-email-others' => 'شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما پست الکترونیکی بفرستند.
-نشانی پست الکترونیکی شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.',
-'prefs-help-email-required' => 'نشانی پست الکترونیکی الزامی‌است.',
+'prefs-help-email' => 'نشانی رایانامه اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.',
+'prefs-help-email-others' => 'شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما رایانامه بفرستند.
+نشانی رایانامه شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.',
+'prefs-help-email-required' => 'نشانی رایانامه الزامی‌است.',
 'prefs-info' => 'اطلاعات اولیه',
 'prefs-i18n' => 'بین‌المللی‌سازی',
 'prefs-signature' => 'امضا',
@@ -1611,8 +1610,8 @@ $1",
 'prefs-diffs' => 'تفاوت‌ها',
 
 # User preference: e-mail validation using jQuery
-'email-address-validity-valid' => 'نشانی پست الکترونیکی معتبر به نظر می رسد',
-'email-address-validity-invalid' => 'نشانی پست الکترونیکی معتبر وارد کنید',
+'email-address-validity-valid' => 'نشانی رایانامه معتبر به نظر می رسد',
+'email-address-validity-invalid' => 'نشانی رایانامهٔ معتبر وارد کنید',
 
 # User rights
 'userrights' => 'مدیریت اختیارات کاربر',
@@ -1693,7 +1692,7 @@ $1",
 'right-suppressrevision' => 'بازبینی و احیای ویرایش‌هایی که از مدیران پنهان شده‌اند',
 'right-suppressionlog' => 'مشاهدهٔ سیاهه‌های خصوصی',
 'right-block' => 'قطع دسترسی ویرایشی دیگر کاربران',
-'right-blockemail' => 'قطع دسترسی دیگر کاربران برای ارسال پست الکترونیکی',
+'right-blockemail' => 'قطع دسترسی دیگر کاربران برای ارسال رایانامه',
 'right-hideuser' => 'قطع دسترسی کاربر و پنهان کردن آن از دید عموم',
 'right-ipblock-exempt' => 'تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای',
 'right-proxyunbannable' => 'تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها',
@@ -1718,7 +1717,7 @@ $1",
 'right-userrights-interwiki' => 'ویرایش اختیارات کاربرهای ویکی‌های دیگر',
 'right-siteadmin' => 'قفل کردن و باز کردن پایگاه داده',
 'right-override-export-depth' => 'برون‌بری صفحه‌ها شامل صفحه‌های پیوند شده تا عمق ۵',
-'right-sendemail' => 'ارسال نامه الکترونیکی به دیگر کاربران',
+'right-sendemail' => 'ارسال رایانامه به دیگر کاربران',
 'right-passwordreset' => 'مشاهدهٔ نامه‌های تنظیم مجدد گذرواژه',
 
 # User rights log
@@ -2383,24 +2382,24 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 
 # E-mail user
 'mailnologin' => 'نشانی‌ای از فرستنده موجود نیست',
-'mailnologintext' => 'برای فرستادن پست الکترونیکی به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی پست الکترونیکی معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.',
+'mailnologintext' => 'برای فرستادن رایانامه به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی رایانامهٔ معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.',
 'emailuser' => 'فرستادن نامه به این کاربر',
-'emailpage' => 'پست الکترونیکی به کاربر',
-'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک نامه الکترونیکی به این کاربر استفاده کنید.
-نشانی پست الکترونیکی‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.',
-'usermailererror' => 'پست الکترونیکی دچار خطا شد:',
-'defemailsubject' => 'پست الکترونیکی {{SITENAME}} از طرف کاربر «$1»',
-'usermaildisabled' => 'پست الکترونیکی کاربر غیرقعال است',
-'usermaildisabledtext' => 'شما در این ویکی نمی‌توانید به دیگر کاربران پست الکترونیکی بفرستید',
-'noemailtitle' => 'نشانی پست الکترونیکی موجود نیست',
-'noemailtext' => 'این کاربر نشانی پست الکترونیکی معتبری مشخص نکرده است،',
-'nowikiemailtitle' => 'اجازهٔ ارسال نامهٔ الکترونیکی داده نشده‌است',
-'nowikiemailtext' => 'این کاربر انتخاب کرده که از دیگر کاربران نامهٔ الکترونیکی دریافت نکند.',
+'emailpage' => 'رایانامه به کاربر',
+'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این کاربر استفاده کنید.
+نشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.',
+'usermailererror' => 'رایانامه دچار خطا شد:',
+'defemailsubject' => 'رایانامه {{SITENAME}} از طرف کاربر «$1»',
+'usermaildisabled' => 'رایانامهٔ کاربر غیرقعال است',
+'usermaildisabledtext' => 'شما در این ویکی نمی‌توانید به دیگر کاربران رایانامه بفرستید',
+'noemailtitle' => 'نشانی رایانامه موجود نیست',
+'noemailtext' => 'این کاربر نشانی رایانامهٔ معتبری مشخص نکرده است،',
+'nowikiemailtitle' => 'اجازهٔ ارسال رایانامه داده نشده‌است',
+'nowikiemailtext' => 'این کاربر انتخاب کرده که از دیگر کاربران رایانامه دریافت نکند.',
 'emailnotarget' => 'نام کاربری ناموجود یا نامعتبر برای گیرنده.',
 'emailtarget' => 'نام کاربری دریافت‌کننده را وارد کنید',
 'emailusername' => 'نام کاربری:',
 'emailusernamesubmit' => 'ارسال',
-'email-legend' => 'ارسال نامه الکترونیکی به یک کاربر دیگر {{SITENAME}}',
+'email-legend' => 'ارسال یک نامه به کاربر دیگر {{SITENAME}}',
 'emailfrom' => 'از:',
 'emailto' => 'به:',
 'emailsubject' => 'عنوان:',
@@ -2408,9 +2407,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'emailsend' => 'بفرست',
 'emailccme' => 'رونوشت پیغام را برایم بفرست.',
 'emailccsubject' => 'رونوشت پیغام شما به $1: $2',
-'emailsent' => 'پست الکترونیکی فرستاده شد',
-'emailsenttext' => 'پیغام پست الکترونیکی شما فرستاده شد.',
-'emailuserfooter' => 'این نامهٔ الکترونیکی با استفاده از ویژگی «پست الکترونیکی به کاربر» {{SITENAME}} توسط $1 به $2 فرستاده شد.',
+'emailsent' => 'رایانامه فرستاده شد',
+'emailsenttext' => 'پیغام رایانامه شما فرستاده شد.',
+'emailuserfooter' => 'این رایانامه با استفاده از ویژگی «فرستادن نامه به این کاربر» {{SITENAME}} توسط $1 به $2 فرستاده شد.',
 
 # User Messenger
 'usermessage-summary' => 'گذاشتن پیغام سامانه.',
@@ -2437,7 +2436,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'notvisiblerev' => 'آخرین نسخه توسط کاربری دیگر حذف شده‌است',
 'watchnochange' => 'هیچ یک از موارد در حال پی‌گیری شما در دورهٔ زمانی نمایش‌یافته ویرایش نشده است.',
 'watchlist-details' => 'بدون احتساب صفحه‌های بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارند}}.',
-'wlheader-enotif' => '*اطلاع‌رسانی از طریق پست الکترونیکی امکان‌پذیر است.',
+'wlheader-enotif' => '*اطلاع‌رسانی از طریق رایانامه امکان‌پذیر است.',
 'wlheader-showupdated' => "*صفحه‌هایی که پس از آخرین سرزدنتان به آنها تغییر کرده‌اند '''پررنگ''' نشان داده شده‌اند.",
 'watchmethod-recent' => 'بررسی ویرایش‌های اخیر برای صفحه‌های مورد پی‌گیری',
 'watchmethod-list' => 'بررسی صفحه‌های مورد پی‌گیری برای ویرایش‌های اخیر',
@@ -2452,7 +2451,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'unwatching' => 'توقف پی‌گیری...',
 'watcherrortext' => 'ایرادی در هنگام عوض کردن تنظیمات فهرست پیگیرتان برای «$1» رخ داد.',
 
-'enotif_mailer' => 'پست الکترونیکی اطلاع‌رسانی {{SITENAME}}',
+'enotif_mailer' => 'رایانامهٔ اطلاع‌رسانی {{SITENAME}}',
 'enotif_reset' => 'علامت‌گذاری همهٔ صفحه‌ها به عنوان بازدید شده',
 'enotif_newpagetext' => 'این یک صفحهٔ تازه‌است.',
 'enotif_impersonal_salutation' => 'کاربر {{SITENAME}}',
@@ -2748,7 +2747,7 @@ $1',
 **نام کاربری نامناسب',
 'ipb-hardblock' => 'جلوگیری از ویرایش کردن کاربران ثبت نام کرده از طریق این نشانی آی‌پی',
 'ipbcreateaccount' => 'جلوگیری از ایجاد حساب',
-'ipbemailban' => 'جلوگیری از ارسال پست الکترونیکی',
+'ipbemailban' => 'جلوگیری از ارسال رایانامه',
 'ipbenableautoblock' => 'بستن  خودکار آخرین نشانی آی‌پی استفاده شده توسط کاربر و نشانی‌های دیگری که از آن‌ها برای ویرایش تلاش می‌کند',
 'ipbsubmit' => 'این کاربر بسته شود',
 'ipbother' => 'زمانی دیگر',
@@ -2798,7 +2797,7 @@ $1',
 'anononlyblock' => 'فقط کاربران گمنام',
 'noautoblockblock' => 'بستن خودکار غیرفعال است',
 'createaccountblock' => 'امکان ایجاد حساب مسدود است',
-'emailblock' => 'پست الکترونیکی مسدود شد',
+'emailblock' => 'رایانامه مسدود شد',
 'blocklist-nousertalk' => 'نمی تواند صفحهٔ بحث خود را ویرایش کند',
 'ipblocklist-empty' => 'فهرست بسته‌شدن‌ها خالی‌است.',
 'ipblocklist-no-results' => 'دسترسی حساب کاربری یا نشانی آی‌پی مورد نظر قطع نیست.',
@@ -2806,7 +2805,7 @@ $1',
 'unblocklink' => 'باز شود',
 'change-blocklink' => 'تغییر قطع دسترسی',
 'contribslink' => 'مشارکت‌ها',
-'emaillink' => 'ارسال پست الکترونیکی',
+'emaillink' => 'ارسال رایانامه',
 'autoblocker' => 'به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.
 دلیل قطع دسترسی $1 چنین است: «$2»',
 'blocklogpage' => 'سیاههٔ بسته‌شدن‌ها',
@@ -2823,7 +2822,7 @@ $1',
 'block-log-flags-anononly' => 'فقط کاربران گمنام',
 'block-log-flags-nocreate' => 'قابلیت ایجاد حساب غیرفعال شد',
 'block-log-flags-noautoblock' => 'قطع دسترسی خودکار غیرفعال شد',
-'block-log-flags-noemail' => 'پست الکترونیکی مسدود شد',
+'block-log-flags-noemail' => 'رایانامه مسدود شد',
 'block-log-flags-nousertalk' => 'صفحهٔ بحث خود را نمی‌تواند ویرایش کند',
 'block-log-flags-angry-autoblock' => 'قطع دسترسی خودکار پیشرفته فعال شد',
 'block-log-flags-hiddenname' => 'نام کاربری پنهان',
@@ -3129,7 +3128,7 @@ $1',
 'tooltip-feed-rss' => 'خبرنامه آراس‌اس برای این صفحه',
 'tooltip-feed-atom' => 'خبرنامهٔ اتم برای این صفحه',
 'tooltip-t-contributions' => 'فهرست مشارکت‌های این کاربر',
-'tooltip-t-emailuser' => 'فرستادن پست الکترونیکی به این کاربر',
+'tooltip-t-emailuser' => 'فرستادن رایانامه به این کاربر',
 'tooltip-t-upload' => 'بارگذاری تصاویر و پرونده‌های دیگر',
 'tooltip-t-specialpages' => 'فهرستی از همهٔ صفحه‌های ویژه',
 'tooltip-t-print' => 'نسخهٔ قابل چاپ این صفحه',
@@ -3714,63 +3713,63 @@ $1',
 'limitall' => 'همه',
 
 # E-mail address confirmation
-'confirmemail' => 'تأیید نشانی پست الکترونیکی',
-'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی پست الکترونیکی معتبری وارد نکرده‌اید.',
-'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار پست الکترونیکی خود، پیش از استفاده از خدمات پست الکترونیکی در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی پست الکترونیکی شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی پست الکترونیکی شما مسجل شود.',
-'confirmemail_pending' => 'یک کد تأییدی پیشتر برای شما به صورت الکترونیکی فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.',
+'confirmemail' => 'تأیید نشانی رایانامه',
+'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامه معتبری وارد نکرده‌اید.',
+'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار رایانامه خود، پیش از استفاده از خدمات رایانامه در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی رایانامهٔ شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی رایانامهٔ شما تایید شود.',
+'confirmemail_pending' => 'یک کد تأییدی پیشتر برای شما به صورت نامه فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.',
 'confirmemail_send' => 'پُست‌کردن یک کد تأیید',
-'confirmemail_sent' => 'نامهٔ الکترونیکی تأییدی فرستاده شد.',
-'confirmemail_oncreate' => 'یک کد تأییدی به نشانی پست الکترونیکی شما فرستاده شد.
-برای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به پست الکترونیکی در این ویکی به آن نیاز خواهید داشت.',
-'confirmemail_sendfailed' => 'فرستادن پست الکترونیکی تأییدی ممکن نشد.
-نشانی پست الکترونیکی را از نظر وجود نویسه‌های نامعتبر بررسی کنید.
+'confirmemail_sent' => 'یک نامهٔ تأییدی فرستاده شد.',
+'confirmemail_oncreate' => 'یک کد تأییدی به نشانی رایانامهٔ شما فرستاده شد.
+برای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به رایانامه در این ویکی به آن نیاز خواهید داشت.',
+'confirmemail_sendfailed' => 'فرستادن رایانامهٔ تأییدی ممکن نشد.
+نشانی رایانامه را از نظر وجود نویسه‌های نامعتبر بررسی کنید.
 
-پاسخ سامانه ارسال پست الکترونیکی: $1',
+پاسخ سامانه ارسال رایانامه: $1',
 'confirmemail_invalid' => 'کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.',
-'confirmemail_needlogin' => 'برای تأیید نشانی پست الکترونیکی‌تان نیاز به $1 دارید.',
-'confirmemail_success' => 'نشانی پست الکترونیکی شما تأیید شده‌است.
+'confirmemail_needlogin' => 'برای تأیید نشانی رایانامه‌تان نیاز به $1 دارید.',
+'confirmemail_success' => 'نشانی رایانامهٔ شما تأیید شده‌است.
 
-اینک می‌توانید [[Special:UserLogin|به سامانه وارد شوید]] و از ویکی لذت ببرید.',
-'confirmemail_loggedin' => 'نشانی پست الکترونیکی شما تأیید شد.',
+هم‌اینک می‌توانید [[Special:UserLogin|به سامانه وارد شوید]] و از ویکی لذت ببرید.',
+'confirmemail_loggedin' => 'نشانی رایانامهٔ شما تأیید شد.',
 'confirmemail_error' => 'هنگام ذخیرهٔ تأیید شما به مشکلی برخورده شد.',
-'confirmemail_subject' => 'تأیید نشانی پست الکترونیکی شما {{SITENAME}}',
-'confirmemail_body' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی پست الکترونیکی در {{SITENAME}} ایجاد کرده‌است.
+'confirmemail_subject' => 'تأیید نشانی رایانامهٔ شما {{SITENAME}}',
+'confirmemail_body' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی رایانامه در {{SITENAME}} ایجاد کرده‌است.
 
-برای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال‌سازی امکانات پست الکترونیک {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:
+برای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال‌سازی امکانات رایانامه {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:
 
 $3
 
 اگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را
-دنبال کنید تا تأیید نشانی پست الکترونیکی لغو شود:
+دنبال کنید تا تأیید نشانی رایانامه لغو شود:
 
 $5
 
 این کدِ تأیید در تاریخ $4 منقضی خواهد شد.
 </div>',
-'confirmemail_body_changed' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی پست الکترونیکی حساب «$2» در {{SITENAME}} را تغییر داده‌است.
+'confirmemail_body_changed' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی رایانامه حساب «$2» در {{SITENAME}} را تغییر داده‌است.
 
-برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی پست الکترونیک در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:
+برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:
 
 $3
 
-اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر پست الکترونیکی را لغو کنید:
+اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:
 
 $5
 
 این تأییدیه در $4 منقضی می‌گردد.',
-'confirmemail_body_set' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی پست الکترونیکی حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.
+'confirmemail_body_set' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی رایانامه حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.
 
-برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی پست الکترونیک در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:
+برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:
 
 $3
 
-اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر پست الکترونیکی را لغو کنید:
+اگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:
 
 $5
 
 این تأییدیه در $4 منقضی می‌گردد.',
-'confirmemail_invalidated' => 'تأیید نشانی پست الکترونیکی لغو شد',
-'invalidateemail' => 'لغو کردن تأیید نشانی پست الکترونیکی',
+'confirmemail_invalidated' => 'تأیید نشانی رایانامه لغو شد',
+'invalidateemail' => 'لغو کردن تأیید نشانی رایانامه',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[تراگنجانش بین‌ویکیانه فعال نیست]',
@@ -3960,6 +3959,9 @@ $5
 'version-software' => 'نسخهٔ نصب‌شده',
 'version-software-product' => 'محصول',
 'version-software-version' => 'نسخه',
+'version-entrypoints' => 'نشانی اینترنتی محل ورود',
+'version-entrypoints-header-entrypoint' => 'نقطه ورود',
+'version-entrypoints-header-url' => 'نشانی اینترنتی',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath مسیر مقاله]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath مسیر اسکریپت]',
 
@@ -4093,7 +4095,7 @@ $5
 'logentry-newusers-create' => '$1 یک حساب کاربری ایجاد کرد',
 'logentry-newusers-create2' => '$1 یک حساب کاربری ایجاد کرد $3',
 'logentry-newusers-autocreate' => 'حساب $1  به شکل خودکار ساخته شد',
-'newuserlog-byemail' => 'گذرواژه با پست الکترونیکی ارسال شد',
+'newuserlog-byemail' => 'گذرواژه بوسیله رایانامه ارسال شد',
 
 # Feedback
 'feedback-bugornote' => 'اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$2 $3]» افزوده خواهد شد.',
index aba7318..451d867 100644 (file)
@@ -977,7 +977,7 @@ Yritä uudelleen. Jos ongelma ei katoa, yritä [[Special:UserLogout|kirjautua ul
 'token_suffix_mismatch' => "'''Muokkauksesi on hylätty, koska asiakasohjelmasi ei osaa käsitellä välimerkkejä muokkaustarkisteessa. Syynä voi olla viallinen välityspalvelin.'''",
 'edit_form_incomplete' => "'''Osa muokkauslomakkeesta ei saavuttanut palvelinta. Tarkista, että muokkauksesi ovat vahingoittumattomia ja yritä uudelleen.'''",
 'editing' => 'Muokataan sivua $1',
-'creating' => 'Sivun $1 luonti',
+'creating' => 'Luodaan sivu $1',
 'editingsection' => 'Muokataan osiota sivusta $1',
 'editingcomment' => 'Muokataan uutta osiota sivulla $1',
 'editconflict' => 'Päällekkäinen muokkaus: $1',
@@ -1218,7 +1218,6 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men
 
 # Diffs
 'history-title' => 'Sivun $1 muutoshistoria',
-'difference' => 'Versioiden väliset erot',
 'difference-multipage' => '(Sivujen välinen eroavaisuus)',
 'lineno' => 'Rivi $1:',
 'compareselectedversions' => 'Vertaile valittuja versioita',
@@ -2225,7 +2224,7 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'watchnochange' => 'Valittuna ajanjaksona yhtäkään tarkkailemistasi sivuista ei muokattu.',
 'watchlist-details' => 'Tarkkailulistalla on {{PLURAL:$1|$1 sivu|$1 sivua}} keskustelusivuja mukaan laskematta.',
 'wlheader-enotif' => '* Sähköposti-ilmoitukset ovat käytössä.',
-'wlheader-showupdated' => "* Sivut, joita on muokattu viimeisen käyntisi jälkeen on '''lihavoitu'''.",
+'wlheader-showupdated' => "* Sivut, joita on muokattu viimeisen käyntisi jälkeen, on '''lihavoitu'''.",
 'watchmethod-recent' => 'tarkistetaan tuoreimpia muutoksia tarkkailluille sivuille',
 'watchmethod-list' => 'tarkistetaan tarkkailtujen sivujen tuoreimmat muutokset',
 'watchlistcontains' => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
@@ -2240,7 +2239,7 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'watcherrortext' => 'Sivun ”$1” tarkkailulista-asetusten muutoksissa tapahtui virhe.',
 
 'enotif_mailer' => '{{GRAMMAR:genitive|{{SITENAME}}}} sivu on muuttunut -ilmoitus',
-'enotif_reset' => 'Merkitse kaikki sivut katsotuiksi',
+'enotif_reset' => 'Merkitse kaikki sivut kerralla nähdyiksi',
 'enotif_newpagetext' => 'Tämä on uusi sivu.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-käyttäjä',
 'changed' => 'muuttanut sivua',
index 0e6080f..abaed26 100644 (file)
@@ -974,7 +974,6 @@ Hon kann ikki fjalast.',
 
 # Diffs
 'history-title' => 'Versjónssøgan hjá "$1"',
-'difference' => '(Munur millum endurskoðanir)',
 'difference-multipage' => '(Munur millum síður)',
 'lineno' => 'Linja $1:',
 'compareselectedversions' => 'Bera saman valdar útgávur',
index e9d6334..01bd5f4 100644 (file)
@@ -749,6 +749,8 @@ Le motif avancé est « ''$2'' ».",
 'filereadonlyerror' => 'Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
 
 L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
+'invalidtitle-knownnamespace' => 'Titre invalide avec l’espace de noms « $2 » et l’intitulé « $3 »',
+'invalidtitle-unknownnamespace' => 'Titre invalide avec le numéro d’espace de noms $1 et l’intitulé « $2 » inconnus',
 
 # Virus scanner
 'virus-badscanner' => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
@@ -1122,6 +1124,12 @@ Il devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu’il y en a maint
 'parser-template-loop-warning' => 'Modèle en boucle détecté : [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limite de profondeur des appels de modèles dépassée ($1)',
 'language-converter-depth-warning' => 'Limite de profondeur du convertisseur de langue dépassée ($1)',
+'node-count-exceeded-category' => 'Pages où nombre de nœuds est dépassé',
+'node-count-exceeded-warning' => 'Page dépassant le nombre de nœuds',
+'expansion-depth-exceeded-category' => "Pages où la profondeur d'expansion est dépassée",
+'expansion-depth-exceeded-warning' => "Page dépassant la profondeur d'expansion",
+'parser-unstrip-loop-warning' => 'Boucle non démontable détectée',
+'parser-unstrip-recursion-limit' => 'Limite de récursion non démontable dépassée ($1)',
 
 # "Undo" feature
 'undo-success' => 'Cette modification va être défaite. Veuillez vérifier les modifications ci-dessous, puis publier si c’est bien ce que vous voulez faire.',
@@ -1297,7 +1305,8 @@ Assurez-vous que cette opération conservera la continuité de l’historique de
 
 # Diffs
 'history-title' => 'Historique des versions de «&nbsp;$1&nbsp;»',
-'difference' => '(Différences entre les versions)',
+'difference-title' => 'Différence entre des versions de « $1 »',
+'difference-title-multipage' => 'Différence entre les pages « $1 » et « $2 »',
 'difference-multipage' => '(Différence entre les pages)',
 'lineno' => 'Ligne $1 :',
 'compareselectedversions' => 'Comparer les versions sélectionnées',
@@ -1329,7 +1338,7 @@ Assurez-vous que cette opération conservera la continuité de l’historique de
 'searchhelp-url' => 'Help:Accueil',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechercher les pages commençant par ce préfixe]]',
 'searchprofile-articles' => 'Pages de contenu',
-'searchprofile-project' => 'Pages d’aide et du projet',
+'searchprofile-project' => 'Pages d’aide et de projet',
 'searchprofile-images' => 'Multimédia',
 'searchprofile-everything' => 'Tout',
 'searchprofile-advanced' => 'Recherche avancée',
@@ -1924,13 +1933,14 @@ Pour une sécurité optimale, img_auth.php est désactivé.',
 
 # HTTP errors
 'http-invalid-url' => 'URL incorrecte : $1',
-'http-invalid-scheme' => 'Les URLs avec le schéma « $1 » ne sont pas supportées',
+'http-invalid-scheme' => 'Les URL avec le schéma « $1 » ne sont pas supportées.',
 'http-request-error' => 'Erreur inconnue lors de l’envoi de la requête.',
 'http-read-error' => 'Erreur de lecture HTTP.',
 'http-timed-out' => 'La requête HTTP a expiré.',
 'http-curl-error' => 'Erreur lors de la récupération de l’URL : $1',
 'http-host-unreachable' => 'Impossible d’atteindre l’URL.',
 'http-bad-status' => 'Il y a eu un problème lors de la requête HTTP : $1 $2',
+'http-truncated-body' => 'Le corps de la requête n’a été reçu que partiellement.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL injoignable',
@@ -3833,7 +3843,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' => "URLs de point d'entrée",
+'version-entrypoints' => 'URL de point 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]',
@@ -3883,7 +3893,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 # External image whitelist
 'external_image_whitelist' => ' #Laisser cette ligne exactement telle quelle.<pre>
 #Indiquer les fragments d’expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.
-#Ils correspondront avec les URLs des images externes.
+#Ils correspondront avec les URL des images externes.
 #Celles qui correspondent s’afficheront comme des images, sinon seul un lien vers l’image sera affiché.
 #Les lignes commençant par un # seront considérées comme des commentaires.
 #Cette liste n’est pas sensible à la casse.
index ed0053a..b9c8ad2 100644 (file)
@@ -1287,7 +1287,6 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo
 
 # Diffs
 'history-title' => 'Historico de les vèrsions de « $1 »',
-'difference' => '(Difèrences entre les vèrsions)',
 'difference-multipage' => '(Difèrences entre les pâges)',
 'lineno' => 'Legne $1 :',
 'compareselectedversions' => 'Comparar les vèrsions chouèsies',
index 4467afb..d6bbb17 100644 (file)
@@ -407,9 +407,8 @@ $2',
 'ns-specialprotected' => 'Spetsjåålside koone ai beårbed wårde.',
 'titleprotected' => 'En sid ma dideer noome koon ai önjläid wårde.
 Jü späre wörd döör [[User:$1|$1]] ma grün "$2" inruchted.',
-'filereadonlyerror' => "Det datei „$1“ koon ei feranert wurd, auer uun det fertiaknis „$2“ bluat leesen wurd koon.
-
-Di grünj as „''$3''“.",
+'filereadonlyerror' => 'Det datei „$1“ koon ei feranert wurd, auer uun det fertiaknis „$2“ bluas leesen wurd koon.
+Di grünj faan di administraator as: „$3“.',
 
 # Virus scanner
 'virus-badscanner' => "Hiinje konfigurasjoon: ünbekånde fiirusscanner: ''$1''",
@@ -695,7 +694,8 @@ For informasjoon füliet di leeste üttooch üt dåt benjüterspär-logbök:',
 'userinvalidcssjstitle' => "''Woorschauing:''' Skin \"\$1\"jeeft dåt ai. Betånk, dåt brükerspetsiifische .css- än .js-side ma en latj bökstääw önjfånge mönje, ålsü biispelswise ''{{ns:user}}:Münsterkjarl/vector.css'' önj stää foon ''{{ns:user}}:Münsterkjarl/Vector.css''.",
 'updated' => '(Änred)',
 'note' => "'''Påås aw:'''",
-'previewnote' => "'''Dåtheer as bloot en forlök, jü sid wörd nuch ai spikred!'''",
+'previewnote' => "'''Heer könst dü sä, hü det sidj wurd skal.'''
+Det sidj as oober noch ei seekert!",
 'previewconflict' => 'Dideer forbekiik jeeft di inhålt foon dåt boowerst takstfälj wider. Sü wårt jü sid ütsiinj, wan dü nü spiikerst.',
 'session_fail_preview' => "'''Din werk küd ei ufseekert wurd, diar as wat skiaf gingen.'''
 Fersjük det man noch ans an trak do üüb ''Sid spiikre''.
@@ -926,7 +926,7 @@ Dü heest deeraw nåån tugraawe.',
 # Suppression log
 'suppressionlog' => 'Oversight-logbök',
 'suppressionlogtext' => 'Detheer as det logbuk faan oversighter aktsjuunen.
-Luke bi [[Special:BlockList|List faan speret IP-adresen an brükernöömer]] för aktuel informatsjuunen.',
+Luke bi [[Special:BlockList|List faan speret IP-adresen an brükernöömer]] för aktuel sperangen.',
 
 # History merging
 'mergehistory' => 'Fersjoonshistoorie feriine',
@@ -961,7 +961,6 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 
 # Diffs
 'history-title' => 'Färsjoonshistoori foon "$1"',
-'difference' => '(Ferschääl twasche Färsjoone)',
 'difference-multipage' => '(Ferschääl twasche side)',
 'lineno' => 'Ra $1:',
 'compareselectedversions' => 'Wäälde färsjoone ferglike',
index b35d8dc..2729d38 100644 (file)
@@ -646,7 +646,6 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve
 
 # Diffs
 'history-title' => 'Storic dai cambiaments di "$1"',
-'difference' => '(Difarence jenfri des revisions)',
 'lineno' => 'Rie $1:',
 'compareselectedversions' => 'Confronte versions selezionadis',
 'editundo' => 'anule',
index bf97e2c..c09e27e 100644 (file)
@@ -897,7 +897,6 @@ Tink derom it brûken fan de navigaasjeferwizings dy kolom op'e nij ynstelt.",
 
 # Diffs
 'history-title' => 'Sideskiednis fan "$1"',
-'difference' => '(Ferskil tusken ferzjes)',
 'lineno' => 'Rigel $1:',
 'compareselectedversions' => 'Ferlykje selektearre ferzjes',
 'showhideselectedversions' => 'Oantikke ferzjes wol/net sjen litte',
index 43269f3..539bdb0 100644 (file)
@@ -758,7 +758,6 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 
 # Diffs
 'history-title' => 'Stair leasú "$1"',
-'difference' => '(Difríochtaí idir leaganacha)',
 'lineno' => 'Líne $1:',
 'compareselectedversions' => 'Cuir na leagain roghnaithe i gcomparáid',
 'editundo' => 'cealaigh',
index 5b0aac5..fd490b0 100644 (file)
@@ -310,7 +310,7 @@ $messages = array(
 
 'ok' => 'TAMAN',
 'retrievedfrom' => 'Alındı "$1"dän',
-'youhavenewmessages' => 'Var eni <u>$1</u>. ($2)',
+'youhavenewmessages' => 'Var eni $1 ($2).',
 'newmessageslink' => 'eni mesajlar',
 'newmessagesdifflink' => 'Bitki diişmäk',
 'youhavenewmessagesmulti' => "$1'de eni mesajınız var.",
@@ -498,11 +498,11 @@ Bu başlıı [[Special:Search/{{PAGENAME}}|var nicä aramaa]] übür sayfalarda
 'yourtext' => 'Sizin tekstiniz',
 'storedversion' => 'Saklanmış tekst',
 'yourdiff' => 'Farklar',
-'copyrightwarning' => "'''Bakınız:''' {{SITENAME}} saytına yapılan hepsi eklemäkler hem diişmäkler läazım olsun  <i>$2</i>
+'copyrightwarning' => "'''Bakınız:''' {{SITENAME}} saytına yapılan hepsi eklemäkler hem diişmäkler läazım olsun $2
 lițenziyası şartları içindä (detallar için $1'a bakınız).
 Herliim istemeersiniz ani sizin tekstlär serbest yayılsın hem diiştirilsin übür kullanıcılar tarafınnan, onnarı erleştirmeyniz buraya.<br />
 Hem siz garantiyada bulunêrsiniz ani eklemäklerin avtorusunuz, yaki onnarı kopiya ettiniz kaynaktan angısı izin verer teksti serbest yaymaa hem diiştirmää.<br />
-'''<center>AVTORLUK KORUNMAK HAKKILAN KORUNMAYAN MATERİALLAR EKLEMEYNİZ!</center>'''",
+'''AVTORLUK KORUNMAK HAKKILAN KORUNMAYAN MATERİALLAR EKLEMEYNİZ!'''",
 'templatesused' => 'Bu sayfada kullanılan {{PLURAL:$1|şablon|şablonlar}}:',
 'templatesusedpreview' => '{{PLURAL:$1|Şablon|Şablonnar}} ani bu ön siirdä kullanıldı:',
 'templatesusedsection' => 'Bu bölümde kullanılan {{PLURAL:$1|şablon|şablonlar}}:',
@@ -564,7 +564,6 @@ Nışannar: (bitki) = şindiki versiyalan aradaki fark,
 
 # Diffs
 'history-title' => '"$1" yapraın istoriyası',
-'difference' => '(Versiyalar arası farklar)',
 'lineno' => '$1. liniya:',
 'compareselectedversions' => 'Karşılaştır versiyaları ani seçildi',
 'editundo' => 'geeri al',
index a30eff2..f497826 100644 (file)
@@ -724,7 +724,6 @@ $2',
 
 # Diffs
 'history-title' => '历史版本𠮶 "$1"',
-'difference' => '(修改之间差异)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比较拣正𠮶版本',
 'editundo' => '还原',
index 241d7a2..dbceb31 100644 (file)
@@ -747,7 +747,6 @@ $2',
 
 # Diffs
 'history-title' => '歷史版本嗰 "$1"',
-'difference' => '(修改之間差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '對比揀正嗰版本',
 'editundo' => '還原',
index 4253e5a..c21e829 100644 (file)
@@ -678,7 +678,6 @@ Mìneachadh: '''({{int:cur}})''' = an diofar eadar e 's am mùthadh as ùire, ''
 
 # Diffs
 'history-title' => 'Eachdraidh nam mùthaidhean de "$1"',
-'difference' => '(An diofar eadar na mùthaidhean)',
 'lineno' => 'Loidhne $1:',
 'compareselectedversions' => 'Dèan coimeas eadar na mùthaidhean a thagh thu',
 'editundo' => 'neo-dhèan',
index 6a184c9..b5acea6 100644 (file)
@@ -612,6 +612,8 @@ O motivo achegado é ''$2''.",
 'filereadonlyerror' => 'Non se puido modificar o ficheiro "$1" porque o repositorio "$2" está en modo de só lectura.
 
 O administrador que bloqueou o repositorio achegou este motivo: "$3".',
+'invalidtitle-knownnamespace' => 'Título inválido co espazo de nomes "$2" e o texto "$3"',
+'invalidtitle-unknownnamespace' => 'Título inválido cun número de espazo de nomes, $1, descoñecido e o texto "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Configuración errónea: escáner de virus descoñecido: ''$1''",
@@ -1013,6 +1015,10 @@ Estes argumentos foron omitidos.",
 'parser-template-loop-warning' => 'Detectouse un modelo en bucle: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Excedeuse o límite da profundidade do recurso do modelo ($1)',
 'language-converter-depth-warning' => 'Excedeuse o límite de profundidade do convertedor de lingua ($1)',
+'node-count-exceeded-category' => 'Páxinas nas que se supera o número de nodos',
+'node-count-exceeded-warning' => 'Páxina que supera o número de nodos',
+'expansion-depth-exceeded-category' => 'Páxinas nas que se supera a profundidade de expansión',
+'expansion-depth-exceeded-warning' => 'Páxina que supera a profundidade de expansión',
 
 # "Undo" feature
 'undo-success' => 'A edición pódese desfacer.
@@ -1190,7 +1196,6 @@ Asegúrese de que esta modificación da páxina mantén a continuidade históric
 
 # Diffs
 'history-title' => 'Historial de revisións de "$1"',
-'difference' => '(Diferenzas entre revisións)',
 'difference-multipage' => '(Diferenzas entre páxinas)',
 'lineno' => 'Liña $1:',
 'compareselectedversions' => 'Comparar as versións seleccionadas',
@@ -1831,6 +1836,7 @@ Para unha seguridade óptima, img_auth.php está desactivado.',
 'http-curl-error' => 'Ocorreu un erro ao acceder ao URL: $1',
 'http-host-unreachable' => 'Non se puido acceder ao URL.',
 'http-bad-status' => 'Houbo un problema durante a solicitude HTTP: $1 $2',
+'http-truncated-body' => 'O corpo de solicitude recibiuse parcialmente.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Non se logrou acceder a ese URL',
@@ -1927,7 +1933,7 @@ Poida que queira editar a descrición da [$2 páxina de descrición do ficheiro]
 'filedelete-otherreason' => 'Outro motivo:',
 'filedelete-reason-otherlist' => 'Outro motivo',
 'filedelete-reason-dropdown' => '*Motivos frecuentes para borrar
-** Violación dos dereitos de autor
+** Violación dos dereitos de autoría
 ** Ficheiro duplicado',
 'filedelete-edit-reasonlist' => 'Editar os motivos de borrado',
 'filedelete-maintenance' => 'Os borrados e restauracións de ficheiros están desactivados temporalmente durante o mantemento.',
@@ -2315,8 +2321,8 @@ No $2 pode ver unha lista cos borrados máis recentes.',
 'deleteotherreason' => 'Outro motivo:',
 'deletereasonotherlist' => 'Outro motivo',
 'deletereason-dropdown' => '*Motivos frecuentes para borrar
-** Solicitado polo autor
-** Violación dos dereitos de autor
+** Solicitado pola persoa que o creou
+** Violación dos dereitos de autoría
 ** Vandalismo',
 'delete-edit-reasonlist' => 'Editar os motivos de borrado',
 'delete-toobig' => 'Esta páxina conta cun historial longo, de máis {{PLURAL:$1|dunha revisión|de $1 revisións}}.
@@ -3724,6 +3730,8 @@ Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza públic
 'version-entrypoints' => 'Enderezos URL de punto de entrada',
 'version-entrypoints-header-entrypoint' => 'Punto de entrada',
 'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Ruta do artigo]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Ruta da escritura]',
 
 # Special:FilePath
 'filepath' => 'Ruta do ficheiro',
index 712238d..f0467fc 100644 (file)
@@ -776,7 +776,6 @@ $1",
 
 # Diffs
 'history-title' => 'Αἱ πρότεραι ἐκδόσεις τῆς δέλτου "$1"',
-'difference' => '(Τὰ μεταβεβλημένα)',
 'difference-multipage' => '(Διαφορὰ μεταξὺ δέλτων)',
 'lineno' => 'Γραμμή $1:',
 'compareselectedversions' => 'Συγκρίνειν τὰς ἐπειλεγμένας δέλτους',
index 194b9c6..557e56a 100644 (file)
@@ -1059,7 +1059,6 @@ Stell sicher, ass d Versionsgschicht vun eme Artikel historisch korrekt isch.',
 
 # Diffs
 'history-title' => 'Versionsgschicht vo „$1“',
-'difference' => '(Unterschide zwüsche Versione)',
 'difference-multipage' => '(Unterschid zwische Syte)',
 'lineno' => 'Zyle $1:',
 'compareselectedversions' => 'Usgwählti Versione verglyche',
index 445fcb1..4f74012 100644 (file)
@@ -312,9 +312,9 @@ $messages = array(
 'vector-simplesearch-preference' => 'શોધ સંબંધી વિશિષ્ઠ સુઝાવના પર્યાયને સક્રીય  કરો (Vector skin only)',
 'vector-view-create' => 'બનાવો',
 'vector-view-edit' => 'ફેરફાર કરો',
-'vector-view-history' => 'àª\88તિહાસ જુઓ',
+'vector-view-history' => 'àª\87તિહાસ જુઓ',
 'vector-view-view' => 'વાંચો',
-'vector-view-viewsource' => 'સà«\8dતà«\8dરà«\8bત àª\9cà«\81àª\93',
+'vector-view-viewsource' => 'સ્રોત જુઓ',
 'actions' => 'ક્રિયાઓ',
 'namespaces' => 'નામાવકાશો',
 'variants' => 'ભિન્ન રૂપો',
@@ -523,13 +523,13 @@ $1',
 'wrong_wfQuery_params' => 'wfQuery() માટે અયોગ્ય વિકલ્પો<br />
 Function: $1<br />
 Query: $2',
-'viewsource' => 'સà«\8dતà«\8dરà«\8bત àª\9cà«\81àª\93',
-'viewsource-title' => '$1 àª®àª¾àª\9fà«\87 àª¸à«\8dતà«\8dરà«\8bત àª\9cà«\81વàª\91',
+'viewsource' => 'સ્રોત જુઓ',
+'viewsource-title' => '$1 àª®àª¾àª\9fà«\87 àª¸à«\8dરà«\8bત àª\9cà«\81àª\93',
 'actionthrottled' => 'અકાળે અટાકાવી દીધેલી ક્રિયા',
 'actionthrottledtext' => 'સ્પામ નિયંત્રણ તકેદારી રૂપે આ ક્રિયા અમુક મર્યાદામાં જ કરી શકો છો, અને તમે તે મર્યાદા વટાવી દીધી છે. કૃપા કરી થોડાક સમય પછી ફરી પ્રયત્ન કરો.',
 'protectedpagetext' => 'ફેરફારો થતાં રોકવા માટે આ પાનું સુરક્ષિત કરવામાં આવ્યું છે.',
-'viewsourcetext' => 'àª\86પ àª\86 àªªàª¾àª¨àª¾àª¨à«\8b àª®à«\82ળ àª¸à«\8dતà«\8dરà«\8bત àª¨àª¿àª¹àª¾àª³à«\80 àª¶àª\95à«\8b àª\9bà«\8b àª\85નà«\87 àª¤à«\87નà«\80 àª¨àª\95લ (copy) àªªàª£ àª\95રà«\80 àª¶àª\95à«\8b àª\9bà«\8b:',
-'viewyourtext' => "તમà«\87 àª\9cà«\8bવા àª\85નà«\87''સà«\8dતà«\8dરà«\8bત àª¨àª\95લ àª\95રà«\80 àª¶àª\95à«\8b àª\9bà«\8b  àªªàª° àª¤àª®àª¾àª°àª¾ àª¸àª\82પાદનà«\8b'''àª\86 àªªàª¾àª¨àª¾àª\82 àª¨àª\86",
+'viewsourcetext' => 'આપ આ પાનાનો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:',
+'viewyourtext' => "àª\86પ àª\86 àªªàª¾àª¨àª¾àª¨àª¾àª\82 '''àª\86પનાàª\82 àª¸àª\82પાદનà«\8b'''નà«\8b àª®à«\82ળ àª¸à«\8dરà«\8bત àª¨àª¿àª¹àª¾àª³à«\80 àª¶àª\95à«\8b àª\9bà«\8b àª\85નà«\87 àª¤à«\87નà«\80 àª¨àª\95લ (copy) àªªàª£ àª\95રà«\80 àª¶àª\95à«\8b àª\9bà«\8b:",
 'protectedinterface' => 'આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.',
 'editinginterface' => "'''ચેતવણી:''' તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.
 અહીંનો બદલાવ બીજા સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.
@@ -1088,10 +1088,10 @@ $1",
 
 # History merging
 'mergehistory' => 'પાનાનાં ઇતિહાસોનું વિલીનીકરણ',
-'mergehistory-header' => 'àª\86 àªªàª¾àª¨à«\81àª\82 àª¤àª®àª¨à«\87 àª¸à«\8dતà«\8dરà«\8bત àªªàª¾àª¨àª¾àª¨à«\8b àª\88તિહાસ àª¨àªµàª¾ àªªàª¾àª¨àª¾àª®àª¾àª\82 àªµàª¿àª²àª¿àª¨ àª\95રવા àª®àª¾àª\82 àª®àª¦àª¦ àª\95રà«\87 àª\9bà«\87.
+'mergehistory-header' => 'આ પાનું તમને સ્રોત પાનાનો ઈતિહાસ નવા પાનામાં વિલિન કરવા માં મદદ કરે છે.
 એ વાતનું ધ્યાન રાખશો કે ઇતિહાસ પાનાની સળંગતા જળવાઇ રહે.',
 'mergehistory-box' => 'બે પાનાના ફેરફાર વિલિન કરો',
-'mergehistory-from' => 'સà«\8dતà«\8dરà«\8bત àªªàª¾àª¨à«\81àª\82',
+'mergehistory-from' => 'સ્રોત પાનું',
 'mergehistory-into' => 'લક્ષ્ય પાનું',
 'mergehistory-list' => 'વિલિનીકરણશીલ ફેરફારનો ઈતિહાસ',
 'mergehistory-merge' => '[[:$1]] દ્વારા કરેલ ફેરફારો [[:$2]] માંવિલિન કરી શકાયા.
@@ -1102,13 +1102,13 @@ $1",
 'mergehistory-empty' => 'પુનરાવર્તન સાચવી ન શકાયા',
 'mergehistory-success' => '[[:$1]] ના $3 {{PLURAL:$3|ફેરફાર |ફેરફારો}} ને સફળતા પૂર્વક  [[:$2]] માં વિલિનાકરાયા.',
 'mergehistory-fail' => 'ઇતિહાસ પાના વિલિન ન કરી શકાયા, પાના અને સમય સંબંધી વિકલ્પો ચકાસો.',
-'mergehistory-no-source' => 'સà«\8dતà«\8dરà«\8bત àªªàª¾àª¨à«\81àª\82 $1 àª\89પલબà«\8dધ àª¨àª¥à«\80.',
+'mergehistory-no-source' => 'સ્રોત પાનું $1 ઉપલબ્ધ નથી.',
 'mergehistory-no-destination' => 'લક્ષ્ય પાનું $1 અસ્તિત્વમાં નથી',
-'mergehistory-invalid-source' => 'સà«\8dતà«\8dરà«\8bત àªªàª¾àª¨à«\81àª\82 àªµà«\88ધ àª¶à«\80રà«\8dષàª\95 àª¹à«\8bવà«\81àª\82 àª\9c àª\9cà«\8bàª\88àª\8f',
+'mergehistory-invalid-source' => 'સà«\8dરà«\8bત àªªàª¾àª¨à«\81àª\82 àªµà«\88ધ àª¶à«\80રà«\8dષàª\95 àª¹à«\8bવà«\81àª\82 àª\9c àª\9cà«\8bàª\88àª\8f.',
 'mergehistory-invalid-destination' => 'લક્ષ્ય પાનું એક  વૈધ શીર્ષક હોવું જોઇએ',
 'mergehistory-autocomment' => ' [[:$1]] ને [[:$2]] માં વિલિન કર્યું',
 'mergehistory-comment' => '[[:$1]] ને [[:$2]]: $3  માં વિલિન કર્યું',
-'mergehistory-same-destination' => 'સà«\8dતà«\8dરà«\8bત àª\85નà«\87 àª²àª\95à«\8dષà«\8dય àªªàª¾àª¨àª¾ àª\8fàª\95ાસમાન ના હોઈ શકે',
+'mergehistory-same-destination' => 'સà«\8dરà«\8bત àª\85નà«\87 àª²àª\95à«\8dષà«\8dય àªªàª¾àª¨àª¾ àª\8fàª\95 સમાન ના હોઈ શકે',
 'mergehistory-reason' => 'કારણ:',
 
 # Merge log
@@ -1119,7 +1119,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1"ના ફેરફારોનો ઇતિહાસ',
-'difference' => '(પુનરાવર્તનો વચ્ચેનો તફાવત)',
 'difference-multipage' => '(પાનાઓ વચ્ચેનો ફેરફાર)',
 'lineno' => 'લીટી $1:',
 'compareselectedversions' => 'પસંદ કરેલા સરખાવો',
@@ -1383,7 +1382,7 @@ HTML નાકું ચકાસો',
 'right-move-subpages' => 'પાનાઓને તેમના ઉપ પાના સાથે ખસેડો.',
 'right-move-rootuserpages' => 'મૂળ સભ્ય પાના હટાવો',
 'right-movefile' => 'ફાઈલો હટાવો',
-'right-suppressredirect' => 'પાના àª¹àª\9fાવતà«\80 àªµàª\96તના àª¸àª®àª¯à«\87 àª¸à«\8dતà«\8dરà«\8bત àªªàª¾àª¨àª¾àª®àª¾àª\82થà«\80 àª¦àª¿àª¶àª¾ àª¨àª¿àª°à«\8dદà«\87શ àªµàª°à«\8dàª\9cà«\80ત',
+'right-suppressredirect' => 'પાના હટાવતી વખતના સમયે સ્રોત પાનામાંથી દિશા નિર્દેશ વર્જીત',
 'right-upload' => 'ફાઇલ ચડાવો',
 'right-reupload' => 'વિહરમાન ફાઇલ પર પુનર્લેખન કરો',
 'right-reupload-own' => 'સભ્ય દ્વારા જાતે ચઢાવેલી તાઇલ પર પુનર્લેખન કરો',
@@ -1554,7 +1553,7 @@ HTML નાકું ચકાસો',
 'fileuploadsummary' => 'સારાંશ:',
 'filereuploadsummary' => 'ફાઈલ ફેરફારો',
 'filestatus' => 'પ્રકાશનાધિકાર સ્થિતિ',
-'filesource' => 'સà«\8dતà«\8dરà«\8bત:',
+'filesource' => 'સ્રોત:',
 'uploadedfiles' => 'ફાઇલ ચડાવો',
 'ignorewarning' => 'ચેતવણીને અવગણી ને પણ ફાઇલ સાચવો',
 'ignorewarnings' => 'કોઇ પણ ચેતવણી અવગણો',
@@ -1630,9 +1629,9 @@ HTML નાકું ચકાસો',
 વિવરણ : $1',
 'uploadjava' => 'આ ફાઇલ એ ZIP ફાઈલ છે જે Java .class ધરાવે છે.
 Java ફાઇલ ચડાવવાની પરવાનગી નથી, કેમકે તેઓ સુરક્ષા તપાસને અવગણી નાખવાની ક્ષમતા ધરાવે છે.',
-'upload-source' => 'સà«\8dતà«\8dરà«\8bત àª«àª¾àª\87લ',
-'sourcefilename' => 'સà«\8dતà«\8dરà«\8bત àª«àª¾àª\87લ àª¨àª¾àª®',
-'sourceurl' => 'સà«\8dતà«\8dરà«\8bત  URL:',
+'upload-source' => 'સ્રોત ફાઇલ',
+'sourcefilename' => 'સà«\8dરà«\8bત àª«àª¾àª\87લ àª¨àª¾àª®:',
+'sourceurl' => 'સ્રોત  URL:',
 'destfilename' => 'લક્ષ્ય ફાઇલ નામ',
 'upload-maxfilesize' => 'મહત્તમ ફાઈલ કદ : $1',
 'upload-description' => 'ફાઇલ માહિતી',
@@ -1987,12 +1986,12 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'querypage-disabled' => 'કાર્યક્ષમતાના કારણે આ ખાસ પાનું નિષ્ક્રિ કરાયું છે.',
 
 # Book sources
-'booksources' => 'પà«\81સà«\8dતàª\95 àª¸à«\8dતà«\8dરà«\8bત',
-'booksources-search-legend' => 'પà«\81સà«\8dતàª\95 àª¸à«\8dતà«\8dરà«\8bત àª¶à«\8bધà«\8b',
+'booksources' => 'પુસ્તક સ્રોત',
+'booksources-search-legend' => 'પુસ્તક સ્રોત શોધો',
 'booksources-isbn' => 'આઇએસબીએન:',
 'booksources-go' => 'જાઓ',
 'booksources-text' => 'નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.',
-'booksources-invalid-isbn' => 'આપેલ ISBN વૈધ નથી લાગતો. મૂળ સ્ત્રોત થે ચકાસીને ભૂલ શોધી ખરી માહિતી આપો.',
+'booksources-invalid-isbn' => 'આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.',
 
 # Special:Log
 'specialloguserlabel' => 'અભિનય:',
@@ -2661,7 +2660,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 શું તમે આને હટાવીને સ્થળાંતર કરવાનો માર્ગ મોકળો કરવા માંગો છો?',
 'delete_and_move_confirm' => 'હા, આ પાનું હટાવો',
 'delete_and_move_reason' => 'હટાવવાનું કામ આગળ વધાવવા ભૂંસી દેવાયુ "[[$1]]"',
-'selfmove' => 'સà«\8dતà«\8dરà«\8bત àª¨à«\87 àª²àª\95à«\8dષà«\8dય àª¶à«\80રà«\8dષàª\95à«\8b àª¸àª®àª¾àª¨ àª\9bà«\87.
+'selfmove' => 'સà«\8dરà«\8bત àª¨à«\87 àª²àª\95à«\8dષà«\8dય àª¶à«\80રà«\8dષàª\95à«\8b àª¸àª®àª¾àª¨ àª\9bà«\87;
 પાના ને તેવા જ નામ ધરાવતા પાના પર પુનઃ સ્થાપન નહીં કરી શકાય.',
 'immobile-source-namespace' => '"$1" નામાસ્થળમાં પાના ન ખસેડી શાકાયા',
 'immobile-target-namespace' => '"$1" નામાસ્થળમાં પાના ન ખસેડી શાકાયા',
@@ -2742,27 +2741,27 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'import-interwiki-text' => 'આયાત કરવાના વિકિ અને પાનાનું શીર્ષક પસંદ કરો.
 ફેરફરની તારીખ અને લેખકો વિષે ની માહિતી સચવાશે.
 આંતર વિકિ આયાત આદિ [[Special:Log/import|import log]] માં અંકિત થાય છે.',
-'import-interwiki-source' => 'સà«\8dતà«\8dરà«\8bત àªµàª¿àª\95િ/પાનà«\81àª\82',
+'import-interwiki-source' => 'સà«\8dરà«\8bત àªµàª¿àª\95િ/પાનà«\81àª\82:',
 'import-interwiki-history' => 'આ પાના બધા ઐતિહાસીક ફેરફારોની નકલ કરો',
 'import-interwiki-templates' => 'બધા ઢાંચા શામિલ કરો',
 'import-interwiki-submit' => 'આયાત કરો',
 'import-interwiki-namespace' => 'લક્ષ્ય નામ સ્થળ',
 'import-upload-filename' => 'ફાઇલ નામ',
 'import-comment' => 'ટિપ્પણી:',
-'importtext' => 'àª\95à«\83પયા [[Special:Export|export utility]] àªµàª¾àªªàª°à«\80 àªµàª¿àª\95િ àª¸à«\8dતà«\8dરà«\8bત àªªàª°àª¥à«\80 àª«àª¾àª\87લ àª¨àª¿àª\95ાસ àª\95રà«\8b.
-તà«\87નà«\87 àª¤àª®àª¾àª°àª¾ àª¸àª\82àª\97ણàª\95 પર સાચવો અને અહીં ચડાવો.',
+'importtext' => 'કૃપયા [[Special:Export|export utility]] વાપરી વિકિ સ્રોત પરથી ફાઇલ નિકાસ કરો.
+તà«\87નà«\87 àª¤àª®àª¾àª°àª¾ àª\95à«\89મà«\8dપà«\8dયà«\81àª\9fર પર સાચવો અને અહીં ચડાવો.',
 'importstart' => 'આયાત કામ જારી છે....',
 'import-revision-count' => '$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}',
 'importnopages' => 'આયાત કરવા માટે કોઇ પાનું નથી!',
 'imported-log-entries' => 'આયાતી $1 {{PLURAL:$1|log entry|log entries}}.',
 'importfailed' => 'આયાત નિષ્ફળ: <nowiki>$1</nowiki>',
-'importunknownsource' => 'àª\85àª\9cà«\8dàª\9eાત àª\86યાતà«\80 àª¸à«\8dતà«\8dરà«\8bત àªªà«\8dરàª\95ાર',
+'importunknownsource' => 'અજ્ઞાત આયાતી સ્રોત પ્રકાર',
 'importcantopen' => 'આયાતી ફાઈલ નાખોલી શકાઈ',
 'importbadinterwiki' => 'ખરાબ આંતરીકા વિકિ કડી',
 'importnotext' => 'ખાલી કે શબ્દ વિહીન',
 'importsuccess' => 'આયાત સંપૂર્ણ',
 'importhistoryconflict' => 'એક બીજાથી વિસંગત ફેરફારો અસ્તિત્વ ધરાવે છે ( કદાક આ પાનું પહેલાં આયાત કરાયું હોય)',
-'importnosources' => 'àª\95à«\8bàª\87 àªªàª£ àª\86àª\82તર àªµàª¿àª\95િ àª¸à«\8dતà«\8dરà«\8bત àª\9cણાવાયા àª¨àª¥à«\80 àª\85નà«\87 àª¸à«\80ધા àª\87તિહાસ àª«àª¾àª\87લ àª\9aડાવવા àªªàª° àª°à«\8bàª\95 àª²àª¾àª\97à«\87લà«\80 àª\9bà«\87.',
+'importnosources' => 'કોઇ પણ આંતર વિકિ સ્રોત જણાવાયા નથી અને સીધા ઇતિહાસ ફાઇલ ચડાવવા પર રોક લાગેલી છે.',
 'importnofile' => 'કોઇ પણ આયાતી ફાઇલ ન ચડાવી શકાઇ',
 'importuploaderrorsize' => 'આયાતી ફાઇલ ચડાવવાનું અસફળ
 મંજૂર કદ કરતા આ ફાઈલાનું કદ મોટું છે.',
@@ -2817,7 +2816,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'tooltip-ca-talk' => 'અનુક્રમણિકાનાં પાના વિષે ચર્ચા',
 'tooltip-ca-edit' => "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
 'tooltip-ca-addsection' => 'ચર્ચાનો નવો મુદ્દો ઉમેરો.',
-'tooltip-ca-viewsource' => 'àª\86 àªªàª¾àª¨à«\81 àª¸àª\82રàª\95à«\8dષિત àª\9bà«\87, àª¤àª®à«\87 àª¤à«\87નà«\8b àª¸à«\8dતà«\8dરà«\8bત àª\9cà«\8bàª\87 àª¶àª\95à«\8b àª\9bà«\8b',
+'tooltip-ca-viewsource' => 'આ પાનુ સંરક્ષિત છે, તમે તેનો સ્રોત જોઇ શકો છો',
 'tooltip-ca-history' => 'આ પાનાનાં અગાઉનાં ફેરફારો',
 'tooltip-ca-protect' => 'આ પાનું સુરક્ષિત કરો',
 'tooltip-ca-unprotect' => 'આ પાનું રક્ષણ બદલો',
@@ -3064,7 +3063,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-maxaperturevalue' => 'મહત્તમ ભૂમિ છીદ્ર',
 'exif-subjectdistance' => 'વસ્તુનું અંતર',
 'exif-meteringmode' => 'મીટરીંગ ઢબ',
-'exif-lightsource' => 'પ્રકાશા સ્ત્રોત',
+'exif-lightsource' => 'પ્રકાશ સ્રોત',
 'exif-flash' => 'જબકારો (ફ્લેશ)',
 'exif-focallength' => 'કાંચનું કેન્દ્રીય લંબાઇ (ફોકલ લેંથ)',
 'exif-subjectarea' => 'વિષ્યવસ્તુ  ક્ષેત્ર',
@@ -3075,7 +3074,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-subjectlocation' => 'વસ્તુનું સ્થાન',
 'exif-exposureindex' => 'પ્રકાશાગમ અનુક્ર્મ',
 'exif-sensingmethod' => 'સંવેદનાની રીત',
-'exif-filesource' => 'ફાàª\87લ àª¸à«\8dતà«\8dરà«\8bત',
+'exif-filesource' => 'ફાઇલ સ્રોત',
 'exif-scenetype' => 'દ્રશ્ય પ્રકાર',
 'exif-customrendered' => 'સ્થાનીય ચિત્ર પ્રક્રિયા',
 'exif-exposuremode' => 'પ્રકાશાગમ પ્રકાર',
@@ -3138,8 +3137,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-objectname' => 'લઘુ શીર્ષક',
 'exif-specialinstructions' => 'ખાસ સૂચનાઓ',
 'exif-headline' => 'મથાળું',
-'exif-credit' => 'àª\8bણ àª¸à«\8dવà«\80àª\95ાર/સà«\8dતà«\8dરà«\8bત',
-'exif-source' => 'સà«\8dતà«\8dરà«\8bત',
+'exif-credit' => 'ઋણ સ્વીકાર/સ્રોત',
+'exif-source' => 'સ્રોત',
 'exif-editstatus' => 'ચિત્ર સંપાદનની સ્થિતી',
 'exif-urgency' => 'તાત્કાલિકતા',
 'exif-fixtureidentifier' => 'સાધન નામ',
@@ -3250,7 +3249,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-lightsource-18' => 'પ્રમાણભૂત પ્રકાશ B',
 'exif-lightsource-19' => 'પ્રમાણભૂત પ્રકાશ C',
 'exif-lightsource-24' => 'ISO સ્ટુડીયો ટંગસ્ટન',
-'exif-lightsource-255' => 'પà«\8dરàª\95ાશના àª\85નà«\8dય àª¸à«\8dત્રોત',
+'exif-lightsource-255' => 'àª\85નà«\8dય àªªà«\8dરàª\95ાશ àª¸્રોત',
 
 # Flash modes
 'exif-flash-fired-0' => 'પ્રકાશ ઝબકારો ન થયો',
@@ -3367,7 +3366,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-dc-publisher' => 'પ્રકાશક',
 'exif-dc-relation' => 'સંબધિત માધ્યમ',
 'exif-dc-rights' => 'હક્કો',
-'exif-dc-source' => 'સà«\8dતà«\8dરà«\8bત àª®àª¾àª§à«\8dયમ',
+'exif-dc-source' => 'સ્રોત માધ્યમ',
 'exif-dc-type' => 'માધ્યમનો પ્રકાર',
 
 'exif-rating-rejected' => 'નામંજૂર',
@@ -3726,8 +3725,8 @@ $5
 'newuserlog-byemail' => 'ગુપ્ત સંજ્ઞા ઇ-મેલ દ્વારા મોકલાઇ છે.',
 
 # Feedback
-'feedback-bugornote' => 'àª\9cà«\8b àª¤àª®àª¨à«\87 àª¤àª\95નà«\80àª\95à«\80 àªªà«\8dરà«\8bબà«\8dલà«\87મનà«\87 àªµàª°à«\8dણન àª\95રવા àª®àª¾àª\82àª\97તા àª¹à«\8bય àª¤à«\8b  [$1 report a bug] એ બગ અહીં નોંધાવો.
-àª\85નà«\8dયથા, àª¤àª®à«\87 àª¨à«\87àª\9aà«\87 àª\86પà«\87લ àª¸àª°àª³ àª«à«\8bરà«\8dમ àªµàª¾àª\82àª\9aà«\80 àª¶àª\95à«\8b àª\9bà«\8b. àª¤àª®àª¾àª°à«\80 àª\9fિપà«\8dપણà«\80 "[$3 $2]" àªªàª¾àª¨àª¾ àª\95રવા àª®àª¾àª\9fà«\87, àª¤àª®àª¾àª°àª¾ àª¸àª­à«\8dય àª¨àª¾àª® àª\85નà«\87 àª¬à«\8dરાàª\89àª\9dર àªªà«\8dરàª\95ાર àªµàª¾àªªàª«à«\8b àª\9bà«\8b àª¤à«\87નà«\80 àª®àª¾àª¹àª¿àª¤à«\80 àª\86પà«\8b.',
+'feedback-bugornote' => 'àª\9cà«\8b àª¤àª®à«\87 àª¤àª\95નà«\80àª\95à«\80 àª¸àª®àª¸à«\8dયા àªµàª°à«\8dણવવા àª®àª¾àª\82àª\97તા àª¹à«\8bય àª¤à«\8b  àª\95à«\83પયા [$1 report a bug] એ બગ અહીં નોંધાવો.
+àª\85નà«\8dયથા, àª¤àª®à«\87 àª¨à«\80àª\9aà«\87 àª\86પà«\87લ àª¸àª°àª³ àª«à«\8bરà«\8dમ àªµàª¾àªªàª°à«\80 àª¶àª\95à«\8b àª\9bà«\8b. àª¤àª®àª¾àª°àª¾ àª¸àª­à«\8dય àª¨àª¾àª® àª\85નà«\87 àª\95યà«\81àª\82 àª¬à«\8dરાàª\89àª\9dર àªµàª¾àªªàª°à«\8b àª\9bà«\8b àª¤à«\87નà«\80 àª®àª¾àª¹àª¿àª¤à«\80 àª¸àª¾àª¥à«\87, àª¤àª®àª¾àª°à«\80 àª\9fિપà«\8dપણà«\80નà«\8b "[$3 $2]" àªªàª¾àª¨àª¾àª®àª¾àª\82 àª¸àª®àª¾àªµà«\87શ àª\95રાશà«\87.',
 'feedback-subject' => 'વિષય:',
 'feedback-message' => 'સંદેશ',
 'feedback-cancel' => 'રદ કરો',
@@ -3779,4 +3778,11 @@ $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-years' => '$1 {{PLURAL:$1|વર્ષ|વર્ષો}}',
+
 );
index b38c6d7..1f8c61a 100644 (file)
@@ -561,7 +561,6 @@ Ogher: '''({{int:cur}})''' = anchaslyssyn rish y lhieggan t'ayn nish,
 
 # Diffs
 'history-title' => 'Shennaghys aavriwnys dy "$1"',
-'difference' => '(Anchaslys eddyr aavriwnyssyn)',
 'lineno' => 'Linney $1:',
 'compareselectedversions' => 'Cosoylaghey ny lhiegganyn reiht',
 'editundo' => 'rassey',
index 25579d0..d9ffb7e 100644 (file)
@@ -329,7 +329,6 @@ Fasali: '''({{int:cur}})''' = bambanci da zubi na yanzu, '''({{int:last}})''' =
 
 # Diffs
 'history-title' => 'Tarihin sauye-sauyen "$1"',
-'difference' => '(Bambanci tsakanin zubi da zubi)',
 'lineno' => 'Layi $1:',
 'compareselectedversions' => 'Kwatanta zaɓaɓɓun zubi',
 'editundo' => 'Janyewa',
index 6ec9c73..7e8a16a 100644 (file)
@@ -599,7 +599,6 @@ Tông-tsûng pûn $3 fûng-só ke ngièn-yîn he ''$2''",
 
 # Diffs
 'history-title' => '"$1" ke siû-thin li̍t-sṳ́',
-'difference' => '(Siû-thin pán-pún-kiên ke chhâ-yi)',
 'lineno' => 'Thi $1-hàng:',
 'compareselectedversions' => 'Pí-káu sién-thin ke pán-pún',
 'editundo' => 'Chhat-sêu',
index 61d0eb5..aba4106 100644 (file)
@@ -453,7 +453,6 @@ E ʻoluʻolu, e hōʻoia i ka hoʻokūkū ʻana i lalo, a laila, e mālama i nā
 'revertmerge' => 'Mai hoʻokuʻi pū',
 
 # Diffs
-'difference' => '(Ka ʻokoʻa ma waena o nā hoʻololi)',
 'lineno' => 'Laina $1:',
 'editundo' => 'hoʻihoʻi mai',
 
index 9ce0b51..9d0b04e 100644 (file)
@@ -745,6 +745,8 @@ $2',
 'filereadonlyerror' => 'לא ניתן לשנות את הקובץ "$1" כיוון שמאגר הקבצים "$2" במצב קריאה בלבד.
 
 מנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: "\'\'\'$3\'\'\'".',
+'invalidtitle-knownnamespace' => 'כותרת בלתי־תקינה עם מרחב השם "$2" ושם דף "$3"',
+'invalidtitle-unknownnamespace' => 'כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף "$2"',
 
 # Virus scanner
 'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
@@ -1135,6 +1137,12 @@ $2
 'parser-template-loop-warning' => 'נמצאה תבנית הקוראת לעצמה: [[$1]]',
 'parser-template-recursion-depth-warning' => 'עומק התבניות המוכללות זו בזו עבר את המגבלה ($1)',
 'language-converter-depth-warning' => 'עומק ממיר השפה עבר את המגבלה ($1)',
+'node-count-exceeded-category' => 'דפים שבהם מספר הצמתים גדול מדי',
+'node-count-exceeded-warning' => 'מספר הצמתים בדף גדול מדי',
+'expansion-depth-exceeded-category' => 'דפים שבהם עומק ההרחבה גדול מדי',
+'expansion-depth-exceeded-warning' => 'עומק ההרחבה בדף גדול מדי',
+'parser-unstrip-loop-warning' => 'נמצאה לולאה בפריסה',
+'parser-unstrip-recursion-limit' => 'עומק הרקורסיה של הפריסה עבר את המגבלה ($1)',
 
 # "Undo" feature
 'undo-success' => 'ניתן לבטל את העריכה. אנא בִדקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.',
@@ -1312,7 +1320,8 @@ $1",
 
 # Diffs
 'history-title' => 'היסטוריית הגרסאות של $1',
-'difference' => '(הבדלים בין גרסאות)',
+'difference-title' => 'הבדלים בין גרסאות של "$1"',
+'difference-title-multipage' => 'הבדלים בין הדפים $1 ו{{GRAMMAR:תחילית|$2}}',
 'difference-multipage' => '(הבדלים בין דפים)',
 'lineno' => 'שורה $1:',
 'compareselectedversions' => 'השוואת הגרסאות שנבחרו',
@@ -1952,6 +1961,7 @@ $1',
 'http-curl-error' => 'שגיאה בקבלת כתובת ה־URL‏: $1',
 'http-host-unreachable' => 'לא ניתן להגיע לכתובת ה־URL.',
 'http-bad-status' => 'הייתה בעיה בשליחת בקשת ה־HTTP‏: $1 $2',
+'http-truncated-body' => 'גוף הבקשה התקבל רק באופן חלקי.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'לא ניתן להגיע ל־URL',
index 5c2db62..386f9c0 100644 (file)
@@ -783,6 +783,7 @@ $2
 ऐसा तब भी हो सकता है यदि आप कोई खराब वेब-आधारित अनामक प्रौक्सी प्रयोग कर रहे हों।",
 'edit_form_incomplete' => "'''सम्पादन फ़ॉर्म के कुछ भाग सर्वर तक नहीं पहुँच पाए; जाँच लें कि आपके द्वारा किये बदलाव अक्षुण्ण हैं, और सहेजने का पुनः यत्न करें।'''",
 'editing' => '$1 सम्पादन',
+'creating' => '$1 बनाएँ',
 'editingsection' => '$1 सम्पादन (अनुभाग)',
 'editingcomment' => '$1 सम्पादन (नया अनुभाग)',
 'editconflict' => 'संपादन अंतर्विरोध: $1',
@@ -852,9 +853,9 @@ $2
 यह पहले से मौजूद है।',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => "'''à¤\9aà¥\87तावनà¥\80:''' à¤\87स à¤ªà¥\83षà¥\8dठ à¤ªà¤° à¤¬à¤¹à¥\81त à¤\85धिà¤\95 à¤¸à¤\82à¤\96à¥\8dया à¤®à¥\87à¤\82 à¤\95à¥\80मतà¥\80 à¤ªà¤¾à¤°à¥\8dसर à¥\9eंक्शनों का प्रयोग किया गया है।
+'expensive-parserfunction-warning' => "'''à¤\9aà¥\87तावनà¥\80:''' à¤\87स à¤ªà¥\83षà¥\8dठ à¤ªà¤° à¤¬à¤¹à¥\81त à¤\85धिà¤\95 à¤¸à¤\82à¤\96à¥\8dया à¤®à¥\87à¤\82 à¤\95à¥\80मतà¥\80 à¤ªà¤¾à¤°à¥\8dसर à¤«à¤¼ंक्शनों का प्रयोग किया गया है।
 
-इनका प्रयोग $2 से कम बार होना चाहिये, इस समय प्रयोग $1 बार है।",
+इनका प्रयोग $2 से कम बार होना चाहिये, इस समय प्रयोग $1 बार {{PLURAL:$2|है|हैं}}।",
 'expensive-parserfunction-category' => 'कीमती पार्सर फ़ंक्शनों का अत्यधिक प्रयोग कर रहे पृष्ठ',
 'post-expand-template-inclusion-warning' => "'''चेतावनी:''' साँचे जुड़ने की सीमा पार हो चुकी है।
 कुछ साँचे नहीं जुड़ेंगे।",
@@ -898,7 +899,7 @@ $2
 लिजण्ड: (चालू) = सद्य अवतरण के बीच में अन्तर,
 (आखिरी) = पिछले अवतरण के बीच में अन्तर, छो = छोटा बदलाव।',
 'history-fieldset-title' => 'इतिहास का विचरण करें',
-'history-show-deleted' => 'à¤\87तिहास à¤¶à¥\8b à¤¨à¤·à¥\8dà¤\9f',
+'history-show-deleted' => 'सà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\95à¥\87वल à¤\9bà¥\81पाà¤\8f à¤¹à¥\81à¤\8f à¤\85वतरण à¤¦à¤¿à¤\96ाà¤\8fà¤\81',
 'histfirst' => 'सबसे पुराना',
 'histlast' => 'सबसे नया',
 'historysize' => '($1 {{PLURAL:$1|बाइट}})',
@@ -951,7 +952,7 @@ $2
 'revdelete-nologid-title' => 'अवैध लॉग प्रविष्टि',
 'revdelete-nologid-text' => 'आपने या तो इस कार्यकलाप को करने के लिए लक्ष्यित लॉग प्रसंग नहीं दिया है या यह प्रविष्टि मौजूद नहीं है।',
 'revdelete-no-file' => 'निर्दिष्ट संचिका मौजूद नहीं है।',
-'revdelete-show-file-confirm' => 'क्या आप वाकई "<nowiki>$1</nowiki>" नामक संचिका का $2 के $3 बजे वाले मिटे हुए अवतरण को देखना चाहते हैं?',
+'revdelete-show-file-confirm' => 'क्या आप वाकई फ़ाइल "<nowiki>$1</nowiki>" के $2 को $3 बजे बने, हटाए जा चुके अवतरण को देखना चाहते हैं?',
 'revdelete-show-file-submit' => 'हाँ',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|का चुना हुआ|के चुने हुए}} अवतरण:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|चुना हुआ|चुने हुए}} लॉग इवेंट:'''",
@@ -1009,7 +1010,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'छुपाने की लॉग',
-'suppressionlogtext' => 'नीचे प्रबंधकों से छुपाये गए ब्लॉक और हटाये गये पृष्ठों की सूची है। मौजूदा ब्लॉक एवं बैन देखने के लिये [[Special:BlockList|आइ॰पी ब्लॉक सूची]] देखें।',
+'suppressionlogtext' => 'नीचे प्रबंधकों से छुपाये गए ब्लॉक और हटाये गये पृष्ठों की सूची है।
+मौजूदा ब्लॉक एवं बैन देखने के लिये [[Special:BlockList|ब्लॉक सूची]] देखें।',
 
 # History merging
 'mergehistory' => 'पृष्ठ के इतिहास एकत्रित करें',
@@ -1044,7 +1046,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" का अवतरण इतिहास',
-'difference' => '(अवतरणों में अंतर)',
 'difference-multipage' => '(पृष्ठों के बीच अन्तर)',
 'lineno' => 'पंक्ति $1:',
 'compareselectedversions' => 'चुने हुए अवतरणों की तुलना करें',
@@ -1829,7 +1830,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'statistics-views-total-desc' => 'अविद्यमान पृष्ठों और विशेष पृष्ठों के लिए दृश्य सम्मिलित नहीं हैं',
 'statistics-views-peredit' => 'दृष्य प्रति संपादन',
 'statistics-users' => 'पंजीकृत [[Special:ListUsers|सदस्य]]',
-'statistics-users-active' => 'सà¤\95à¥\8dरà¥\80य सदस्य',
+'statistics-users-active' => 'सà¤\95à¥\8dरिय सदस्य',
 'statistics-users-active-desc' => 'पिछले {{PLURAL:$1|एक दिन|$1 दिनों}} में कुछ गतिविधि रखने वाले सदस्य',
 'statistics-mostpopular' => 'सबसे अधिक देखे गए पृष्ठ',
 
@@ -1864,7 +1865,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'nbytes' => '$1 {{PLURAL:$1|बाइट|बाइट}}',
 'ncategories' => '{{PLURAL:$1|एक श्रेणी|$1 श्रेणियाँ}}',
 'nlinks' => '$1 {{PLURAL:$1|कड़ी|कड़ियाँ}}',
-'nmembers' => '{{PLURAL:$1|एक सदस्य|$1 सदस्य}}',
+'nmembers' => '$1 {{PLURAL:$1|सदस्य}}',
 'nrevisions' => '$1 {{PLURAL:$1|अवतरण}}',
 'nviews' => '{{PLURAL:$1|एक|$1}} बार देखा गया है',
 'nimagelinks' => '$1 {{PLURAL:$1|पृष्ठ|पृष्ठों}} पर प्रयुक्त',
@@ -1917,7 +1918,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'move' => 'स्थानान्तरण',
 'movethispage' => 'पृष्ठ का नाम बदलें',
 'unusedimagestext' => 'निम्न फ़ाइलें मौजूद हैं, पर किसी भी पृष्ठ में प्रयुक्त नहीं हैं।
-à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¥\87à¤\82 à¤\95ि à¤\85नà¥\8dय à¤µà¥\87ब à¤¸à¤¾à¤\87à¤\9f à¤\8fà¤\95 à¤¸à¥\80धà¥\80 à¤\95ड़à¥\80 à¤¸à¥\87 à¤«à¤¼à¤¾à¤\87ल à¤¸à¥\87 à¤\9cà¥\81à¥\9cà¥\80 à¤¹à¥\8b à¤¸à¤\95तà¥\80 à¤¹à¥\88à¤\82, à¤\94र à¤¸à¤\95à¥\8dरà¥\80य उपयोग में होने के बावजूद यहाँ दिखाई जा सकती है।',
+à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¥\87à¤\82 à¤\95ि à¤\85नà¥\8dय à¤µà¥\87ब à¤¸à¤¾à¤\87à¤\9f à¤\8fà¤\95 à¤¸à¥\80धà¥\80 à¤\95ड़à¥\80 à¤¸à¥\87 à¤«à¤¼à¤¾à¤\87ल à¤¸à¥\87 à¤\9cà¥\81ड़à¥\80 à¤¹à¥\8b à¤¸à¤\95तà¥\80 à¤¹à¥\88à¤\82, à¤\94र à¤¸à¤\95à¥\8dरिय उपयोग में होने के बावजूद यहाँ दिखाई जा सकती है।',
 'unusedcategoriestext' => 'निम्नलिखित श्रेणी पृष्ठ मौजूद हैं जबकि कोई भी पृष्ठ या अन्य श्रेणियाँ इनका प्रयोग नहीं करते हैं।',
 'notargettitle' => 'लक्ष्य नहीं',
 'notargettext' => 'इस क्रिया को करने के लिये आपने लक्ष्य पृष्ठ या सदस्य बताया नहीं है।',
@@ -1996,8 +1997,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'listusers-blocked' => '(अवरोधित)',
 
 # Special:ActiveUsers
-'activeusers' => 'सà¤\95à¥\8dरà¥\80य सदस्यों की सूची',
-'activeusers-intro' => 'यह à¤¸à¤\95à¥\8dरà¥\80य à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤¹à¥\88 à¤\9cिनà¥\8dहà¥\8bà¤\82नà¥\87 à¤ªà¤¿à¤\9bलà¥\87 $1 {{PLURAL:$1|दिन|दिनà¥\8bà¤\82}} à¤®à¥\87à¤\82 à¤\95à¥\81à¤\9b à¤\97तिविधà¥\80 करी है।',
+'activeusers' => 'सà¤\95à¥\8dरिय सदस्यों की सूची',
+'activeusers-intro' => 'यह à¤¸à¤\95à¥\8dरिय à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤¹à¥\88 à¤\9cिनà¥\8dहà¥\8bà¤\82नà¥\87 à¤ªà¤¿à¤\9bलà¥\87 $1 {{PLURAL:$1|दिन|दिनà¥\8bà¤\82}} à¤®à¥\87à¤\82 à¤\95à¥\81à¤\9b à¤\97तिविधि करी है।',
 'activeusers-count' => '$1 {{PLURAL:$1|सम्पादन}} पिछले $3 {{PLURAL:$3|दिन|दिनों}} में',
 'activeusers-from' => 'इस अक्षर से शुरू होने वाले सदस्य दिखाएँ:',
 'activeusers-hidebots' => 'बॉट छुपाएँ',
@@ -2071,10 +2072,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'watchnologin' => 'लॉग इन नहीं किया है',
 'watchnologintext' => 'ध्यानसूची में बदलाव के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है।',
 'addwatch' => 'ध्यानसूची में जोड़ें',
-'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "<nowiki>$1</nowiki>" का समावेश कर दिया गया है।
-भविष्य में इस पृष्ठ तथा इस पृष्ठ की वार्ता में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे तथा [[Special:RecentChanges|हाल में हुए बदलावों की सूची]] में यह पृष्ठ बोल्ड दिखेगा ताकि आप आसानी से इसका ध्यान रख सकें।
+'addedwatchtext' => 'आपकी [[Special:Watchlist|ध्यानसूची]] में "[[:$1]]" पृष्ठ का समावेश कर दिया गया है।
+भविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे तथा [[Special:RecentChanges|हाल में हुए बदलावों की सूची]] में यह पृष्ठ बोल्ड दिखेगा ताकि आप आसानी से इसका ध्यान रख सकें।
 
-<p>अगर आपको इस पृष्ठ को अपनी ध्यानसूची से निकालना हो तो "ध्यान हटायें" पर क्लिक करें।',
+अगर आपको इस पृष्ठ को अपनी ध्यानसूची से निकालना हो तो "ध्यान हटायें" पर क्लिक करें।',
 'removewatch' => 'ध्यानसूची से हटाएँ',
 'removedwatchtext' => '"[[:$1]]" नामक पृष्ठ को आपकी [[Special:Watchlist|ध्यानसूची]] से हटा दिया गया है।',
 'watch' => 'ध्यान रखें',
@@ -2220,7 +2221,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'protect-text' => "'''$1''' पृष्ठ का सुरक्षा-स्तर आप यहाँ देख सकते हैं और उसे बदल भी सकते हैं।",
 'protect-locked-blocked' => "आप बाधित होने की स्थिति में सुरक्षा स्थर में परिवर्तन नहीं कर सकते।
 पृष्ठ '''$1''' की वर्तमान स्थिति यह है:",
-'protect-locked-dblock' => "डà¥\87à¤\9fाबà¥\87स à¤®à¥\87à¤\82 à¤¸à¤\95à¥\8dरà¥\80य लॉक होने की वजह से सुरक्षा स्तर में कोई परिवर्तन नहीं किया जा सकता।
+'protect-locked-dblock' => "डà¥\87à¤\9fाबà¥\87स à¤®à¥\87à¤\82 à¤¸à¤\95à¥\8dरिय लॉक होने की वजह से सुरक्षा स्तर में कोई परिवर्तन नहीं किया जा सकता।
 पृष्ठ '''$1''' की वर्तमान स्थिति यह है:",
 'protect-locked-access' => "आपको इस पृष्ठ का सुरक्षा-स्तर बदलने की अनुमति नहीं है।
 '''$1''' का वर्तमान सुरक्षा-स्तर यह है:",
@@ -2317,7 +2318,7 @@ $2 द्वारा संपादित अन्तिम अवतरण 
 'undelete-error-long' => 'फ़ाईल पुनर्स्थापित करने में आई हुई समस्याएं:
 
 $1',
-'undelete-show-file-confirm' => 'à¤\95à¥\8dया à¤\86प à¤µà¤¾à¤¸à¥\8dतव à¤®à¥\87à¤\82 à¤¸à¤\82à¤\9aिà¤\95ा "<nowiki>$1</nowiki>" à¤\95à¥\87 $2 à¤\95à¥\8b $3 à¤¬à¤\9cà¥\87 à¤¬à¤¨à¥\87, à¤®à¤¿à¤\9fाà¤\8f à¤\9cा à¤\9aà¥\81à¤\95à¥\87 à¤¸à¤\82सà¥\8dà¤\95रण को देखना चाहते हैं?',
+'undelete-show-file-confirm' => 'à¤\95à¥\8dया à¤\86प à¤µà¤¾à¤\95à¤\88 à¤«à¤¼à¤¾à¤\87ल "<nowiki>$1</nowiki>" à¤\95à¥\87 $2 à¤\95à¥\8b $3 à¤¬à¤\9cà¥\87 à¤¬à¤¨à¥\87, à¤¹à¤\9fाà¤\8f à¤\9cा à¤\9aà¥\81à¤\95à¥\87 à¤\85वतरण को देखना चाहते हैं?',
 'undelete-show-file-submit' => 'हाँ',
 
 # Namespace form on various pages
@@ -2330,7 +2331,7 @@ $1',
 
 # Contributions
 'contributions' => 'सदस्य योगदान',
-'contributions-title' => '$1 à¤\95à¥\87 à¤²à¤¿à¤\8f à¤¸à¤¦à¤¸à¥\8dयà¥\8bà¤\82 à¤\95à¥\87 à¤¯à¥\8bà¤\97दान',
+'contributions-title' => '$1 के योगदान',
 'mycontris' => 'मेरा योगदान',
 'contribsub2' => '$1 के लिये ($2)',
 'nocontribs' => 'इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।',
@@ -2364,7 +2365,7 @@ $1',
 'nolinkshere-ns' => "चुने हुए नामस्थानसे '''[[:$1]]''' को जुडने वाले पृष्ठ नहीं हैं।",
 'isredirect' => 'पुनर्निर्देशन पृष्ठ',
 'istemplate' => 'मिलाईयें',
-'isimage' => 'सà¤\82à¤\9aिà¤\95ा à¤\95ि à¤\95ड़à¥\80',
+'isimage' => 'फ़ाà¤\87ल à¤ªà¥\8dरयà¥\8bà¤\97',
 'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछले $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगले $1}}',
 'whatlinkshere-links' => '← कड़ियाँ',
@@ -2571,7 +2572,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 'movenologin' => 'लॉग इन नहीं किया',
 'movenologintext' => 'लेख स्थानान्तरित करने के लिये आपका [[Special:UserLogin|लॉग इन]] किया होना आवश्यक हैं।',
 'movenotallowed' => 'आपको पृष्ठ स्थानांतरित करने की अनुमति नहीं है।',
-'movenotallowedfile' => 'à¤\86पà¤\95à¥\8b à¤¸à¤\82à¤\9aिà¤\95ाà¤\8fà¤\81 स्थानांतरित करने की अनुमति नहीं है।',
+'movenotallowedfile' => 'à¤\86पà¤\95à¥\8b à¤«à¤¼à¤¾à¤\87लà¥\87à¤\82 स्थानांतरित करने की अनुमति नहीं है।',
 'cant-move-user-page' => 'आपको सदस्य पृष्ठ स्थानांतरित करने की अनुमति नही है (सिवाय उप पन्नों के)।',
 'cant-move-to-user-page' => 'आपको किसी पन्नो को सदस्य पृष्ठ पर ले जाने की अनुमति नहीं है (सिवाय सदस्य उप पृष्ठ के)',
 'newtitle' => 'नये शीर्षक की ओर:',
@@ -2634,6 +2635,7 @@ $1 को बाध्य करने का कारण है: "$2"',
 पृष्ठों को निर्यात करने के लिए, नीचे विषय वस्तु संदूक में शीर्षक प्रवेश करें, एक शीर्षक प्रति पंक्ति, और चुने कि आप वर्त्तमान अवतरण के साथ पुराने अवतरण भी चाहते हैं कि नहीं, या पिछले संपादन के बारे में जानकारी के साथ केवल वर्त्तमान अवतरण चाहते हैं।
 
 बाद वाली स्थिति के लिए आप एक सम्पर्क भी प्रयोग कर सकते हैं, उदाहरण के लिए, "[[{{MediaWiki:Mainpage}}]]" पृष्ठ के लिए [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।',
+'exportall' => 'सभी पृष्ठ निर्यात करें',
 'exportcuronly' => 'पूरा इतिहास नहीं चाहियें, सिर्फ अभी का अवतरण अंतर्भूत करें',
 'exportnohistory' => "----
 '''सूचना:''' इस फॉर्म का इस्तेमाल कर पृष्ठका पूरा इतिहास निर्यात करना परफॉर्मेन्स के चलते रोक दिया गया हैं।",
@@ -3557,6 +3559,7 @@ $5
 'version-software' => 'इन्स्टॉल की हुई प्रणाली',
 'version-software-product' => 'प्रोडक्ट',
 'version-software-version' => 'अवतरण',
+'version-entrypoints-header-url' => 'यू॰आर॰एल',
 
 # Special:FilePath
 'filepath' => 'सञ्चिका पथ',
@@ -3687,7 +3690,7 @@ $5
 'logentry-newusers-newusers' => '$1 created उपयोगकर्ता के खाता',
 'logentry-newusers-create' => '$1 created उपयोगकर्ता के खाता',
 'logentry-newusers-create2' => '$1 created a user account $3',
-'logentry-newusers-autocreate' => 'à¤\96ातà¥\87 $1 à¤¥à¤¾ created à¤¸à¥\8dवà¤\9aालित à¤°à¥\82प à¤¸à¥\87',
+'logentry-newusers-autocreate' => 'à¤\96ातà¥\87 $1 à¤¸à¥\8dवà¤\9aालित à¤°à¥\82प à¤¸à¥\87 à¤¬à¤¨à¤¾à¤¯à¤¾ à¤\97या',
 'newuserlog-byemail' => 'कूटशब्द इ-मेल द्वारा भेजा गया हैं',
 
 # Feedback
@@ -3744,4 +3747,15 @@ $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|शताब्दी}}',
+'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्दी}}',
+
 );
index 1101e99..e349a77 100644 (file)
@@ -970,7 +970,6 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset
 
 # Diffs
 'history-title' => '"$1" ke sansodhan ke itihaas',
-'difference' => '(Badlao me farak)',
 'difference-multipage' => '(Panna ke biich ke antar)',
 'lineno' => 'Rekha $1:',
 'compareselectedversions' => 'Chuna gae version ke compare karo',
index 878399c..685779d 100644 (file)
@@ -986,7 +986,6 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 
 # Diffs
 'history-title' => 'Rebisyon sang historya sa "$1"',
-'difference' => '(Naglain sa tunga sang mga rebisyon)',
 'difference-multipage' => '(Kinala-in sang mga panid)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'I-kompara ang pinilian nga mga rebisyon',
index bb41921..d1b744d 100644 (file)
@@ -779,7 +779,7 @@ Zbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradni
 'emailauthenticated' => 'Vaša e-mail adresa je ovjerena $2 u $3.',
 'emailnotauthenticated' => 'Vaša e-mail adresa još nije ovjerena.
 Ne možemo poslati e-mail ni u jednoj od sljedećih naredbi.',
-'noemailprefs' => 'Nije navedena e-mail adresa, stoga sljedeće naredbe neće raditi.',
+'noemailprefs' => 'Nije navedena adresa elektroničke pošte, stoga sljedeće naredbe ne će raditi.',
 'emailconfirmlink' => 'Potvrdite svoju e-mail adresu',
 'invalidemailaddress' => 'Ne mogu prihvatiti e-mail adresu jer nije valjano oblikovana.
 Molim unesite ispravno oblikovanu adresu ili ostavite polje praznim.',
@@ -1242,7 +1242,6 @@ Primijetite da uporaba navigacijskih poveznica resetira Vaše izbore u stupcu.',
 
 # Diffs
 'history-title' => 'Povijest izmjena stranice "$1"',
-'difference' => '(Usporedba među inačicama)',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Redak $1:',
 'compareselectedversions' => 'Usporedi odabrane inačice',
@@ -2621,13 +2620,13 @@ mijenjanje postavki, uređivanje popisa praćenja i druge stvari koje zahtijevaj
 # Move page
 'move-page' => 'Premjesti $1',
 'move-page-legend' => 'Premjesti stranicu',
-'movepagetext' => "Korištenjem ovog obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime.
+'movepagetext' => "Uporabom ovog obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime.
 Stari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov.
-Možete odabrati automatsko ažuriranje preusmjeravanja na originalni naslov.
+Možete odabrati automatsko ažuriranje preusmjeravanja na izvorni naslov.
 Ako se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].
 Dužni ste provjeriti da sve poveznice i dalje nastave voditi na prave stranice.
 
-Stranica se '''neće''' premjestiti ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena.
+Stranica se '''ne će''' premjestiti ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena.
 To znači: 1. ako pogriješite, možete opet preimenovati stranicu na stari naslov, 2. ne može se dogoditi da izbrišete neku postojeću stranicu.
 
 '''Upozorenje!'''
@@ -2637,21 +2636,21 @@ Stari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi n
 Budite sigurni da ste provjerili [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nevaljana preusmjeravanja]]. 
 Vi ste odgovorni za to da poveznice i dalje povezuju tamo gdje treba.
 
-Imajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena. 
-To znači da stranicu možete preimenovati u prethodno ime ukoliko ste pogriješili te ne možete pisati preko postojeće stranice. 
+Imajte na umu da stranica '''ne će''' biti premještena ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena. 
+To znači da stranicu možete preimenovati u prethodno ime ako ste pogriješili te ne možete pisati preko postojeće stranice. 
 
 '''Upozorenje!''' 
 Ovo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice; 
 budite sigurni da razumijete posljedice ove akcije prije nastavka.",
-'movepagetalktext' => "Stranica za razgovor, ako postoji, automatski će se premjestiti zajedno sa stranicom koju premještate. '''Stranica za razgovor neće se premjestiti ako:'''
+'movepagetalktext' => "Stranica za razgovor, ako postoji, automatski će se premjestiti zajedno sa stranicom koju premještate. '''Stranica se za razgovor ne će premjestiti ako:'''
 *premještate stranicu iz jednog prostora u drugi,
 *pod novim imenom već postoji stranica za razgovor s nekim sadržajem, ili
 *maknete kvačicu u kućici na dnu ove stranice.
 
-U tim slučajevima ćete morati sami premjestiti ili iskopirati stranicu za razgovor,
+U tim ćete slučajevima morati sami premjestiti ili iskopirati stranicu za razgovor,
 ako to želite.",
 'movearticle' => 'Premjesti stranicu',
-'moveuserpage-warning' => "'''Upozorenje:''' Premještate suradničku stranicu. Imajte na umu da će stranica biti premještena, ali suradnik ''neće'' biti preimenovan.",
+'moveuserpage-warning' => "'''Upozorenje:''' Premještate suradničku stranicu. Imajte na umu da će stranica biti premještena, ali suradnik ''ne će'' biti preimenovan.",
 'movenologin' => 'Niste prijavljeni',
 'movenologintext' => 'Ako želite premjestiti stranicu morate biti [[Special:UserLogin|prijavljeni]].',
 'movenotallowed' => 'Nemate pravo premještanja stranica.',
index 8bc8040..25a3700 100644 (file)
@@ -538,6 +538,8 @@ Podata přičina je \'\'"$2"\'\'.',
 'filereadonlyerror' => 'Njeje móžno dataju "$1" změnić, dokelž datajowy repozitorij "$2" je jenož čitajomny.
 
 Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
+'invalidtitle-knownnamespace' => 'Njepłaćiwy titul z mjenowym rumom "$2" a tekstom "$3"',
+'invalidtitle-unknownnamespace' => 'Njepłaćiwy titul z njeznatym mjenowym rumom $1 a tekstom "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Špatna konfiguracija: Njeznaty wirusowy skener: ''$1''",
@@ -896,6 +898,12 @@ Dyrbjała mjenje hač $2 {{PLURAL:$2|wołanje|wołanjej|wołanja|wołanjow}} mě
 'parser-template-loop-warning' => 'Předłohowa sekla wotkryta: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limit za rekursijnu hłubokosć předłohi překročeny ($1)',
 'language-converter-depth-warning' => 'Limit hłubokosće rěčneho konwertera překročena ($1)',
+'node-count-exceeded-category' => 'Strony, hdźež ličba sukow je překročena',
+'node-count-exceeded-warning' => 'Strona je ličbu sukow překročiła',
+'expansion-depth-exceeded-category' => 'Strony, hdźež ekspansiska hłubokosć je překročena',
+'expansion-depth-exceeded-warning' => 'Strona je ekspansisku hłubokosć překročił',
+'parser-unstrip-loop-warning' => 'Njeskónčna sekla namakana',
+'parser-unstrip-recursion-limit' => 'Rekursiska hranica překročena ($1)',
 
 # "Undo" feature
 'undo-success' => 'Wersija je so wuspěšnje wotstroniła. Prošu přepruwuj deleka w přirunanskim napohledźe, hač twoja změna bu přewzata a klikń potom na „Składować”, zo by změnu składował.',
@@ -1070,7 +1078,8 @@ Zawěsć, zo tuta změna stawiznisku kontinuitu strony wobchowuje.',
 
 # Diffs
 'history-title' => 'Stawizny wersijow strony „$1“',
-'difference' => '(rozdźěl mjez wersijomaj)',
+'difference-title' => 'Rozdźěl mjez wersijemi "$1"',
+'difference-title-multipage' => 'Rozdźěl mjez stronami "$1" a "$2"',
 'difference-multipage' => '(Rozdźěl mjez stronami)',
 'lineno' => 'Rjadka $1:',
 'compareselectedversions' => 'Wubranej wersiji přirunać',
@@ -1701,6 +1710,7 @@ Za optimalnu wěstotu je img_auth.php znjemóžnjeny.',
 'http-curl-error' => 'Zmylk při wołanju URL: $1',
 'http-host-unreachable' => 'URL njeda so docpěć.',
 'http-bad-status' => 'Problem je za HTTP-naprašowanje wustupił: $1 $2',
+'http-truncated-body' => 'Wobsah naprašowanja je so jenož zdźěla přijał.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL docpějomny njeje.',
index 60d1fa4..a2a5394 100644 (file)
@@ -880,7 +880,6 @@ Lejand : ({{MediaWiki:Cur}}) = diferans ak vèsyon kounye a, ({{MediaWiki:Last}}
 
 # Diffs
 'history-title' => 'Istorik pou vèsyon « $1 » yo',
-'difference' => '(Diferans ant vèsyon yo)',
 'lineno' => 'Liy $1 :',
 'compareselectedversions' => 'Konpare vèsyon ki seleksyone yo',
 'editundo' => 'Revoke',
index f5ee6bd..8921df8 100644 (file)
@@ -976,7 +976,8 @@ A blokkolási napló legutóbbi ide vonatkozó bejegyzése a következő:',
 'userinvalidcssjstitle' => "'''Figyelem:''' Nincs „$1” nevű felület. A felületekhez tartozó .css/.js oldalak kisbetűvel kezdődnek, például ''{{ns:user}}:Gipsz Jakab/vector.css'' és nem ''{{ns:user}}:Gipsz Jakab/Vector.css''.",
 'updated' => '(frissítve)',
 'note' => "'''Megjegyzés:'''",
-'previewnote' => "'''Ne feledd, hogy ez csak előnézet, a változtatásaid még nincsenek elmentve!'''",
+'previewnote' => "'''Ne feledd, hogy ez csak egy előnézet.''' A változtatásaid még nincsenek elmentve!",
+'continue-editing' => 'Szerkesztés folytatása',
 'previewconflict' => 'Ez az előnézet a felső szerkesztődobozban levő szöveg mentés utáni megfelelőjét mutatja.',
 'session_fail_preview' => "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.
 Kérjük próbálkozz újra!
@@ -1242,7 +1243,6 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 
 # Diffs
 'history-title' => 'A(z) „$1” laptörténete',
-'difference' => '(Változatok közti eltérés)',
 'difference-multipage' => '(Lapok közti eltérés)',
 'lineno' => '$1. sor:',
 'compareselectedversions' => 'Kiválasztott változatok összehasonlítása',
@@ -2135,6 +2135,7 @@ A napló típusának, a szerkesztő nevének (kis- és nagybetűérzékeny), vag
 'allpagesprefix' => 'Lapok listázása, amik ezzel az előtaggal kezdődnek:',
 'allpagesbadtitle' => 'A megadott lapnév nyelvközi vagy wikiközi előtagot tartalmazott, vagy érvénytelen volt. Talán olyan karakter van benne, amit nem lehet lapnevekben használni.',
 'allpages-bad-ns' => 'A(z) {{SITENAME}} webhelyen nincs "$1" névtér.',
+'allpages-hide-redirects' => 'Átirányítások elrejtése',
 
 # Special:Categories
 'categories' => 'Kategóriák',
index bd10818..0996c38 100644 (file)
@@ -877,6 +877,7 @@ $2',
 'updated' => '(Թարմացված)',
 'note' => "'''Ծանուցում.'''",
 'previewnote' => "'''Սա միայն նախադիտումն է. ձեր կատարած փոփոխությունները դեռ չե՛ն հիշվել։'''",
+'continue-editing' => 'Շարունակել խմբագրել',
 'previewconflict' => 'Այս նախադիտումը արտապատկերում է վերևի խմբագրման դաշտում եղած տեքստը այնպես, ինչպես այն կերևա հիշվելուց հետո։',
 'session_fail_preview' => "'''Ցավոք՝ չհաջողվեց հիշել ձեր խմբագրումները սեսիայի տվյալների կորստի պատճառով։
 Խնդրում ենք կրկին փորձել։ Սխալի կրկնման դեպքում՝ փորձեք դուրս գալ, ապա կրկին մտնել համակարգ։'''",
@@ -994,6 +995,11 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 Հնարավոր է ջնջման մանրամասնություններ լինեն [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։",
 'rev-deleted-no-diff' => "Դուք չեք կարող դիտել տարբերությունը, քանի որ խմբագրումների մեկը '''ջնջվել''' է։ Մանրամասները կարող եք գտնել [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]",
 'rev-suppressed-no-diff' => "Դուք չեք կարող դիտել տարբերությունը, քանի որ խմբագրումների մեկը '''ջնջվել''' է։",
+'rev-deleted-unhide-diff' => "Խմբագրումներից մեկը '''ջնջվել''' է։
+Գործողության մանրամասները կարելի է գտնել [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։
+Դուք կարող եք դիտել [$1 տարբերությունը], եթե ցանկանում եք շարունակել։",
+'rev-deleted-diff-view' => "Խմբագրումներից մեկը '''ջնջվել''' է։
+Գործողության մանրամասները կարելի է գտնել [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ջնջման տեղեկամատյանում]։",
 'rev-delundel' => 'ցույց տալ/թաքցնել',
 'rev-showdeleted' => 'ցույց տալ',
 'revisiondelete' => 'Ջնջել/վերականգնել տարբերակները',
@@ -1033,9 +1039,9 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 
 # Diffs
 'history-title' => '«$1» էջի փոփոխումների պատմություն',
-'difference' => '(Խմբագրումների միջև եղած տարբերությունները)',
 'lineno' => 'Տող  $1.',
 'compareselectedversions' => 'Համեմատել ընտրած տարբերակները',
+'showhideselectedversions' => 'Ցուցադրել/թաքցնել ընտրված խմբագրումները',
 'editundo' => 'հետ շրջել',
 'diff-multi' => '({{PLURAL:$1|$1 միջանկյալ տարբերակ|$1 միջանկյալ տարբերակ}} ցուցադրված չէ։)',
 
index a0ff026..79c8f43 100644 (file)
@@ -534,6 +534,8 @@ Le motivo specificate es ''$2''.",
 'filereadonlyerror' => 'Impossibile modificar le file "$1" perque le deposito de files "$2" es in modo de lectura sol.
 
 Le administrator qui lo blocava offereva iste explication: "$3".',
+'invalidtitle-knownnamespace' => 'Titulo invalide con spatio de nomines "$2" e texto "$3"',
+'invalidtitle-unknownnamespace' => 'Titulo invalide con spatio de nomines incognite $1 e texto "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
@@ -943,6 +945,12 @@ Iste parametros ha essite omittite.",
 'parser-template-loop-warning' => 'Recursion infinite detegite in patrono: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limite de recursion del patrono excedite ($1)',
 'language-converter-depth-warning' => 'Limite de profunditate del conversor de lingua excedite ($1)',
+'node-count-exceeded-category' => 'Paginas in que le numero de nodos excede le limite',
+'node-count-exceeded-warning' => 'Le numero de nodos in iste pagina excede le limite',
+'expansion-depth-exceeded-category' => 'Paginas in que le profunditate de expansion excede le limite',
+'expansion-depth-exceeded-warning' => 'Le profunditate de expansion in iste pagina excede le limite',
+'parser-unstrip-loop-warning' => 'Bucla de "unstrip" detegite',
+'parser-unstrip-recursion-limit' => 'Limite de recursion de "unstrip" excedite ($1)',
 
 # "Undo" feature
 'undo-success' => 'Le modification pote esser disfacite.
@@ -1124,7 +1132,8 @@ Nota que le uso del ligamines de navigation causara le perdita de tote cambios i
 
 # Diffs
 'history-title' => 'Historia de versiones de "$1"',
-'difference' => '(Differentia inter versiones)',
+'difference-title' => 'Differentia inter versiones de "$1"',
+'difference-title-multipage' => 'Differentia inter paginas "$1" e "$2"',
 'difference-multipage' => '(Differentia inter paginas)',
 'lineno' => 'Linea $1:',
 'compareselectedversions' => 'Comparar versiones seligite',
@@ -1766,6 +1775,7 @@ Pro securitate optimal, img_auth.php es disactivate.',
 'http-curl-error' => 'Error al obtener datos del URL: $1',
 'http-host-unreachable' => 'Non poteva acceder al URL',
 'http-bad-status' => 'Un problema occurreva durante le requesta HTTP: $1 $2',
+'http-truncated-body' => 'Le corpore del requesta ha essite solo partialmente recipite.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Non poteva acceder al URL',
index 7ca994c..b6c9fde 100644 (file)
@@ -998,7 +998,9 @@ Pratayang ini belum disimpan!'''",
 'userinvalidcssjstitle' => "'''Peringatan:''' Kulit \"\$1\" tidak ditemukan. Harap diingat bahwa halaman .css dan .js menggunakan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannya {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Diperbarui)',
 'note' => "'''Catatan:'''",
-'previewnote' => "'''Ingatlah bahwa ini hanyalah pratayang yang belum disimpan!'''",
+'previewnote' => "'''Ingatlah bahwa ini hanya pratayang.'''
+Perubahan Anda belum disimpan!",
+'continue-editing' => 'Lanjutkan penyuntingan',
 'previewconflict' => 'Pratayang ini mencerminkan teks pada bagian atas kotak suntingan teks sebagaimana akan terlihat bila Anda menyimpannya.',
 'session_fail_preview' => "'''Maaf, kami tidak dapat mengolah suntingan Anda akibat terhapusnya data sesi.
 Silakan coba sekali lagi.
@@ -1265,7 +1267,6 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 
 # Diffs
 'history-title' => 'Riwayat revisi dari "$1"',
-'difference' => '(Perbedaan antarrevisi)',
 'difference-multipage' => '(Perbedaan antarhalaman)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Bandingkan versi terpilih',
index aa6ad7c..1a9bfc9 100644 (file)
@@ -613,7 +613,6 @@ Vider li [[Special:IPBlockList|liste de bloc de IP]] por li liste de bloces e ba
 
 # Diffs
 'history-title' => 'Revision del historie de "$1"',
-'difference' => '(Diferentie inter revisiones)',
 'lineno' => 'Linea $1:',
 'compareselectedversions' => 'Comparar revisiones selectet',
 'editundo' => 'anullar',
index 8430e6f..4c6f239 100644 (file)
@@ -691,7 +691,6 @@ Okwu ụmà: '''({{int:cur}})''' = gbánwe na nké orü mbu, '''({{int:last}})''
 
 # Diffs
 'history-title' => 'Ákíkó mbu màkà orü nọr na élú "$1"',
-'difference' => '(Ihe dị íche na orü ndi á)',
 'lineno' => 'Ahiri $1:',
 'compareselectedversions' => 'Sikwụ orü áká dị',
 'editundo' => 'emekwàlà',
index 0a85879..043dfb7 100644 (file)
@@ -990,7 +990,6 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng pinagbaliw a naaramid id
 
 # Diffs
 'history-title' => 'Pakasaritaan ti pannakabalbaliw ti "$1"',
-'difference' => '(Nagdudumaan iti baeten dagiti pannakabalbaliw)',
 'difference-multipage' => '(Paggiddiatan dagiti panid)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Paggidiaten dagiti pinili a binaliwan',
index f02468c..3dd161b 100644 (file)
@@ -481,7 +481,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '"$1" хувцамий искар',
-'difference' => '(Доржамашкахь юкъера къоастамаш)',
 'lineno' => 'МугI $1:',
 'compareselectedversions' => 'Хьаржа доржамаша тарона тIа хьажа',
 'editundo' => 'юхавала/яла',
index d96a129..43c2f50 100644 (file)
@@ -638,7 +638,6 @@ Surskriburo: '''({{int:cur}})''' = diferi kun l'aktuala versiono,
 
 # Diffs
 'history-title' => 'Versionaro di "$1"',
-'difference' => '(Diferi inter versioni)',
 'lineno' => 'Lineo $1:',
 'compareselectedversions' => 'Komparar selektita versioni',
 'editundo' => 'des-facez',
index a61bf30..bcaab65 100644 (file)
@@ -910,6 +910,7 @@ Síðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til sk
 'updated' => '(Uppfært)',
 'note' => "'''Athugið:'''",
 'previewnote' => "'''Það sem sést hér er aðeins forskoðun og hefur ekki enn verið vistað!'''",
+'continue-editing' => 'Halda áfram að breyta',
 'previewconflict' => 'Þessi forskoðun endurspeglar textann í efra breytingarsvæði eins og hann myndi líta út ef þú vistar.',
 'session_fail_preview' => "'''Því miður! Gat ekki unnið úr breytingum þínum vegna týndra lotugagna.
 Vinsamlegast reyndu aftur síðar. Ef það virkar ekki heldur skaltu reyna að skrá þig út og inn á ný.'''",
@@ -924,6 +925,7 @@ Ef þetta leysir ekki vandamálið, reyndu að [[Special:UserLogout|skrá þig 
 Þetta getur gerst þegar þú notar bilaðan vafra eða ónafngreinda vefsels þjónustu.",
 'edit_form_incomplete' => "'''Sumir hlutar breytingarinnar bárust ekki til vefþjónsins; athugaðu hvort breytingin þín er óbreytt og reyndu aftur.'''",
 'editing' => 'Breyti $1',
+'creating' => 'Skapa $1',
 'editingsection' => 'Breyti $1 (hluta)',
 'editingcomment' => 'Breyti $1 (nýr hluti)',
 'editconflict' => 'Breytingaárekstur: $1',
@@ -1119,7 +1121,6 @@ Sjáðu til þess að þessi breyting sameini breytingarskrárnar samfellt.',
 
 # Diffs
 'history-title' => 'Breytingaskrá fyrir "$1"',
-'difference' => '(Munur milli útgáfa)',
 'difference-multipage' => '(Munur á milli síðna)',
 'lineno' => 'Lína $1:',
 'compareselectedversions' => 'Bera saman valdar útgáfur',
@@ -3313,7 +3314,7 @@ Póstþjónninn skilaði: $1',
 'confirmemail_success' => 'Netfang þitt hefur verið staðfest. Þú getur nú [[Special:UserLogin|skráð þig inn]] og vafrað um wiki-kerfið.',
 'confirmemail_loggedin' => 'Netfang þitt hefur verið staðfest.',
 'confirmemail_error' => 'Eitthvað fór úrskeiðis við vistun staðfestingarinnar.',
-'confirmemail_subject' => '{{SITENAME}} netfangs-staðfesting',
+'confirmemail_subject' => 'Staðfesting netfangs á {{SITENAME}}',
 'confirmemail_body' => 'Einhver, sennilega þú, með vistfangið $1 hefur skráð sig á {{SITENAME}} undir notandanafninu „$2“ og gefið upp þetta netfang.
 
 Til að staðfesta að það hafi verið þú sem skráðir þig undir þessu nafni, og til þess að virkja póstsendingar í gegnum {{SITENAME}}, skaltu opna þennan tengil í vafranum þínum:
index 8e00feb..5fbd184 100644 (file)
@@ -58,6 +58,7 @@
  * @author Una giornata uggiosa '94
  * @author Vajotwo
  * @author Valepert
+ * @author Ximo17
  * @author Xpensive
  * @author ZioNicco
  * @author לערי ריינהארט
@@ -647,6 +648,8 @@ La motivazione è la seguente: ''$2''.",
 'filereadonlyerror' => 'Non è stato possibile modificare il file "$1" poiché il repository di file "$2" è in modalità di sola lettura.
 
 L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
+'invalidtitle-knownnamespace' => 'Titolo non valido con namespace "$2" e testo "$3"',
+'invalidtitle-unknownnamespace' => 'Titolo non valido con namespace sconosciuto "$1" e testo "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Errore di configurazione: antivirus sconosciuto: ''$1''",
@@ -1012,6 +1015,12 @@ Alcuni template non verranno inclusi.",
 'parser-template-loop-warning' => 'Rilevato loop del template: [[$1]]',
 'parser-template-recursion-depth-warning' => 'È stato raggiunto il limite di ricorsione nel template ($1)',
 'language-converter-depth-warning' => 'Limite di profondità del convertitore di lingua superato ($1)',
+'node-count-exceeded-category' => 'Pagine dove viene superato il numero di nodi',
+'node-count-exceeded-warning' => 'Questa pagina ha superato il numero di nodi',
+'expansion-depth-exceeded-category' => 'Pagine dove viene superata la profondità di espansione',
+'expansion-depth-exceeded-warning' => 'Questa pagina ha superato la profondità di espansione',
+'parser-unstrip-loop-warning' => 'Rilevato ciclo di Unstrip',
+'parser-unstrip-recursion-limit' => 'Superati i limiti di ricorsione di Unstrip ($1)',
 
 # "Undo" feature
 'undo-success' => 'Questa modifica può essere annullata. Verificare il confronto presentato di seguito per accertarsi che il contenuto corrisponda a quanto desiderato e quindi salvare le modifiche per completare la procedura di annullamento.',
@@ -1182,7 +1191,8 @@ Vedi l'[[Special:BlockList|elenco dei blocchi]] per l'elenco dei bandi e dei blo
 
 # Diffs
 'history-title' => 'Cronologia delle modifiche di "$1"',
-'difference' => '(Differenze fra le revisioni)',
+'difference-title' => 'Differenza tra le revisioni di " $1 "',
+'difference-title-multipage' => 'Differenza tra le pagine " $1 "e" $2 "',
 'difference-multipage' => '(Differenze fra le pagine)',
 'lineno' => 'Riga $1:',
 'compareselectedversions' => 'Confronta le versioni selezionate',
@@ -1800,6 +1810,7 @@ Per una sicurezza ottimale, img_auth.php è disattivato.',
 'http-curl-error' => "Errore durante il recupero dell'URL: $1",
 'http-host-unreachable' => 'URL non raggiungibile.',
 'http-bad-status' => "C'è stato un problema durante la richiesta HTTP: $1 $2",
+'http-truncated-body' => 'Il corpo della richiesta è stato ricevuto solo parzialmente.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL non raggiungibile',
@@ -3645,6 +3656,11 @@ Questo programma deve essere distribuito assieme ad [{{SERVER}}{{SCRIPTPATH}}/CO
 'version-software' => 'Software installato',
 'version-software-product' => 'Prodotto',
 'version-software-version' => 'Versione',
+'version-entrypoints' => 'URL di accesso',
+'version-entrypoints-header-entrypoint' => 'Punti di accesso',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Percorso voci]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Percorso script]',
 
 # Special:FilePath
 'filepath' => 'Percorso di un file',
index eeec5f1..8fb968d 100644 (file)
@@ -478,7 +478,7 @@ $messages = array(
 'category_header' => 'カテゴリ「$1」にあるページ',
 'subcategories' => '下位カテゴリ',
 'category-media-header' => 'カテゴリ「$1」にあるメディア',
-'category-empty' => "''このカテゴリには、ページまたはメディアがひとつもありません。''",
+'category-empty' => "''このカテゴリには現在、ページとメディアがひとつもありません。''",
 'hidden-categories' => '{{PLURAL:$1|隠しカテゴリ}}',
 'hidden-category-category' => '隠しカテゴリ',
 'category-subcat-count' => '{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには $2 下位カテゴリが含まれており、そのうち以下の{{PLURAL:$1|下位カテゴリ|&#32;$1 下位カテゴリ}}を表示しています。}}',
@@ -526,7 +526,7 @@ $messages = array(
 'vector-view-edit' => '編集',
 'vector-view-history' => '履歴表示',
 'vector-view-view' => '閲覧',
-'vector-view-viewsource' => 'ソースを表示',
+'vector-view-viewsource' => 'ソースを閲覧',
 'actions' => '操作',
 'namespaces' => '名前空間',
 'variants' => '変種',
@@ -631,9 +631,9 @@ $1',
 'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
 'editsection' => '編集',
 'editold' => '編集',
-'viewsourceold' => 'ソースを表示',
+'viewsourceold' => 'ソースを閲覧',
 'editlink' => '編集',
-'viewsourcelink' => 'ソースを表示',
+'viewsourcelink' => 'ソースを閲覧',
 'editsectionhint' => '節を編集: $1',
 'toc' => '目次',
 'showtoc' => '表示',
@@ -1134,7 +1134,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'sectioneditnotsupported-text' => 'このページでは節単位編集はサポートされません。',
 'permissionserrors' => '認証エラー',
 'permissionserrorstext' => 'あなたにはこの操作を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
-'permissionserrorstext-withaction' => 'あなたには$2を行う権限がありません。{{PLURAL:$1|理由}}は以下の通りです:',
+'permissionserrorstext-withaction' => 'あなたには「$2」を行う権限はありません。{{PLURAL:$1|理由}}は以下の通りです:',
 'recreate-moveddeleted-warn' => "'''警告:以前削除されたページを再作成しようとしています。'''
 
 このページの編集を続行するのが適切かどうか確認してください。
@@ -1164,11 +1164,15 @@ IP アドレスは複数の利用者で共有されている場合がありま
 これらの値は省略されました。",
 'post-expand-template-argument-category' => '省略されたテンプレート引数を含むページ',
 'parser-template-loop-warning' => 'テンプレートのループが検出されました:[[$1]]',
-'parser-template-recursion-depth-warning' => 'テンプレートの再帰深さ($1)が上限値を超えました',
-'language-converter-depth-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' => 'ページが展開の深さ制限を超えました',
 
 # "Undo" feature
-'undo-success' => 'ã\81\93ã\81®ç·¨é\9b\86ã\82\92å\8f\96ã\82\8aæ¶\88ã\81\99ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dます。
+'undo-success' => 'ã\81\93ã\81®ç·¨é\9b\86ã\82\92å\8f\96ã\82\8aæ¶\88ã\81\9bます。
 下記の差分を確認し、本当に取り消すべきだと確認してから、変更を保存して取り消しを完了してください。',
 'undo-failure' => '中間の版での編集と競合したため、取り消せませんでした。',
 'undo-norev' => '取り消そうとした編集が存在しないか削除済みのため取り消せませんでした。',
@@ -1195,7 +1199,7 @@ $3が示した理由は ''$2'' です。",
 'last' => '前',
 'page_first' => '先頭',
 'page_last' => '末尾',
-'histlegend' => "差分の選択:比較したい版のラジオボタンを選択し、エンターキーを押すか、下部のボタンを押します。<br />
+'histlegend' => "差分の選択:比較したい版のラジオボタンを選択し、Enterキーを押すか、下部のボタンを押します。<br />
 凡例:'''({{int:cur}})'''=最新版との比較、'''({{int:last}})'''=直前の版との比較、'''{{int:minoreditletter}}'''=細部の編集",
 'history-fieldset-title' => '履歴の閲覧',
 'history-show-deleted' => '削除済みのみ',
@@ -1345,7 +1349,6 @@ $1",
 
 # Diffs
 'history-title' => '「$1」の変更履歴',
-'difference' => '(版間での差分)',
 'difference-multipage' => '(ページ間の差分)',
 'lineno' => '$1行:',
 'compareselectedversions' => '選択した版同士を比較',
@@ -1376,20 +1379,20 @@ $1",
 'searchmenu-new' => "'''このウィキでページ「[[:$1|$1]]」を新規作成する'''",
 'searchhelp-url' => 'Help:目次',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|この文字列から始まる名前のページを見る]]',
-'searchprofile-articles' => '記事',
+'searchprofile-articles' => '本文ページ',
 'searchprofile-project' => 'ヘルプとプロジェクトページ',
 'searchprofile-images' => 'マルチメディア',
 'searchprofile-everything' => 'すべて',
 'searchprofile-advanced' => '詳細',
 'searchprofile-articles-tooltip' => '$1で検索',
-'searchprofile-project-tooltip' => '$1検索',
+'searchprofile-project-tooltip' => '$1内を検索',
 'searchprofile-images-tooltip' => 'ファイルを検索',
-'searchprofile-everything-tooltip' => '全ページ(トークページ含む)を検索',
-'searchprofile-advanced-tooltip' => '特定の名前空間を検索',
+'searchprofile-everything-tooltip' => '全本文ページ(トークページ含む)を検索',
+'searchprofile-advanced-tooltip' => '特定の名前空間を検索',
 'search-result-size' => '$1($2単語)',
 'search-result-category-size' => '$1件($2下位カテゴリ、$3ファイル)',
 'search-result-score' => '関連度:$1%',
-'search-redirect' => 'ï¼\88$1ã\82\92転é\80\81)',
+'search-redirect' => 'ï¼\88$1ã\81\8bã\82\89ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88)',
 'search-section' => '($1の節)',
 'search-suggest' => 'もしかして:$1',
 'search-interwiki-caption' => '姉妹プロジェクト',
@@ -1407,7 +1410,7 @@ $1",
 'showingresultsheader' => "「'''$4'''」に対する{{PLURAL:$5|'''$3'''件中の'''$1'''件の結果|'''$3'''件中の'''$1'''件目から'''$2'''件目の結果}}",
 'nonefound' => "'''注意''':既定では一部の名前空間しか検索されません。
 ''all:''を前に付けると、すべて(トークページやテンプレートなどを含む)を対象にできます。検索する名前空間を前に付けることもできます。",
-'search-nonefound' => '問い合わせに合致する結果はありませんでした。',
+'search-nonefound' => '問い合わせに合致する検索結果はありませんでした。',
 'powersearch' => '高度な検索',
 'powersearch-legend' => '高度な検索',
 'powersearch-ns' => '名前空間を指定して検索:',
@@ -1428,7 +1431,7 @@ $1",
 'qbsettings-fixedright' => '右端',
 'qbsettings-floatingleft' => 'ウィンドウの左上に固定',
 'qbsettings-floatingright' => 'ウィンドウの右上に固定',
-'qbsettings-directionality' => 'あなたの言語のスクリプトの方向に応じて固定',
+'qbsettings-directionality' => 'あなたの言語の文字体系の書字方向に応じて固定',
 
 # Preferences page
 'preferences' => '個人設定',
@@ -1446,7 +1449,7 @@ $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-max' => '最大数:1000',
@@ -1530,7 +1533,8 @@ HTMLタグを見直してください。',
 'prefs-help-realname' => '本名は省略できます。
 入力すると、あなたの著作物の帰属表記に本名を使用します。',
 'prefs-help-email' => 'メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。',
-'prefs-help-email-others' => 'あなたの身元を明らかにすることなく、他の利用者に利用者ページやトークページを使用して連絡をしてもらうようにすることもできます。',
+'prefs-help-email-others' => '利用者ページやトークページ上のリンクを通じて、他の利用者があなたにメールで連絡をとれるようにすることもできます。
+他の利用者が連絡をとろうとするとき、あなたのメールアドレスは開示されません。',
 'prefs-help-email-required' => 'メールアドレスが必要です。',
 'prefs-info' => '基本情報',
 'prefs-i18n' => '国際化',
@@ -1600,38 +1604,38 @@ HTMLタグを見直してください。',
 # Rights
 'right-read' => 'ページを閲覧',
 'right-edit' => 'ページを編集',
-'right-createpage' => '(議論ページ以外の)ページを作成',
+'right-createpage' => 'ページ(議論ページ以外)を作成',
 'right-createtalk' => '議論ページを作成',
 'right-createaccount' => '新しい利用者アカウントを作成',
 'right-minoredit' => '細部の編集の印を付ける',
 'right-move' => 'ページの移動',
 'right-move-subpages' => '下位ページを含めてページを移動',
-'right-move-rootuserpages' => 'å\88©ç\94¨è\80\85ã\83\9aã\83¼ã\82¸æ\9c¬ä½\93ã\81®移動',
+'right-move-rootuserpages' => 'å\88©ç\94¨è\80\85ã\83\9aã\83¼ã\82¸æ\9c¬ä½\93ã\82\92移動',
 'right-movefile' => 'ファイルの移動',
 'right-suppressredirect' => 'ページの移動の際に元のページ名からのリダイレクトを作成しない',
-'right-upload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\81®アップロード',
-'right-reupload' => '存在するファイルの上書き',
-'right-reupload-own' => '自らがアップロードした存在するファイルの上書き',
+'right-upload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82\92アップロード',
+'right-reupload' => '既存のファイルに上書き',
+'right-reupload-own' => '自分がアップロードした既存のファイルに上書き',
 'right-reupload-shared' => '共有メディアリポジトリ上のファイルのローカルでの上書き',
-'right-upload_by_url' => 'URLã\81\8bã\82\89ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®アップロード',
+'right-upload_by_url' => 'URLã\81\8bã\82\89ã\83\95ã\82¡ã\82¤ã\83«ã\82\92アップロード',
 'right-purge' => '確認を省略してサイトのキャッシュを破棄',
 'right-autoconfirmed' => '半保護されたページを編集',
-'right-bot' => '自動処理として認識',
+'right-bot' => '自動処理と認識させる',
 'right-nominornewtalk' => '議論ページへ細部の編集をしたときに、新しいメッセージのお知らせを表示しない',
 'right-apihighlimits' => 'API要求でより高い制限値の使用',
 'right-writeapi' => '書き込みAPIの使用',
 'right-delete' => 'ページの削除',
-'right-bigdelete' => '大ã\81\8dã\81ªå±¥æ­´ã\81®ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\81®削除',
+'right-bigdelete' => '大ã\81\8dã\81ªå±¥æ­´ã\81\8cã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\82\92削除',
 'right-deleterevision' => 'ページの特定の版の削除と復帰',
-'right-deletedhistory' => '関連する本文を除く、削除された履歴項目の閲覧',
-'right-deletedtext' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fæ\9c¬æ\96\87ã\81¨å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fç\89\88é\96\93ã\81®å·®å\88\86ã\81®閲覧',
-'right-browsearchive' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81®検索',
+'right-deletedhistory' => '削除された履歴項目(関連する本文を除く)を閲覧',
+'right-deletedtext' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fæ\9c¬æ\96\87ã\81¨å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fç\89\88é\96\93ã\81®å·®å\88\86ã\82\92閲覧',
+'right-browsearchive' => 'å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\82\92検索',
 'right-undelete' => 'ページの復帰',
 'right-suppressrevision' => '管理者から隠された版の確認と復元',
-'right-suppressionlog' => 'é\9d\9eå\85¬é\96\8bè¨\98é\8c²ã\81®閲覧',
+'right-suppressionlog' => 'é\9d\9eå\85¬é\96\8bè¨\98é\8c²ã\82\92閲覧',
 'right-block' => '他の利用者の編集をブロック',
 'right-blockemail' => '利用者のメール送信をブロック',
-'right-hideuser' => 'å\88©ç\94¨è\80\85å\90\8dã\83\96ã\83­ã\83\83ã\82¯ã\81\97ã\80\81公開記録から隠す',
+'right-hideuser' => 'å\88©ç\94¨è\80\85å\90\8dã\82\92ã\83\96ã\83­ã\83\83ã\82¯ã\81\97ã\81¦公開記録から隠す',
 'right-ipblock-exempt' => 'IPブロック、自動ブロック、広域ブロックを回避',
 'right-proxyunbannable' => 'プロキシの自動ブロックを回避',
 'right-unblockself' => '自分自身に対するブロックを解除',
@@ -1645,18 +1649,18 @@ HTMLタグを見直してください。',
 'right-markbotedits' => '巻き戻しをボットの編集として扱う',
 'right-noratelimit' => '速度制限を受けない',
 'right-import' => '他のウィキからのページ取り込み',
-'right-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\8bã\82\89ã\81®ã\83\9aã\83¼ã\82¸ã\81®取り込み',
+'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-patrol' => '他人の編集を巡回済みにする',
 'right-autopatrol' => '自分の編集を自動的に巡回済みにする',
 'right-patrolmarks' => '最近の更新で巡回済み印を閲覧',
-'right-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\81®閲覧',
+'right-unwatchedpages' => 'ã\82¦ã\82©ã\83\83ã\83\81ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ä¸\80覧ã\82\92閲覧',
 'right-mergehistory' => 'ページ履歴の統合',
 'right-userrights' => '全利用者権限を編集',
 'right-userrights-interwiki' => '他のウィキの利用者の利用者権限を編集',
 'right-siteadmin' => 'データベースのロックおよびロック解除',
 'right-override-export-depth' => 'リンク先ページを5階層まで含めて書き出す',
 'right-sendemail' => '他の利用者にメールを送信',
-'right-passwordreset' => 'パスワード再設定メールを閲覧する',
+'right-passwordreset' => 'パスワード再設定メールを閲覧',
 
 # User rights log
 'rightslog' => '利用者権限変更記録',
@@ -1676,7 +1680,7 @@ HTMLタグを見直してください。',
 'action-move-subpages' => 'このページと下位ページの移動',
 'action-move-rootuserpages' => '利用者ページ本体の移動',
 'action-movefile' => 'このファイルの移動',
-'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®アップロード',
+'action-upload' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92アップロード',
 'action-reupload' => 'この既存のファイルに上書き',
 'action-reupload-shared' => '共有リポジトリにあるこのファイルに上書き',
 'action-upload_by_url' => 'URLからこのファイルをアップロード',
@@ -1685,17 +1689,17 @@ HTMLタグを見直してください。',
 'action-deleterevision' => 'この版を削除',
 'action-deletedhistory' => 'このページの削除履歴を表示',
 'action-browsearchive' => '削除されたページの検索',
-'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®復帰',
+'action-undelete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92復帰',
 'action-suppressrevision' => '隠された版の確認と復元',
 'action-suppressionlog' => 'この非公開記録の表示',
 'action-block' => 'この利用者の編集をブロック',
 'action-protect' => 'このページの保護レベルを変更',
 'action-rollback' => '特定ページを最後に編集した利用者の編集を即時巻き戻し',
 'action-import' => 'このページを他のウィキから取り込む',
-'action-importupload' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\8bã\82\89取り込む',
+'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«取り込む',
 '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覧ã\81®表示',
+'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' => 'このページの履歴を統合',
 'action-userrights' => '全利用者権限の変更',
 'action-userrights-interwiki' => '他のウィキ上の利用者の利用者権限変更',
@@ -1716,9 +1720,9 @@ HTMLタグを見直してください。',
 'rcnotefrom' => "以下は、'''$2'''以降の更新です(最大'''$1'''件)。",
 'rclistfrom' => '$1以降の更新を表示する',
 'rcshowhideminor' => '細部の編集を$1',
-'rcshowhidebots' => 'ã\83\9cã\83\83ã\83\88ã\81®ç·¨é\9b\86ã\82\92$1',
-'rcshowhideliu' => 'ã\83­ã\82°ã\82¤ã\83³å\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92$1',
-'rcshowhideanons' => 'å\8c¿å\90\8då\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92$1',
+'rcshowhidebots' => 'ボットを$1',
+'rcshowhideliu' => 'ログイン利用者を$1',
+'rcshowhideanons' => '匿名利用者を$1',
 'rcshowhidepatr' => '巡回された編集を$1',
 'rcshowhidemine' => '自分の編集を$1',
 'rclinks' => '最近$2日間の$1件分を表示<br />$3',
@@ -2033,7 +2037,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'filehist-deleteone' => '削除',
 'filehist-revert' => '差し戻す',
 'filehist-current' => '現在の版',
-'filehist-datetime' => '日付/時刻',
+'filehist-datetime' => '日付時刻',
 'filehist-thumb' => 'サムネイル',
 'filehist-thumbtext' => '$1時点における版のサムネイル',
 'filehist-nothumb' => 'サムネイルなし',
@@ -2043,7 +2047,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'filehist-comment' => 'コメント',
 'filehist-missing' => 'ファイルがありません',
 'imagelinks' => 'ファイルの使用状況',
-'linkstoimage' => 'このファイルへは以下の {{PLURAL:$1|ページ| $1 ページ}}からリンクしています:',
+'linkstoimage' => '以下の {{PLURAL:$1| ページ|$1 ページ}}が、このファイルへリンクしています:',
 'linkstoimage-more' => 'このファイルへは $1 を超える数のページからリンクがあります。
 以下の一覧ではこのファイルにリンクしている最初の $1 ページのみを表示しています。
 [[Special:WhatLinksHere/$2|完全な一覧]]も参照してください。',
@@ -2395,7 +2399,7 @@ contenttype/subtypeの形式で指定してください(例:<tt>image/jpeg</
 'removedwatchtext' => 'ページ「[[:$1]]」を[[Special:Watchlist|ウォッチリスト]]から除去しました。',
 'watch' => 'ウォッチ',
 'watchthispage' => 'このページをウォッチする',
-'unwatch' => 'ウォッチしない',
+'unwatch' => 'ウォッチ解除',
 'unwatchthispage' => 'ウォッチをやめる',
 'notanarticle' => '記事ではありません',
 'notvisiblerev' => '別の利用者による最終版は削除されました',
@@ -2468,8 +2472,8 @@ $UNWATCHURL
 'historywarning' => "'''警告:'''削除しようとしているページには、約$1版の履歴があります:",
 'confirmdeletetext' => 'ページをすべての履歴とともに削除しようとしています。
 本当にこの操作を行いたいか、操作の結果を理解しているか、およびこの操作が[[{{MediaWiki:Policy-url}}|方針]]に従っているかどうか、確認をしてください。',
-'actioncomplete' => '完了しました',
-'actionfailed' => '操作失敗',
+'actioncomplete' => '操作を完了しました',
+'actionfailed' => '操作に失敗しました',
 'deletedtext' => '「$1」は削除されました。
 最近の削除に関しては、$2を参照してください。',
 'dellogpage' => '削除記録',
@@ -2954,7 +2958,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'export-addnstext' => '名前空間からページを追加:',
 'export-addns' => '追加',
 'export-download' => 'ファイルとして保存',
-'export-templates' => 'ã\83\86ã\83³ã\83\97ã\83¬ã\83¼ã\83\88ã\82\82含める',
+'export-templates' => 'ã\83\86ã\83³ã\83\97ã\83¬ã\83¼ã\83\88ã\82\92含める',
 'export-pagelinks' => '以下の階層までのリンク先ページを含める:',
 
 # Namespace 8 related
@@ -3062,13 +3066,13 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-pt-anontalk' => 'このIPアドレスからなされた編集についての議論',
 'tooltip-pt-preferences' => '個人設定',
 'tooltip-pt-watchlist' => '変更を監視しているページの一覧',
-'tooltip-pt-mycontris' => '自分の投稿一覧',
+'tooltip-pt-mycontris' => '自分の投稿一覧',
 'tooltip-pt-login' => 'ログインすることが推奨されます。ただし、必須ではありません。',
 'tooltip-pt-anonlogin' => 'ログインすることが推奨されます。ただし、必須ではありません。',
 'tooltip-pt-logout' => 'ログアウト',
 'tooltip-ca-talk' => '本文ページについての議論',
 'tooltip-ca-edit' => 'このページを編集できます。保存する前にプレビューボタンを使用してください。',
-'tooltip-ca-addsection' => '新しい節を開始する',
+'tooltip-ca-addsection' => '新しい節を開始',
 'tooltip-ca-viewsource' => 'このページは保護されています。
 ページのソースを閲覧できます。',
 'tooltip-ca-history' => 'このページの過去の版',
@@ -3094,7 +3098,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-t-recentchangeslinked' => 'このページからリンクしているページの最近の更新',
 'tooltip-feed-rss' => 'このページのRSSフィード',
 'tooltip-feed-atom' => 'このページのAtomフィード',
-'tooltip-t-contributions' => 'この利用者の投稿の一覧を表示',
+'tooltip-t-contributions' => 'この利用者の投稿の一覧',
 'tooltip-t-emailuser' => 'この利用者にメールを送信',
 'tooltip-t-upload' => 'ファイルをアップロード',
 'tooltip-t-specialpages' => '特別ページの一覧',
@@ -3110,10 +3114,10 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-ca-nstab-template' => 'テンプレートを表示',
 'tooltip-ca-nstab-help' => 'ヘルプページを表示',
 'tooltip-ca-nstab-category' => 'カテゴリページを閲覧',
-'tooltip-minoredit' => 'ã\81\93ã\81®ç·¨é\9b\86ã\82\92ç´°é\83¨ã\81®å¤\89æ\9b´ã\81¨ã\83\9eã\83¼ã\82¯',
+'tooltip-minoredit' => 'ã\81\93ã\81®ç·¨é\9b\86ã\81«ç´°é\83¨ã\81®å¤\89æ\9b´ã\81®å\8d°ã\82\92ä»\98ã\81\91ã\82\8b',
 'tooltip-save' => '変更を保存',
 'tooltip-preview' => '変更をプレビューで確認できます。保存前に使用してください!',
-'tooltip-diff' => '文章への変更を表示',
+'tooltip-diff' => '文章中で変更した箇所を表示',
 'tooltip-compareselectedversions' => '選択された二つの版の差分を表示します。',
 'tooltip-watch' => 'このページをウォッチリストへ追加します',
 'tooltip-watchlistedit-normal-submit' => 'タイトルを削除',
@@ -3752,7 +3756,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '外部アプリケーションを使用してこのファイルを編集',
-'edit-externally-help' => 'ï¼\88詳ã\81\97ã\81\84æ\83\85å ±は[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
+'edit-externally-help' => 'ï¼\88詳ã\81\97ã\81\8fは[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'すべて',
@@ -3860,7 +3864,7 @@ $5
 'colon-separator' => ':',
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '',
-'parentheses' => '($1)',
+'parentheses' => '($1)',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr;前ページ',
@@ -3928,7 +3932,7 @@ $5
 
 # Watchlist editing tools
 'watchlisttools-view' => '関連する変更の表示',
-'watchlisttools-edit' => 'ウォッチリストの表示と編集',
+'watchlisttools-edit' => 'ウォッチリストの閲覧と編集',
 'watchlisttools-raw' => 'ウォッチリストをそのまま編集',
 
 # Iranian month names
index b056ed1..00c4950 100644 (file)
@@ -701,7 +701,6 @@ Lejen: '''({{int:cur}})''' = difrans wid lietis rivijan, '''({{int:last}})''' =
 
 # Diffs
 'history-title' => 'Rivijan ischri a "$1"',
-'difference' => '(Difrans bitwiin rivijandem)',
 'lineno' => 'Lain $1:',
 'compareselectedversions' => 'Kompier silektid rivijan',
 'editundo' => 'andu',
index 652abaf..2f6704b 100644 (file)
@@ -432,7 +432,6 @@ hersenenge, (førge) = førskel til den førge hersenenge, l = lile til mendre 
 
 # Diffs
 'history-title' => 'Hersengsskigte før "$1"',
-'difference' => '(Førskelle mellem hersenenger)',
 'lineno' => 'Lenje $1:',
 'compareselectedversions' => 'Sammenlign valgte hersenenger',
 'editundo' => 'baĝgøt',
index 82f5a1e..b5fbceb 100644 (file)
@@ -867,7 +867,6 @@ Gunakna tombol radio kanggo nggabungaké révisi-révisi sing digawé sadurungé
 
 # Diffs
 'history-title' => 'Sajarah revisi saka "$1"',
-'difference' => '(Prabédan antarrevisi)',
 'lineno' => 'Larikan $1:',
 'compareselectedversions' => 'Bandhingna vèrsi kapilih',
 'showhideselectedversions' => 'Tampilaké/dhelikaké révisi kapilih',
index 0a317eb..9f45136 100644 (file)
@@ -535,6 +535,8 @@ $2',
 'filereadonlyerror' => 'ფაილი "$1" შეცვლა ვერ ხერხდება, რადგანაც ფაილის საცავი "$2" მხოლოდ კითხვის რეჟიმშია.
 
 ადმინისტრატორი რომელმაც ის დაბლოკა მიუთითა შემდეგი მიზეზი: "$3".',
+'invalidtitle-knownnamespace' => 'დაუშვებელი სათაური სახელთა სივრცე "$2" და ტექსტი "$3"-თან',
+'invalidtitle-unknownnamespace' => 'დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი "$2"-ით',
 
 # Virus scanner
 'virus-badscanner' => "შეცდომა. ვირუსთა უცნობი სკანერი: ''$1''",
@@ -852,7 +854,7 @@ $2
 'token_suffix_mismatch' => "'''თქვენი შესწორება გაუქმდა რადგანაც პროგრამა არასწორედ აღიქვამს პუნქტუაციის ნიშნებს რედაქტირების ფანჯარაში. შესწრება გაუქმდა სტატიის არ გაფუჭების მიზნით. შესაძლოა ეს გამოწვეულია გაფუჭებული ვებ პროქსის გამოყენებით.'''",
 'edit_form_incomplete' => "'''რედაქტირებების ნაწილმა სერვერამდე ვერ მიაღწია; გთხოვთ, შეამოწმეთ თქვენი რედაქტირებების სრულყოფილება და სცადეთ განმეორებით.'''",
 'editing' => 'რედაქტირება: $1',
-'creating' => 'იქმნება $1',
+'creating' => 'იქმნება: „$1“',
 'editingsection' => 'რედაქტირება - $1 (სექცია)',
 'editingcomment' => 'რედაქტირება: $1 (ახალი სექცია)',
 'editconflict' => 'რედაქტირების კონფლიქტი: $1',
@@ -931,6 +933,11 @@ $2
 'parser-template-loop-warning' => 'აღმოჩენილია ლუპი თარგ: [[$1]]-ში',
 'parser-template-recursion-depth-warning' => 'თარგის რეკურსიის სიღრმე აემატება დაშვებულს ($1)',
 'language-converter-depth-warning' => 'ენათა გადამუშავების კონვერციის ლიმიტი ამოწურულია ($1)',
+'node-count-exceeded-category' => 'გვერდები, რომელშიც გადამეტებულია კვანძების რაოდენობა',
+'node-count-exceeded-warning' => 'გვერდზე გადამეტებულია კვანძების რაოდენობა',
+'expansion-depth-exceeded-category' => 'გვერდები გახსნის სიღრმის გადამეტებით',
+'expansion-depth-exceeded-warning' => 'გვერდზე გადამეტებულია ჩადგმების ზღვარი',
+'parser-unstrip-recursion-limit' => 'გადამეტებულია რეკურსიის ზღვარი ($1)',
 
 # "Undo" feature
 'undo-success' => 'რედაქტირების გაუქმება შესაძლებელია. გთხოვთ შეამოწმოთ განსხვავება ქვევით, რათა დარწმუნდეთ, რომ ეს ის არის რაც თქვენ გსურთ, შემდეგ კი შეინახეთ ცვლილებები რათა დაასრულოთ რედაქტირების გაუქმება.',
@@ -1109,7 +1116,8 @@ $1",
 
 # Diffs
 'history-title' => 'ცვლილებათა ისტორია სტატიაში „$1“',
-'difference' => '(სხვაობა ვერსიებს შორის)',
+'difference-title' => 'განსხვავება გადახედვებს შორის " $1 "',
+'difference-title-multipage' => 'განსხვავება „$1“ და „$2“ გვერდებს შორის',
 'difference-multipage' => '(განსხვავება გვერდებს შორის)',
 'lineno' => 'ხაზი $1:',
 'compareselectedversions' => 'არჩეული ვერსიების შედარება',
index 0f56ab5..52e77bb 100644 (file)
@@ -811,7 +811,6 @@ Sha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı,
 
 # Diffs
 'history-title' => '"$1" betinin\' nusqa tariyxı',
-'difference' => "(Nusqalar arasındag'ı ayırmashılıq)",
 'lineno' => 'Qatar No $1:',
 'compareselectedversions' => "Saylang'an nusqalardı salıstırıw",
 'editundo' => 'qaytar',
index bc34b44..ce2593c 100644 (file)
@@ -655,7 +655,6 @@ Inedbalen wiyaḍ deg wiki-yagi zemren ad ẓren imuren i yettwafren u zemren a
 
 # Diffs
 'history-title' => 'Amazray n allasen n "$1"',
-'difference' => '(Imgerraden ger tisiwal)',
 'lineno' => 'Ajerriḍ $1:',
 'compareselectedversions' => 'Ẓer imgerraden ger tisiwal i textareḍ',
 'editundo' => 'ssefsu',
index dc20444..d68e560 100644 (file)
@@ -869,7 +869,6 @@ $1",
 
 # Diffs
 'history-title' => '$1 - зэхъуэкIыныгъэм и тхыдэ',
-'difference' => '(Іэмалхэм я зэрызыщхьэщыкІыгъуэр)',
 'lineno' => 'Сатыр $1:',
 'compareselectedversions' => 'Хэха версиэхэр зэгъэпщэн',
 'editundo' => 'щӀегъуэжын',
index d173f73..91a3f50 100644 (file)
@@ -591,7 +591,6 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 
 # Diffs
 'history-title' => 'تاریخچہ "$1"',
-'difference' => '(اصلاحاتہ فرق)',
 'lineno' => 'لکیر $1:',
 'compareselectedversions' => 'منتخب متـنو موازنہ',
 'editundo' => 'استرجع',
index 483a7d2..e802c5b 100644 (file)
@@ -391,9 +391,9 @@ Kerem kerê, deqêna oncia bıcerrebnê.",
 'protectedpagetext' => 'Na pele vurnaisu rê qapan biya.',
 'viewsourcetext' => 'Sıma şikinê çımê na pele bıvênê u kopya kerê:',
 'protectedinterface' => "Na pele ''software'' rê meqalunê caunê bırnau dana, u qapana ke suıstımalu rê engel bo.",
-'editinginterface' => "'''Teme:''' Sıma hao jü pela ke serba ''software'' meqalunê caunê bırnau dana, vurnenê.
+'editinginterface' => "'''Teme:''' Sıma hao jü pela ke serba nustê meqalunê caunê bırnau dana, vurnenê.
 Vurnaisê na pele karberunê binu rê serpela karberi kena ke bıasno.
-Serba çarnais, yardımê [//translatewiki.net/wiki/Main_Page?setlang=kiu translatewiki.net]yê procê dos-kerdene rê diqet kerê.",
+Serba çarnaişi, yardımê [//translatewiki.net/wiki/Main_Page?setlang=kiu translatewiki.net]i ra procêdoskerdene rê diqet kerê.",
 'sqlhidden' => '(Persê SQLi nımıteo)',
 'cascadeprotected' => 'Na pele esterıtene ra sıtar biya, çıke na zerrê {{PLURAL:$1|pela ke|pelunê ke}} dera/derê be "cascading" opsiyoni kılit biya, $2 de bena ra.',
 'namespaceprotected' => "'''$1''' ''namespace'' de desturê sıma be vurnaisê pelu çino.",
@@ -679,7 +679,6 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşikinê
 
 # Diffs
 'history-title' => 'Viartê pelga "$1"ine',
-'difference' => 'Ferqê wertê vurnaisu',
 'lineno' => 'Rêza $1i:',
 'compareselectedversions' => 'Varyantunê weçinıtun têver sane',
 'editundo' => 'peyser bia',
index 8cffc74..3565a67 100644 (file)
@@ -1106,7 +1106,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 
 # Diffs
 'history-title' => '«$1» — تۇزەتۋ تارىيحى',
-'difference' => '(تۇزەتۋلەر اراسىنداعى ايىرماشىلىق)',
 'lineno' => 'جول ٴنومىرى $1:',
 'compareselectedversions' => 'بولەكتەنگەن نۇسقالاردى سالىستىرۋ',
 'editundo' => 'جوققا شىعارۋ',
index b07d4b6..15a4e51 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author AlefZet
  * @author Alibek Kisybay
+ * @author Daniyar
  * @author GaiJin
  * @author Kaztrans
  * @author Urhixidur
@@ -369,35 +370,35 @@ $messages = array(
 'tog-newpageshidepatrolled' => 'Тексерілген беттерді жаңа беттер тізімінде көрсетпеу',
 'tog-extendwatchlist' => 'Бақылау тізімді ұлғайту (барлық жарамды өзгерістерді көрсету)',
 'tog-usenewrc' => 'Кеңейтілген жуықтағы өзгерістер (JavaScript)',
-'tog-numberheadings' => 'Ð\91аÑ\81 Ð¶Ð¾Ð»Ð´Ð°Ñ\80дÑ\8b Ó©Ð·Ð´Ñ\96кÑ\82Ñ\96к Ð½Ð¾Ð¼Ñ\96Ñ\80ле',
-'tog-showtoolbar' => 'Өңдеу қуралдар жолағын көрсет (JavaScript)',
+'tog-numberheadings' => 'Ð\9cазмұн Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bпÑ\82аÑ\80Ñ\8bн Ð°Ð²Ñ\82омаÑ\82Ñ\82Ñ\8b Ð½Ó©Ð¼Ñ\96Ñ\80леÑ\83',
+'tog-showtoolbar' => 'Өңдеу құралдары орналасқан аспаптар жақтауын көрсету (JavaScript-ті қажет етеді)',
 'tog-editondblclick' => 'Қос шерту арқылы бетті өңдеу (JavaScript)',
 'tog-editsection' => 'Бөлімдерді [өңдеу] сілтемесімен өңдеуін қос',
 'tog-editsectiononrightclick' => 'Бөлім тақырыбын оң нұқумен өңдеуін қос (JavaScript)',
-'tog-showtoc' => 'Мазмұнын көрсет (3-тен арта бөлімі барыларға)',
-'tog-rememberpassword' => 'Ð\9aÑ\96Ñ\80генÑ\96мдÑ\96 Ð¾Ñ\81Ñ\8b ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82ерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})',
-'tog-watchcreations' => 'Ð\9cен Ð±Ð°Ñ\81Ñ\82аÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ме Ò¯Ñ\81Ñ\82е',
-'tog-watchdefault' => 'Ð\9cен Ó©Ò£Ð´ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ме Ò¯Ñ\81Ñ\82е',
-'tog-watchmoves' => 'Ð\9cен Ð¶Ñ\8bлжÑ\8bÑ\82Ò\9bан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ме Ò¯Ñ\81Ñ\82е',
-'tog-watchdeletion' => 'Ð\9cен Ð¶Ð¾Ð¹Ò\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ме Ò¯Ñ\81Ñ\82е',
+'tog-showtoc' => 'Мазмұнын көрсету (3-тен астам бөлімі болған жағдайда ғана)',
+'tog-rememberpassword' => 'ТÑ\96Ñ\80келгÑ\96мдÑ\96 Ð¾Ñ\81Ñ\8b Ð±Ñ\80аÑ\83зерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})',
+'tog-watchcreations' => 'Ð\9cен Ð±Ð°Ñ\81Ñ\82аÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81',
+'tog-watchdefault' => 'Ð\9cен Ó©Ò£Ð´ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81',
+'tog-watchmoves' => 'Ð\9cен Ð¶Ñ\8bлжÑ\8bÑ\82Ò\9bан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81',
+'tog-watchdeletion' => 'Ð\9cен Ð¶Ð¾Ð¹Ò\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81',
 'tog-minordefault' => 'Әдепкіден барлық өңдемелерді шағын деп белгіле',
-'tog-previewontop' => 'Қарап шығу аумағы кірістіру орны алдында',
+'tog-previewontop' => 'Қарап шығу аумағын өңдеу терезесінің жоғарғы жағында көрсету',
 'tog-previewonfirst' => 'Бірінші өңдегенде қарап шығу',
 'tog-nocache' => 'Бет бүркемелеуін өшір',
-'tog-enotifwatchlistpages' => 'Ð\91аÒ\9bÑ\8bлаÑ\83Ñ\8bÒ£Ñ\8bздаÒ\93Ñ\8b Ð±ÐµÑ\82 Ó©Ð·Ð³ÐµÑ\80генде Ðµ-паштаға хабарлама жіберу',
+'tog-enotifwatchlistpages' => 'Ð\91аÒ\9bÑ\8bлаÑ\83Ñ\8bÒ£Ñ\8bздаÒ\93Ñ\8b Ð±ÐµÑ\82 Ó©Ð·Ð³ÐµÑ\80генде Ðµ-поштаға хабарлама жіберу',
 'tog-enotifusertalkpages' => 'Талқылауым өзгергенде маған хат жібер',
 'tog-enotifminoredits' => 'Шағын өңдеме туралы да маған хат жібер',
 'tog-enotifrevealaddr' => 'Е-поштамның мекенжайын ескерту хаттарда аш',
 'tog-shownumberswatching' => 'Бақылап тұрған қатысушылардың санын көрсет',
 'tog-oldsig' => 'Ағымдағы қолтаңбаңыз:',
-'tog-fancysig' => 'Ò\9aам Ò\9bолÑ\82аңба (өздÑ\96кÑ\82Ñ\96к Ñ\81Ñ\96лÑ\82емеÑ\81Ñ\96з)',
+'tog-fancysig' => 'Ò\9aолÑ\82аңбанÑ\8b Ñ\83икимÓ\99Ñ\82Ñ\96н Ñ\80еÑ\82Ñ\96нде Ò\9bаÑ\80аÑ\81Ñ\82Ñ\8bÑ\80Ñ\83 (авÑ\82омаÑ\82Ñ\82Ñ\8b Ñ\81Ñ\96лÑ\82еме Ò\9bойÑ\8bлмайдÑ\8b)',
 'tog-externaleditor' => 'Шеттік өңдеуішті әдепкіден қолдан (тек сарапшылар үшін, компьютеріңізде арнаулы бапталымдар керек)',
 'tog-externaldiff' => 'Шеттік айырмағышты әдепкіден қолдан (тек сарапшылар үшін, компьютеріңізде арнаулы бапталымдар керек)',
 'tog-showjumplinks' => '«Өтіп кету» қатынау сілтемелерін қос',
 'tog-uselivepreview' => 'Тура қарап шығуды қолдану (JavaScript) (Сынақтама)',
 'tog-forceeditsummary' => 'Өңдеменің қысқаша мазмұндамасы бос қалғанда маған ескерт',
-'tog-watchlisthideown' => 'Өңдемелерімді бақылау тізімнен жасыр',
-'tog-watchlisthidebots' => 'Бот өңдемелерін бақылау тізімнен жасыр',
+'tog-watchlisthideown' => 'Өңдемелерімді бақылау тізімінен жасыр',
+'tog-watchlisthidebots' => 'Бот өңдемелерін бақылау тізімінен жасыр',
 'tog-watchlisthideminor' => 'Шағын өңдемелерді бақылау тізімінде көрсетпеу',
 'tog-watchlisthideliu' => 'Бақылау тізіміндегі қатысушылардың өңдеулерін көрсетпеу',
 'tog-watchlisthideanons' => 'Бақылау тізіміндегі жасырын қатысушылардың өңдеулерін көрсетпеу',
@@ -416,7 +417,7 @@ $messages = array(
 # Font style option in Special:Preferences
 'editfont-style' => 'Өңдеу жолындағы қаріптің түрі',
 'editfont-default' => 'Негізгі браузер',
-'editfont-monospace' => 'Ð\9cоноенді қаріп',
+'editfont-monospace' => 'Ð\91Ñ\96Ñ\80дей енді қаріп',
 'editfont-sansserif' => 'Ноқатсыз қаріп',
 'editfont-serif' => 'Ноқатты қаріп',
 
@@ -499,7 +500,7 @@ $messages = array(
 'mypage' => 'Жеке бетім',
 'mytalk' => 'Талқылауым',
 'anontalk' => 'IP талқылауы',
-'navigation' => 'Ð\9dавигаÑ\86иÑ\8f',
+'navigation' => 'Ð\91аÒ\93Ñ\8bÑ\82Ñ\82аÑ\83',
 'and' => '&#32;және',
 
 # Cologne Blue skin
@@ -525,7 +526,7 @@ $messages = array(
 'vector-view-edit' => 'Өңдеу',
 'vector-view-history' => 'Тарихы',
 'vector-view-view' => 'Оқу',
-'vector-view-viewsource' => 'Қайнар көзін қарау',
+'vector-view-viewsource' => 'Қайнарын қарау',
 'actions' => 'Әрекеттер',
 'namespaces' => 'Есім кеңістігі',
 'variants' => 'Нұсқалар',
@@ -564,7 +565,7 @@ $messages = array(
 'specialpage' => 'Арнайы бет',
 'personaltools' => 'Жеке құралдар',
 'postcomment' => 'Жаңа бөлім',
-'articlepage' => 'Мағлұмат бетін қарау',
+'articlepage' => 'Мәлімет бетін қарау',
 'talk' => 'Талқылау',
 'views' => 'Көрініс',
 'toolbox' => 'Құралдар',
@@ -585,19 +586,19 @@ $messages = array(
 'jumpto' => 'Мында өту:',
 'jumptonavigation' => 'шарлау',
 'jumptosearch' => 'іздеу',
-'view-pool-error' => 'Кешіріңіз, қазір серверлер шектен тыс жүктеулі.
+'view-pool-error' => 'Кешіріңіз, қазір серверлер шектен тыс жүктелуде.
 Осы бетті қарауға өте көп сұраныс жасалды.
-Өтініш,  күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.
+Өтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.
 
 $1',
 'pool-timeout' => 'Бұғатталу уақытын күту мерзімі өтті',
-'pool-queuefull' => 'Сұранымдар жинақтауышы толы',
+'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 шартымен жетімді.',
 'copyrightpage' => '{{ns:project}}:Авторлық құқықтар',
 'currentevents' => 'Ағымдағы оқиғалар',
 'currentevents-url' => 'Project:Ағымдағы оқиғалар',
@@ -615,31 +616,31 @@ $1',
 'privacypage' => 'Project:Жеке құпиясын сақтау',
 
 'badaccess' => 'Рұқсат беру қатесі',
-'badaccess-group0' => 'СұÑ\80аÑ\82Ñ\8bлÒ\93ан Ó\99Ñ\80екеÑ\82Ñ\96Ò£Ñ\96здÑ\96 Ð¶ÐµÐ³Ñ\83Ñ\96Ò£Ñ\96зге рұқсат етілмейді.',
+'badaccess-group0' => 'СұÑ\80аÑ\82Ñ\8bлÒ\93ан Ó\99Ñ\80екеÑ\82Ñ\96Ò£Ñ\96здÑ\96 Ð¾Ñ\80Ñ\8bндаÑ\83Ò\93а рұқсат етілмейді.',
 'badaccess-groups' => 'Аталған әрекетті тек {{PLURAL:$2|топтардың|топтың}} $1 қатысушылары ғана атқара алады.',
 
 'versionrequired' => 'MediaWiki $1 нұсқасы керек',
 'versionrequiredtext' => 'Бұл бетті қолдану үшін MediaWiki $1 нұсқасы керек. [[Special:Version|Жүйе нұсқасы бетін]] қараңыз.',
 
-'ok' => 'OK',
+'ok' => 'Жарайды',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => '«$1» бетінен алынған',
 'youhavenewmessages' => 'Сізде $1 бар ($2).',
-'newmessageslink' => 'жаңа хабарлар',
-'newmessagesdifflink' => 'соңғы өзгерісіне',
-'youhavenewmessagesmulti' => '$1 дегенде жаңа хабарлар бар',
+'newmessageslink' => 'жаңа хабарламалар',
+'newmessagesdifflink' => 'соңғы өзгер',
+'youhavenewmessagesmulti' => '$1 дегенде жаңа хабарламалар бар',
 'editsection' => 'өңдеу',
 'editold' => 'өңдеу',
-'viewsourceold' => 'қайнар көзін қарау',
+'viewsourceold' => 'қайнарын қарау',
 'editlink' => 'өңдеу',
-'viewsourcelink' => 'қайнар көзін қарау',
-'editsectionhint' => 'Ð\9cÑ\8bна Ð±өлімді өңдеу: $1',
+'viewsourcelink' => 'қайнарын қарау',
+'editsectionhint' => 'Ð\91өлімді өңдеу: $1',
 'toc' => 'Мазмұны',
-'showtoc' => 'көрсет',
-'hidetoc' => 'жасыр',
+'showtoc' => 'көрсету',
+'hidetoc' => 'жасыру',
 'collapsible-collapse' => 'Түру',
 'collapsible-expand' => 'Жазу',
-'thisisdeleted' => '$1 қарайсыз ба, не қалпына келтіресіз бе?',
+'thisisdeleted' => '$1 қарайсыз ба, немесе қалпына келтіресіз бе?',
 'viewdeleted' => '$1 қарайсыз ба?',
 'restorelink' => 'Жойылған $1 өңдемені',
 'feedlinks' => 'Арна:',
@@ -656,21 +657,21 @@ $1',
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Мақала',
 'nstab-user' => 'Жеке бет',
-'nstab-media' => 'ТаÑ\81па Ð±ÐµÑ\82Ñ\96',
+'nstab-media' => 'Ð\9cедиа',
 'nstab-special' => 'Арнайы бет',
-'nstab-project' => 'Жоба беті',
-'nstab-image' => 'Файл беті',
-'nstab-mediawiki' => 'Хабар',
+'nstab-project' => 'Жоба',
+'nstab-image' => 'Файл',
+'nstab-mediawiki' => 'Хабарлама',
 'nstab-template' => 'Үлгі',
 'nstab-help' => 'Анықтама',
 'nstab-category' => 'Санат',
 
 # Main script and global functions
-'nosuchaction' => 'Мынадай еш әрекет жоқ',
+'nosuchaction' => 'Мұндай әрекет жоқ',
 'nosuchactiontext' => 'URL-дегі көрсетілген әрекет қате.
-Бәлкім, сіз URL теру барысында қате жібердіңіз немесе қате сілтеме бойынша өттіңіз.
+Бәлкім, Сіз URL теру барысында қате жібердіңіз немесе қате сілтеме бойынша өттіңіз.
 Бұл сондай-ақ {{SITENAME}} жобасында қателікті көрсетуі мүмкін.',
-'nosuchspecialpage' => 'Мынадай еш арнайы бет жоқ',
+'nosuchspecialpage' => 'Мұндай арнайы бет жоқ',
 'nospecialpagetext' => '<strong>Сіздің сұраған арнайы бетіңіз жоқ.</strong>
 
 Бар арнайы беттер тізімі: [[Special:SpecialPages|{{int:specialpages}}]].',
@@ -688,9 +689,9 @@ $1',
 «$1»
 мына «$2» функциясынан болды .
 Дерекқор "$3: $4" қатесін қайтарды.',
-'laggedslavemode' => 'Құлақтандыру: Бетте жуықтағы жаңалаулар болмауы мүмкін.',
+'laggedslavemode' => "'''Ескерту:''' Бетте жуықтағы жаңартулар болмауы мүмкін.",
 'readonly' => 'Дерекқоры құлыпталған',
-'enterlockreason' => 'Құлыптау себебін, қай уақытқа дейін құлыпталғанын кірістіріп, енгізіңіз',
+'enterlockreason' => 'Құлыптау себебін, қай уақытқа дейін құлыпталғанын кірістіріп, енгізіңіз.',
 'readonlytext' => 'Бұл дерекқор жаңадан жазу және басқа өзгерістер жасаудан ағымда құлыпталынған, мүмкін күнде-күн дерекқорды баптау үшін, бұны бітіргеннен соң қалыпты іске қайтарылады.
 
 Құлыптаған әкімші бұны былай түсіндіреді: $1',
@@ -699,13 +700,13 @@ $1',
 Бұл ескірген айырма сілтемесіне немесе жойылған бет тарихы сілтемесіне ергеннен бола береді.
 
 Егер бұл орынды болмаса, бағдарламалық жасақтамадағы қатеге тап болуыңыз мүмкін.
-Бұл туралы нақты URL жайына аңғартпа жасап, әкімшіге баянаттаңыз.',
+Бұл туралы нақты URL жайына аңғартпа жасап, [[Special:ListUsers/sysop|әкімшіге]] баяндаңыз.',
 'missingarticle-rev' => '(түзету нұсқасы: $1)',
-'missingarticle-diff' => '(Ð\90йÑ\80м.: $1, $2)',
-'readonly_lag' => 'Жетек дерекқор серверлер басқысымен қадамланғанда осы дерекқор өздіктік құлыпталынған',
+'missingarticle-diff' => '(Ð\90йÑ\8bÑ\80Ñ\8bм: $1, $2)',
+'readonly_lag' => 'Жетек дерекқор серверлер басқасымен қадамланғанда осы дерекқор өздіктік құлыпталынған',
 'internalerror' => 'Ішкі қате',
 'internalerror_info' => 'Ішкі қатесі: $1',
-'fileappenderrorread' => 'Толықтыру кезінде «$1» оқылмады',
+'fileappenderrorread' => 'Толықтыру кезінде «$1» оқылмады.',
 'fileappenderror' => '«$2» -ге  "$1" -ді қосу мүмкін болмады.',
 'filecopyerror' => '«$1» файлы «$2» файлына көшірілмеді.',
 'filerenameerror' => '«$1» файл атауы «$2» атауына өзгертілмеді.',
@@ -723,18 +724,18 @@ $1',
 '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.',
+'perfcachedts' => 'Келесі дерек бүркемеленген, соңғы жаңаланған кезі: $1. Кэште {{PLURAL:$4|жазбалардан}} артық сақталмайды..',
 'querypage-no-updates' => 'Бұл беттің жаңартылуы ағымда өшірілген. Деректері қазір өзгертілмейді.',
 'wrong_wfQuery_params' => 'wfQuery() функциясы үшін бұрыс бапталымдары бар<br />
 Жете: $1<br />
 Сұраным: $2',
-'viewsource' => 'Қайнар көзін қарау',
+'viewsource' => 'Қайнарын қарау',
 'viewsource-title' => '$1 бетінің бастапқы мәтінін қарау',
 'actionthrottled' => 'Әрекет бәсеңдетілді',
 'actionthrottledtext' => 'Спамға қарсы күрес есебінде, осы әрекетті қысқа уақытта тым көп рет орындауыңыз шектелінді, және бұл шектеу шамасынан асып кеткенсіз.
 Бірнеше минуттан қайта байқап көріңіз.',
 'protectedpagetext' => 'Өңдеуді қақпайлау үшін бұл бет құлыпталынған.',
-'viewsourcetext' => 'Бұл беттің қайнар көзін қарауыңызға және көшіріп алуыңызға болады:',
+'viewsourcetext' => 'Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады:',
 'viewyourtext' => 'Осы бет арқылы "өзіңіз жасаған өңдеулердің" бастапқы мәтінін көруге және көшіруге мүмкіндігіңіз болады.',
 'protectedinterface' => 'Бұл бет бағдарламалық жасақтаманың тілдесу мәтінін жетістіреді, сондықтан қиянатты қақпайлау үшін өзгертуі құлыпталған.',
 'editinginterface' => "'''Құлақтандыру:''' Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.
@@ -749,6 +750,8 @@ $2',
 'ns-specialprotected' => '{{ns:special}} есім аясындағы беттер өңделінбейді',
 'titleprotected' => "Бұл тақырып аты бастаудан [[{{ns:user}}:$1|$1]] қорғады.
 Келтірілген себебі: ''$2''.",
+'filereadonlyerror' => "«$2» сақтамасы «тек қана оқу» тәртіптемесінде тұрғасын, «$1» файлын өзгерту мүмкін емес.
+Бұл тәртіптемені қондырған әкімші келесі түсіндірмені қалдырды: «''$3''»",
 
 # Virus scanner
 'virus-badscanner' => 'Баптау қателігі. Белгісіз вирус сканері: $1',
@@ -758,15 +761,15 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Жүйеден шықтыңыз.'''
 
-Жүйеге кірместен де {{SITENAME}} жобасын пайдалана аласыз; немесе баяғы не өзге қатысушы ретінде жүйеге [[Special:UserLogin|қайта кіруіңізге]] болады.
-Аңғартпа: Кейбір беттер шолғышыңыздың кешін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкін.",
+Жүйеге кірместен де {{SITENAME}} жобасын пайдалана аласыз, немесе баяғы не өзге қатысушы ретінде жүйеге [[Special:UserLogin|қайта кіруіңізге]] болады.
+Аңғартпа: Кейбір беттер шолғышыңыздың кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкін.",
 'welcomecreation' => '== Қош келдіңіз, $1! ==
 Жаңа тіркелгіңіз жасалды.
 Өзіңіздің [[Special:Preferences|жеке баптауларыңызды]] өзгертуді ұмытпаңыз.',
-'yourname' => 'Қатысушы атыңыз:',
-'yourpassword' => 'Құпия сөзіңіз:',
+'yourname' => 'Қатысушы аты:',
+'yourpassword' => 'Құпия сөз:',
 'yourpasswordagain' => 'Құпия сөзді қайталаңыз:',
-'remembermypassword' => 'Ð\9cенÑ\96Ò£ ÐºÑ\96Ñ\80генÑ\96мдÑ\96 Ð±Ò±Ð» ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82ерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})',
+'remembermypassword' => 'ТÑ\96Ñ\80келгÑ\96мдÑ\96 Ð¾Ñ\81Ñ\8b Ð±Ñ\80аÑ\83зерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})',
 'securelogin-stick-https' => 'Кіргеннен кейін HTTPS бойынша байланысты жалғастыру',
 'yourdomainname' => 'Желі үйшігіңіз:',
 'externaldberror' => 'Осы арада не шеттік растау дерекқорында қате болды, немесе шеттік тіркелгіңізді жаңалау рұқсаты жоқ.',
@@ -778,18 +781,19 @@ $2',
 'logout' => 'Шығу',
 'userlogout' => 'Шығу',
 'notloggedin' => 'Кірмегенсіз',
-'nologin' => "Ð\90ккаÑ\83нÑ\82Ñ\8bÒ£Ñ\8bз бар ма? '''$1'''.",
+'nologin' => "ТÑ\96Ñ\80келгÑ\96Ò£Ñ\96з бар ма? '''$1'''.",
 'nologinlink' => 'Тіркеліңіз',
 'createaccount' => 'Жаңа тіркелгі',
 'gotaccount' => "Бұған дейін тіркеліп пе едіңіз бе? '''$1'''.",
 'gotaccountlink' => 'Кіріңіз',
 'userlogin-resetlink' => 'Қатысушы атын не құпия сөзді ұмыттыңыз ба?',
-'createaccountmail' => 'е-поштамен',
+'createaccountmail' => 'Ð\95-поштамен',
 'createaccountreason' => 'Себебі:',
-'badretype' => 'Енгізген құпия сөздеріңіз бір біріне сәйкес емес.',
+'badretype' => 'Енгізген құпия сөздеріңіз бір-біріне сәйкес емес.',
 'userexists' => 'Енгізген қатысушы атыңыз әлдеқашан пайдалануда.
 Өзге атауды таңдаңыз.',
 'loginerror' => 'Кіру қатесі',
+'createaccounterror' => 'Тіркелгіні жасау мүмкін емес: $1',
 'nocookiesnew' => 'Жаңа қатысушы тіркелгісі жасалды, бірақ кірмегенсіз.
 Қатысушы кіру үшін {{SITENAME}} торабында «cookie» файлдары қолданылады.
 Сізде «cookies» өшірілген.
@@ -797,27 +801,30 @@ $2',
 'nocookieslogin' => 'Қатысушы кіру үшін {{SITENAME}} торабында «cookies» деген қолданылады.
 Сізде «cookies» өшірілген.
 Соны қосыңыз да кіруді қайта байқап көріңіз.',
+'nocookiesfornew' => 'Оның қайнарын растай алмағандықтан қатысушының аккаунты тіркелмеді. «Cookies» қосылып тұрғанына көз жеткізіңіз, бетті қайта жаңартыңыз және тағы байқап көріңіз.',
 'noname' => 'Жарамды қатысушы атын енгізбедіңіз.',
 'loginsuccesstitle' => 'Кіруіңіз сәтті өтті',
 'loginsuccess' => "'''Сіз енді {{SITENAME}} жобасына «$1» ретінде кіріп отырсыз.'''",
-'nosuchuser' => 'Мында «$1» деп аталған қатысушы жоқ.
-Емлеңізді тексеріңіз, не жаңа тіркелгі жасаңыз.',
+'nosuchuser' => '«$1» деген қатысушы тіркелмеген.
+Емлеңізді тексеріңіз, немесе жаңа тіркелгі жасаңыз.',
 'nosuchusershort' => 'Мында «$1» деп аталған қатысушы жоқ.
 Емлеңізді тексеріңіз.',
 'nouserspecified' => 'Қатысушы атын келтіруіңіз жөн.',
+'login-userblocked' => 'Бұл қатысушы бұғатталған. Жүйеге кiру рұқсат етiлмеген.',
 'wrongpassword' => 'Бұрыс құпия сөз енгізілген. Қайта байқап көріңіз.',
 'wrongpasswordempty' => 'Құпия сөз бос болған. Қайта байқап көріңіз.',
-'passwordtooshort' => 'Құпия сөзіңіз жарамсыз не тым қысқа.
+'passwordtooshort' => 'Құпия сөзіңіз жарамсыз немесе тым қысқа.
 Бұнда ең кемінде $1 таңба болуы және де қатысушы атыңыздан өзге болуы жөн.',
+'password-name-match' => 'Енгізген құпия сөзіңіз қатысушы атынан өзгеше болуы қажет.',
+'password-login-forbidden' => 'Бұл қатысушы аты мен құпия сөзін пайдалануға тыйым салынған.',
 'mailmypassword' => 'Құпия сөзімді электронды поштама жібер',
 'passwordremindertitle' => '{{SITENAME}} үшін жаңа уақытша құпия сөз',
-'passwordremindertext' => 'Кейбіреу (IP мекенжайы: $1, бәлкім өзіңіз боларсыз)
-сізге {{SITENAME}} үшін жаңа құпия сөз жөнелетуін бізден сұраған ($4).
-«$2» қатысушының құпия сөзі «$3» болды енді.
-Қазір кіруіңіз және құпия сөзді өзгертуіңіз керек.
+'passwordremindertext' => 'Біреу (IP мекенжайы: $1, бәлкім өзіңіз боларсыз) {{SITENAME}} үшін жаңа құпия сөз жөнелету сұранымын жасаған ($4).
+Қатысушы «$2» үшін уақытша құпия сөз жасалды: «$3». Егер бұл Сіздің сұранымыңыз болса, жүйеге кіріп құпия сөзді өзгертуіңіз керек. Сіздің уақытша құпия сөзіңіз $5 дейін белсенді болады.
 
\95геÑ\80 Ð±Ò±Ð» Ñ\81Ò±Ñ\80анÑ\8bмдÑ\8b Ð±Ð°Ñ\81Ò\9bа Ð±Ñ\96Ñ\80еÑ\83 Ñ\96Ñ\81Ñ\82еÑ\81е, Ð½Ðµ Ò\9bұпиÑ\8f Ñ\81өздÑ\96 ÐµÑ\81ке Ñ\82Ò¯Ñ\81Ñ\96Ñ\80Ñ\81Ñ\96п ÐµÐ½Ð´Ñ\96 Ó©Ð·Ð³ÐµÑ\80Ñ\82кÑ\96Ò£Ñ\96з ÐºÐµÐ»Ð¼ÐµÑ\81е, ÐµÑ\81кÑ\96 Ò\9bұпиÑ\8f Ñ\81өз Ò\9bолданÑ\83Ñ\8bн Ð¶Ð°ғастырып осы хатқа аңғармауыңызға да болады.',
\95геÑ\80 Ð±Ò±Ð» Ñ\81Ò±Ñ\80анÑ\8bмдÑ\8b Ð¡Ñ\96з Ð¶Ð°Ñ\81амаÑ\81Ñ\8bÒ£Ñ\8bз, Ð½Ðµ Ò\9bұпиÑ\8f Ñ\81өздÑ\96 ÐµÑ\81ке Ñ\82Ò¯Ñ\81Ñ\96Ñ\80Ñ\96п ÐµÐ½Ð´Ñ\96 Ó©Ð·Ð³ÐµÑ\80Ñ\82кÑ\96Ò£Ñ\96з ÐºÐµÐ»Ð¼ÐµÑ\81е, ÐµÑ\81кÑ\96 Ò\9bұпиÑ\8f Ñ\81өздÑ\96 Ò\9bолданÑ\83дÑ\8b Ð¶Ð°Ð»ғастырып осы хатқа аңғармауыңызға да болады.',
 'noemail' => 'Осы арада «$1» қатысушының е-пошта мекенжайы жоқ.',
+'noemailcreate' => 'Сізге нақты электрондық пошта есімін көрсету керек.',
 'passwordsent' => 'Жаңа құпия сөз «$1» үшін тіркелген е-пошта мекенжайына жөнелтілді.
 Қабылдағаннан кейін кіргенде соны енгізіңіз.',
 'blocked-mailpassword' => 'IP мекенжайыңыздан өңдеу бұғатталған, сондықтан қиянатты қақпайлау үшін құпия сөзді қалпына келтіру жетесін қолдануына рұқсат етілмейді.',
@@ -826,15 +833,17 @@ $2',
 'throttled-mailpassword' => 'Соңғы {{PLURAL:$1|сағатта|$1 сағатта}} құпия сөз ескерту хаты алдақашан жөнелтілді.
 Қиянатты қақпайлау үшін, {{PLURAL:$1|сағат|$1 сағат}} сайын тек бір ғана құпия сөз ескерту хаты жөнелтіледі.',
 'mailerror' => 'Хат жөнелту қатесі: $1',
-'acct_creation_throttle_hit' => 'Ғафу етіңіз, сіз алдақашан $1 рет тіркелгі жасапсыз.
\9eнан Ð°Ñ\80Ñ\82Ñ\8bÒ\9b Ñ\96Ñ\81Ñ\82ей Ð°Ð»Ð¼Ð°Ð¹Ñ\81Ñ\8bз.',
+'acct_creation_throttle_hit' => 'Ғафу етіңіз, сіз алдақашан $1 рет тіркелгі жасапсыз. Онан артық жасай алмайсыз.
\9dÓ\99Ñ\82ижеÑ\81Ñ\96нде, Ð¾Ñ\81Ñ\8b IP-мекенжаймен ÐºÑ\96Ñ\80Ñ\83Ñ\88Ñ\96леÑ\80 Ð´Ó\99л Ò\9bазÑ\96Ñ\80гÑ\96 Ñ\83аÒ\9bÑ\8bÑ\82Ñ\82а Ð±Ñ\96Ñ\80неÑ\88е Ñ\82Ñ\96Ñ\80келгÑ\96 Ð¶Ð°Ñ\81ай Ð°Ð»Ð¼Ð°Ð¹Ð´Ñ\8b.',
 'emailauthenticated' => 'Е-пошта мекенжайыңыз расталған кезі: $3, $2.',
 'emailnotauthenticated' => 'Е-пошта мекенжайыңыз әлі расталған жоқ.
 Келесі әрбір мүмкіндіктер үшін еш хат жөнелтілмейді.',
 'noemailprefs' => 'Осы мүмкіндіктер істеуі үшін е-пошта мекенжайыңызды енгізіңіз.',
 'emailconfirmlink' => 'Е-пошта мекенжайыңызды құптаңыз',
-'invalidemailaddress' => 'Осы е-пошта мекенжайында жарамсыз пішім болған, қабыл етілмейді.
-Дұрыс пішімделген мекенжайды енгізіңіз, не аумақты бос қалдырыңыз.',
+'invalidemailaddress' => 'Бұл е-пошта есімі пішімге сәйкес келмегендіктен қабылданбайды.
+Дұрыс пішімделген е-пошта есімін енгізіңіз, немесе аумақты бос қалдырыңыз.',
+'cannotchangeemail' => 'Тіркелгінің е-поштасының мекен-жайы бұл уикиде өзгертілмейді.',
+'emaildisabled' => 'Бұл сайт е-поштаның хабарламасын жібере алмайды.',
 'accountcreated' => 'Жаңа тіркелгі жасалды',
 'accountcreatedtext' => '$1 үшін жаңа қатысушы тіркелгісі жасалды.',
 'createaccount-title' => '{{SITENAME}} үшін тіркелу',
@@ -842,7 +851,15 @@ $2',
 Жобаға кіріуіңіз және құпия сөзіңізді өзгертуіңіз тиісті.
 
 Егер бұл тіркелгі қателікпен жасалса, осы хабарға елемеуіңіз мүмкін.',
+'usernamehasherror' => 'Қатысушы есіміне тор белгі нышаны енгізілмейді.',
+'login-throttled' => 'Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз. Өтінемін, қайта кірмес бұрын кішкене күте тұрыңыз.',
+'login-abort-generic' => 'Жүйеге кіру үшін сәтсіз талпыныс жасадыңыз.',
 'loginlanguagelabel' => 'Тіл: $1',
+'suspicious-userlogout' => 'Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'Mail() PHP-функциясындағы белгісіз қате.',
+'user-mail-no-addy' => 'Е-пошта есімінсіз хабарлама жіберуге талпынды.',
 
 # Change password dialog
 'resetpass' => 'Тіркелгінің құпия сөзін өзгерту',
@@ -854,11 +871,42 @@ $2',
 'retypenew' => 'Жаңа құпия сөзіңізді қайталаңыз:',
 'resetpass_submit' => 'Құпия сөзді қойыңыз да кіріңіз',
 'resetpass_success' => 'Құпия сөзіңіз сәтті өзгертілді! Енді кіріңіз…',
-'resetpass_forbidden' => '{{SITENAME}} жобасында құпия сөздер өзгертілмейді',
+'resetpass_forbidden' => 'Құпия сөз өзгертілмейді',
+'resetpass-no-info' => 'Бұл бетке тікелей ену үшін, жүйеге кіруіңіз керек.',
 'resetpass-submit-loggedin' => 'Құпия сөзді өзгерту',
+'resetpass-submit-cancel' => 'Болдырмау',
+'resetpass-wrong-oldpass' => 'Уақытша немесе ағымдағы құпия сөзіңіз дұрыс емес.
+Мүмкін Сіз құпия сөзді сәтті өзгерткенсіз, немесе жаңа уақытша құпия сөзге сұраным жасағансыз.',
+'resetpass-temp-password' => 'Уақытша құпия сөз:',
 
 # Special:PasswordReset
+'passwordreset' => 'Құпия сөзді қайтару',
+'passwordreset-text' => 'Сіздің тіркелгіңіздің баптаулары туралы хабарламаларды алу үшін мына пішінді толтырыңыз.',
+'passwordreset-legend' => 'Құпия сөзді қайтару',
+'passwordreset-disabled' => 'Бұл уикиде құпия сөзді қайтару ажыратылған.',
+'passwordreset-pretext' => '{{PLURAL:$1||Төменде көрсетілгендердің ішіндегі біреуін жазыңыз}}',
 'passwordreset-username' => 'Қатысушы аты:',
+'passwordreset-domain' => 'Домен:',
+'passwordreset-capture' => 'Келген хатты қарау керек пе?',
+'passwordreset-capture-help' => 'Егер Сіз берілген белгішені қондырсаңыз, қатысушыға жіберілетін уақытша құпия сөз жазылған хат көрсетіледі.',
+'passwordreset-email' => 'Е-поштаның мекен-жайы:',
+'passwordreset-emailtitle' => '{{SITENAME}} тіркелгісі туралы анықтама',
+'passwordreset-emailelement' => 'Қатысушы есімі: $1
+Уақытша құпия сөз: $2',
+'passwordreset-emailsent' => 'Электронды пошта арқылы ескертпе жөнелтілді.',
+'passwordreset-emailsent-capture' => 'Жөнелтілген ескертпе-хат төменде көрсетілген.',
+'passwordreset-emailerror-capture' => 'Жазылған ескертпе-хат төменде көрсетілген, оның жөнелтілмеу себебі: $1',
+
+# Special:ChangeEmail
+'changeemail' => 'Е-пошта мекен-жайын өзгерту',
+'changeemail-header' => 'Е-пошта мекен-жайының өзгертілуі',
+'changeemail-text' => 'Е-поштаның мекен-жайын өзгерту үшін мына пішінді толтырыңыз. Өзгертулерді растау үшін Сізге құпия сөзді енгізу керек.',
+'changeemail-no-info' => 'Бұл бетке тікелей ену үшін, жүйеге кіруіңіз керек.',
+'changeemail-oldemail' => 'Е-поштаның ағымдағы мекен-жайы:',
+'changeemail-newemail' => 'Е-поштаның жаңа мекен жайы:',
+'changeemail-none' => '(ешкім)',
+'changeemail-submit' => 'Е-поштаны өзгерту',
+'changeemail-cancel' => 'Болдырмау',
 
 # Edit page toolbar
 'bold_sample' => 'Жуан мәтін',
@@ -867,7 +915,7 @@ $2',
 'italic_tip' => 'Қиғаш мәтін',
 'link_sample' => 'Сілтеме тақырыбының аты',
 'link_tip' => 'Ішкі сілтеме',
-'extlink_sample' => 'http://www.example.com сілтеме тақырыбын аты',
+'extlink_sample' => 'http://www.example.com сілтеме тақырыбының аты',
 'extlink_tip' => 'Шеттік сілтеме (алдынан http:// енгізуін ұмытпаңыз)',
 'headline_sample' => 'Бас жол мәтіні',
 'headline_tip' => '2-ші деңгейлі бас жол',
@@ -879,22 +927,23 @@ $2',
 'hr_tip' => 'Дерелей сызық (үнемді қолданыңыз)',
 
 # Edit pages
-'summary' => 'Түйіндемесі:',
+'summary' => 'Өзгертпе мазмұны:',
 'subject' => 'Тақырыбы/бас жолы:',
-'minoredit' => 'Ð\91ұл Ñ\88ағын өңдеме',
+'minoredit' => 'Шағын өңдеме',
 'watchthis' => 'Бетті бақылау',
-'savearticle' => 'Бетті сақта!',
+'savearticle' => 'Бетті сақтау',
 'preview' => 'Қарап шығу',
-'showpreview' => 'Қарап шық',
-'showlivepreview' => 'ТÑ\83Ñ\80а Ò\9bаÑ\80ап Ñ\88Ñ\8bÒ\9b',
+'showpreview' => 'Алдын ала қарау',
+'showlivepreview' => 'Ð\96Ñ\8bлдам Ò\9bаÑ\80аÑ\83',
 'showdiff' => 'Өзгерістерді көрсет',
-'anoneditwarning' => "'''Құлақтандыру:''' Сіз жүйеге кірмегенсіз.
-IP мекенжайыңыз бұл беттің түзету тарихында жазылып алынады.",
+'anoneditwarning' => "'''Ескертпе:''' Сіз жүйеге кірмегенсіз.
+IP-мекенжайыңыз бұл беттің түзету тарихында жазылып алынады.",
+'anonpreviewwarning' => '"Сіз жүйеге кірмегенсіз. IP-мекенжайыңыз бұл беттің түзету тарихында жазылып алынады."',
 'missingsummary' => "'''Ескертпе:''' Өңдеменің қысқаша мазмұндамасын енгізбепсіз.
 «Сақтау» түймесін тағы бассаңыз, өңденмеңіз мәндемесіз сақталады.",
 'missingcommenttext' => 'Мәндемеңізді төменде енгізіңіз.',
-'missingcommentheader' => "'''Ð\95Ñ\81кеÑ\80Ñ\82пе:''' Ð\91ұл Ð¼Ó\99ндемеге Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп/баÑ\81жол Ð¶ÐµÑ\82Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80мепÑ\81Ñ\96з.
-Егер тағы да Сақтау түймесін нұқысаңыз, өңдемеңіз солсыз сақталады.",
+'missingcommentheader' => "'''Ð\95Ñ\81кеÑ\80Ñ\82пе:''' Ð\91ұл Ð¼Ó\99ндемеге Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп/баÑ\81жол Ð¶Ð°Ð·Ð±Ð°Ð¿Ñ\81Ñ\8bз.
+«{{int:savearticle}}» түймесін тағы бассаңыз, өңдемеңіз тақырыпсыз жазылады.",
 'summary-preview' => 'Қысқаша мазмұндамасын қарап шығу:',
 'subject-preview' => 'Тақырыбын/бас жолын қарап шығу:',
 'blockedtitle' => 'Қатысушы бұғатталған',
@@ -910,26 +959,25 @@ IP мекенжайыңыз бұл беттің түзету тарихында
 [[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын ұсынып және де оны пайдаланудан бұғатталмаған жағдайыңызда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.
 Ағымдық IP мекенжайыңыз: $3, және бұғатау нөмірі: $5.
 Сұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
-'autoblockedtext' => "$1 деген бұрын өзге қатысушы пайдаланған болғасын осы IP мекенжайыңыз өздіктік бұғатталған.
-Келтірілген себебі:
-
-:''$2''
-
-* Бұғаттау басталғаны: $8
-* Бұғаттау бітетіні: $6
+'autoblockedtext' => "'''Қатысушы атыңыз не IP-мекенжайыңыз бұғатталған.'''
 
-Осы бұғаттауды талқылау үшін $1 дегенмен, не басқа [[{{{{ns:mediawiki}}:grouppage-sysop}}|әкімшімен]] қатынасуыңызға болады.
+Осы бұғаттауды $1 істеген. Келтірілген себебі: ''$2''.
 
-Аңғартпа: [[{{#special:Preferences}}|Пайдаланушылық бапталымдарыңызды]] қолданып жарамды е-пошта мекенжайын енгізгенше дейін және бұны пайдалануы бұғатталмағанша дейін «Қатысушыға хат жазу» мүмкіндігін қолдана алмайсыз.
+* Бұғаттаудың басталғаны: $8
+* Бұғаттаудың бітетіні: $6
+* Бұғаттау нысанасы: $7
 
-Бұғатау нөміріңіз: $5.
-Бұл нөмірді әрбір сұранымыңыздарға кірістіріңіз.",
+Осы бұғаттауды талқылау үшін $1, не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] қатынасуыңызға болады.
+[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын ұсынып және де оны пайдаланудан бұғатталмаған жағдайыңызда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.
+Ағымдық IP мекенжайыңыз: $3, және бұғатау нөмірі: $5.
+Сұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
 'blockednoreason' => 'еш себебі келтірілмеген',
 'whitelistedittext' => 'Беттерді өңдеу үшін $1 жөн.',
 'confirmedittext' => 'Беттерді өңдеу үшін алдын ала Е-пошта мекенжайыңызды құптауыңыз жөн.
 Е-пошта мекенжайыңызды [[{{#special:Preferences}}|пайдаланушылық бапталымдарыңыз]] арқылы қойыңыз да жарамдылығын тексеріп шығыңыз.',
-'nosuchsectiontitle' => 'Осындай еш бөлім жоқ',
-'nosuchsectiontext' => 'Жоқ бөлімді өңдеуді талап етіпсіз.',
+'nosuchsectiontitle' => 'Бұл бөлімді табу мүмкін емес',
+'nosuchsectiontext' => 'Сіз бұрын болмаған бөлімді өзгертпекшісіз.
+Мүмкін бұл бетті қарап жатқаныңызда ол бөлім жойылған немесе басқа орынға көшірілген.',
 'loginreqtitle' => 'Кіруіңіз керек',
 'loginreqlink' => 'кіру',
 'loginreqpagetext' => 'Басқа беттерді көру үшін сіз $1 болуыңыз жөн.',
@@ -947,8 +995,11 @@ IP мекенжайыңыз бұл беттің түзету тарихында
 * <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Журналдардан бұл бетке қатысты сәйкес жазбаларды табу]</span>,
 * <span class=\"plainlinks\">'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} Бұл бетті жаңадан бастау]'''</span>.",
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» қатысушы тіркелгісі жазып алынбаған. Бұл бетті бастау/өңдеу талабыңызды тексеріп шығыңыз.',
-'clearyourcache' => "'''Аңғартпа:''' Сақтағаннан кейін, өзгерістерді көру үшін шолғыш бүркемесін орағыту ықтимал. '''Mozilla / Firefox / Safari:''' ''Қайта жүктеу'' батырмасын нұқығанда ''Shift'' тұтыңыз, не ''Ctrl-Shift-R'' басыңыз (Apple Mac — ''Cmd-Shift-R''); '''IE:''' ''Жаңарту'' батырмасын нұқығанда ''Ctrl'' тұтыңыз, не ''Ctrl-F5'' басыңыз; '''Konqueror:''': ''Жаңарту'' батырмасын жай нұқыңыз, не ''F5'' басыңыз; '''Opera''' пайданушылары ''Құралдар→Бапталымдар'' дегенге барып бүркемесін толық тазарту жөн.",
-'usercssyoucanpreview' => "'''Ақыл-кеңес:''' Жаңа CSS файлын сақтау алдында «Қарап шығу» батырмасын қолданып сынақтаңыз.",
+'userpage-userdoesnotexist-view' => '«$1» қатысушы есімі тіркелмеген.',
+'blocked-notice-logextract' => 'Бұл қатысушы қазіргі уақытта  бұғатталған.
+Төменде бұғаттау журналындағы соңғы жазбалар көрсетілген.',
+'clearyourcache' => "'''Ескертпе:''' Сақтағаннан кейін, өзгерістерді көру үшін шолғыш бүркемесін орағыту ықтимал. '''Mozilla / Firefox / Safari:''' ''Қайта жүктеу'' батырмасын нұқығанда ''Shift'' тұтыңыз, не ''Ctrl-Shift-R'' басыңыз (Apple Mac — ''Cmd-Shift-R''); '''IE:''' ''Жаңарту'' батырмасын нұқығанда ''Ctrl'' тұтыңыз, не ''Ctrl-F5'' басыңыз; '''Konqueror:''': ''Жаңарту'' батырмасын жай нұқыңыз, не ''F5'' басыңыз; '''Opera''' пайданушылары ''Құралдар→Бапталымдар'' дегенге барып бүркемесін толық тазарту жөн.",
+'usercssyoucanpreview' => "'''Кеңес:''' Жаңа CSS файлын сақтау алдында «Қарап шығу» батырмасын қолданып сынақтаңыз.",
 'userjsyoucanpreview' => "'''Ақыл-кеңес:''' Жаңа JS файлын сақтау алдында «Қарап шығу» батырмасын қолданып сынақтаңыз.",
 'usercsspreview' => "'''Мынау CSS мәтінін тек қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
 'userjspreview' => "'''Мынау JavaScript қатысушы бағдарламасын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
@@ -957,6 +1008,7 @@ IP мекенжайыңыз бұл беттің түзету тарихында
 'updated' => '(Жаңартылған)',
 'note' => "'''Аңғартпа:'''",
 'previewnote' => "Бұл тек '''қарап шығу''' екенін ұмытпаңыз, өзгерістер әлі сақталған жоқ!",
+'continue-editing' => 'Өңдемені жалғастыру',
 'previewconflict' => 'Бұл қарап шығу беті жоғарғы кірістіру орнындағы мәтінді қамтиды да және сақталғандағы өңді көрсетпек.',
 'session_fail_preview' => "'''Ғафу етіңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.
 Қайта байқап көріңіз. Егер бұл әлі істелмесе, шығуды және қайта кіруді байқап көріңіз.'''",
@@ -969,9 +1021,10 @@ IP мекенжайыңыз бұл беттің түзету тарихында
 Бет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.
 Бұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.'''",
 'editing' => 'Өңделуде: $1',
+'creating' => 'Бастау: $1',
 'editingsection' => 'Өңделуде: $1 (бөлімі)',
-'editingcomment' => 'ӨңделÑ\83де: $1 (мÓ\99ндемеÑ\81Ñ\96)',
-'editconflict' => 'Өңдеме қақтығысы: $1',
+'editingcomment' => 'ӨңделÑ\83де: $1 (жаңа Ð±Ó©Ð»Ñ\96м)',
+'editconflict' => 'Өңдемелер қақтығысы: $1',
 'explainconflict' => "Осы бетті сіз өңдей бастағанда басқа біреу бетті өзгерткен.
 Жоғарғы кірістіру орнында беттің ағымдық мәтіні бар.
 Төменгі кірістіру орнында сіз өзгерткен мәтіні көрсетіледі.
@@ -995,28 +1048,43 @@ IP мекенжайыңыз бұл беттің түзету тарихында
 Бұл сақтай алынбайды.'''",
 'readonlywarning' => "'''ҚҰЛАҚТАНДЫРУ: Дерекқор баптау үшін құлыпталған, сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.
 Кейін қолдану үшін мәтәнді қйып алып және қойып, мәтін файлына сақтауңызға болады.'''",
-'protectedpagewarning' => "'''ҚҰЛАҚТАНДЫРУ: Бұл бет қорғалған. Тек әкімші құқықтары бар қатысушылар өңдей алады.'''",
-'semiprotectedpagewarning' => "'''Аңғартпа:''' Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.",
+'protectedpagewarning' => "'''Ескертпе: Бұл бет өңдеуден қорғалған. Тек әкімші құқықтары бар қатысушылар өңдей алады.'''
+Төменде бет журналының соңғы жазбасы көрсетілген:",
+'semiprotectedpagewarning' => "'''Аңғартпа:''' Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.
+Төменде бет журналының соңғы жазбасы көрсетілген:",
 'cascadeprotectedwarning' => "'''Құлақтандыру''': Бұл бет құлыпталған, енді тек әкімші құқықтары бар қатысушылар бұны өңдей алады.Бұның себебі: бұл бет «баулы қорғауы» бар келесі {{PLURAL:$1|беттің|беттердің}} кірікбеті:",
-'titleprotectedwarning' => "'''ҚҰЛАҚТАНДЫРУ:  Бұл бет құлыпталған, сондықтан тек бірқатар қатысушылар бұны бастай алады.'''",
+'titleprotectedwarning' => "'''Ескертпе: Бұл бет атауы құлыпталған, сондықтан [[Special:ListGroupRights|арнайы құқықтары]] бар қатысушылар бұндай атаумен бетті бастай алады.'''
+Төменде бет журналының соңғы жазбасы көрсетілген:",
 'templatesused' => 'Бұл бетте қолданылған {{PLURAL:$1|үлгі|үлгілер}}:',
-'templatesusedpreview' => 'Бұны қарап шығуға қолданылған үлгілер:',
-'templatesusedsection' => 'Бұл бөлімде қолданылған үлгілер:',
+'templatesusedpreview' => 'Беттің қарап шығуында қолданылған {{PLURAL:$1|үлгі|үлгілер}}:',
+'templatesusedsection' => 'Бұл бөлімде қолданылған {{PLURAL:$1|үлгі|үлгілер}}:',
 'template-protected' => '(қорғалған)',
 'template-semiprotected' => '(жартылай қорғалған)',
 'hiddencategories' => 'Бұл бет $1 жасырын санаттың мүшесі:',
 'nocreatetitle' => 'Бетті бастау шектелген',
 'nocreatetext' => '{{SITENAME}} жобасында жаңа бет бастауы шектелген.
 Кері қайтып бар бетті өңдеуіңізге болады, немесе [[Special:UserLogin|кіруіңізге не тіркелуіңізге]] болады.',
-'nocreate-loggedin' => '{{SITENAME}} жобасында жаңа бет бастау рұқсатыңыз жоқ.',
+'nocreate-loggedin' => 'Жаңа бет бастауға рұқсатыңыз жоқ.',
+'sectioneditnotsupported-title' => 'Бөлімдерді өңдеу қолданылмайды',
+'sectioneditnotsupported-text' => 'Бұл бетте бөлімдерді өңдеу қолданылмайды.',
 'permissionserrors' => 'Рұқсаттар қателері',
 'permissionserrorstext' => 'Бұны істеуге рұқсатыңыз жоқ, келесі {{PLURAL:$1|себеп|себептер}} бойынша:',
 'permissionserrorstext-withaction' => '$2 дегенге рұқсатыңыз жоқ, келесі {{PLURAL:$1|себеп|себептер}} бойынша:',
 'recreate-moveddeleted-warn' => "'''Назар аудар: Алдында жойылған бетті қайта бастайын деп тұрсыз.'''
 
 Бұл бетті жаңадан бастаудың орынды екеніне көз жеткізіңіз.
-Төменде бұл бетке қатысты жою (және жылжыту) журналы көрсетілген:",
+Төменде бұл бетке қатысты жою және жылжыту журналы көрсетілген:",
+'moveddeleted-notice' => 'Бұл бет жойылған.
+Төменде бұл бетке қатысты жою және жылжыту журналы көрсетілген:',
 'log-fulllog' => 'Толық журналды қарау',
+'edit-hook-aborted' => 'Түзету ілмек арқылы болдырмады.
+Қосымша түсіндірмелер көрсетілмеген.',
+'edit-gone-missing' => 'Бетті жаңарту мүмкін емес.
+Мүмкін, бұл бет жойылған.',
+'edit-conflict' => 'Өңдемелер қақтығысы.',
+'edit-already-exists' => 'Жаңа бет жасау мүмкін емес.
+Ол әлдеқашан бар.',
+'defaultmessagetext' => 'Әдепкі мәтіні',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Құлақтандыру: Бұл бетте тым көп шығыс алатын құрылым талдатқыш жетелерінің қоңырау шалулары бар.
@@ -1079,6 +1147,7 @@ $3 келтірілген себебі: ''$2''",
 'rev-deleted-comment' => '(мәндеме аласталды)',
 'rev-deleted-user' => '(қатысушы аты аласталды)',
 'rev-deleted-event' => '(журнал жазбасы аласталды)',
+'rev-deleted-user-contribs' => '[Қатысушы аты немесе IP-мекенжайы жойылған — өңдемелері қатысушы үлесі бетінен жасырылған]',
 'rev-deleted-text-permission' => 'Бұл беттің түзетуі барша мұрағаттарынан аласталған.
 Мында [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжей мәліметтері болуы мүмкін.',
 'rev-deleted-text-view' => 'Осы беттің түзетуі барша мұрағаттарынан аласталған.
@@ -1090,6 +1159,8 @@ $3 келтірілген себебі: ''$2''",
 'revdelete-nooldid-title' => 'Нысана түзету жарамсыз',
 'revdelete-nooldid-text' => 'Бұл жетені орындау үшін нысана түзетуін/түзетулерін келтірілмепсіз,
 келтірілген түзету жоқ, не ағымдық түзетуді жасыру үшін әрекеттеніп көрдіңіз.',
+'revdelete-nologtype-title' => 'Журнал түрі көрсетілмеген',
+'revdelete-nologid-title' => 'Журналдағы қате жазба',
 'revdelete-show-file-submit' => 'Иә',
 'revdelete-selected' => "'''[[:$1]] дегеннің бөлектенген {{PLURAL:$2|түзетуі|түзетулері}}:'''",
 'logdelete-selected' => "'''Бөлектенген {{PLURAL:$1|журнал оқиғасы|журнал оқиғалары}}:'''",
@@ -1103,6 +1174,9 @@ $3 келтірілген себебі: ''$2''",
 'revdelete-hide-comment' => 'Өңдеме мәндемесін жасыр',
 'revdelete-hide-user' => 'Өңдеуші атын (IP мекенжайын) жасыр',
 'revdelete-hide-restricted' => 'Осы тиымдарды әкімшілерге қолдану және бұл тілдесуді құлыптау',
+'revdelete-radio-same' => '(өзгертпе)',
+'revdelete-radio-set' => 'Иә',
+'revdelete-radio-unset' => 'Жоқ',
 'revdelete-suppress' => 'Деректерді баршаға ұқсас әкімшілерден де шеттету',
 'revdelete-unsuppress' => 'Қалпына келтірілген түзетулерден тиымдарды аластау',
 'revdelete-log' => 'Себебі:',
@@ -1114,7 +1188,10 @@ $3 келтірілген себебі: ''$2''",
 'revdel-restore-visible' => 'көрінетін нұсқалары',
 'pagehist' => 'Бет тарихы',
 'deletedhist' => 'Жойылған тарихы',
+'revdelete-otherreason' => 'Басқа/қосымша себеп:',
+'revdelete-reasonotherlist' => 'Өзге себеп',
 'revdelete-edit-reasonlist' => 'Жою себептерін өңдеу',
+'revdelete-offender' => 'Аутор нұсқалары:',
 
 # Suppression log
 'suppressionlog' => 'Шеттету журналы',
@@ -1143,6 +1220,8 @@ $3 келтірілген себебі: ''$2''",
 'mergehistory-invalid-destination' => 'Нысана бетінде жарамды тақырып аты болуы жөн.',
 'mergehistory-autocomment' => '[[:$1]] деген [[:$2]] дегенге біріктірілді',
 'mergehistory-comment' => '[[:$1]] деген [[:$2]] дегенге біріктірілді: $3',
+'mergehistory-same-destination' => 'Бастапқы және мақсатты беттер бірдей болмауы керек',
+'mergehistory-reason' => 'Себебі:',
 
 # Merge log
 'mergelog' => 'Біріктіру журналы',
@@ -1152,7 +1231,7 @@ $3 келтірілген себебі: ''$2''",
 
 # Diffs
 'history-title' => '«$1» — өңдеу тарихы',
-'difference' => '(Түзетулер арасындағы айырмашылық)',
+'difference-multipage' => '(Беттер арасындағы айырмашылық)',
 'lineno' => 'Жол нөмірі $1:',
 'compareselectedversions' => 'Таңдалған нұсқаларды салыстыру',
 'showhideselectedversions' => 'Бөлектенген нұсқаларды көрсет/жасыр',
@@ -1176,6 +1255,7 @@ $3 келтірілген себебі: ''$2''",
 'nextn-title' => 'Келесі $1 {{PLURAL:$1|жазба|жазбалар}}',
 'shown-title' => 'Осы бетте {{PLURAL:$1|жазба}} көрсету.',
 'viewprevnext' => 'Көрсетілуі: ($1 {{int:pipe-separator}} $2) ($3) жазба',
+'searchmenu-legend' => 'Іздеу бапталымдары',
 'searchmenu-exists' => "'''Бұл жобада «[[:$1]]» деген бет бар.'''",
 'searchmenu-new' => "'''\"[[:\$1]]\" осындай атпен бетті бастау'''",
 'searchhelp-url' => 'Help:Мазмұны',
@@ -1201,6 +1281,7 @@ $3 келтірілген себебі: ''$2''",
 'search-mwsuggest-disabled' => 'ұсынымдарсыз',
 'search-relatedarticle' => 'Қатысты',
 'mwsuggest-disable' => 'AJAX ұсынымдарын өшір',
+'searcheverything-enable' => 'Белгіленген есім кеңістігінен іздеу',
 'searchrelated' => 'қатысты',
 'searchall' => 'барлық',
 'showingresults' => "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
@@ -1212,7 +1293,9 @@ $3 келтірілген себебі: ''$2''",
 'powersearch-ns' => 'Мына есім аяларда іздеу:',
 'powersearch-redir' => 'Айдатуларды тізімдеу',
 'powersearch-field' => 'Іздеу',
+'powersearch-togglelabel' => 'Белгілеу:',
 'powersearch-toggleall' => 'Барлығы',
+'powersearch-togglenone' => 'Ешқандай',
 'search-external' => 'Шеттік іздегіш',
 'searchdisabled' => '{{SITENAME}} іздеу қызметі өшірілген.
 Әзірше Google арқылы іздеуге болады.
@@ -1243,22 +1326,27 @@ $3 келтірілген себебі: ''$2''",
 'prefs-watchlist-days' => 'Бақылау тізіміндегі күндердің көрсетпек саны:',
 'prefs-watchlist-edits' => 'Кеңейтілген бақылаулардағы өзгерістердің барынша көрсетпек саны:',
 'prefs-misc' => 'Әрқилы',
+'prefs-resetpass' => 'Құпия сөзді өзгерту',
 'prefs-email' => 'Е-пошта баптаулары',
 'prefs-rendering' => 'Сырт көрініс',
 'saveprefs' => 'Сақтау',
 'resetprefs' => 'Сақталмаған өзгерістерді тазарту',
 'restoreprefs' => 'Барлығын бастапқы баптауларға қайтару',
 'prefs-editing' => 'Өңдеу',
+'prefs-edit-boxsize' => 'Өңдеу терезесінің өлшемі.',
 'rows' => 'Жолдар:',
 'columns' => 'Бағандар:',
 'searchresultshead' => 'Іздеу',
 'resultsperpage' => 'Бет сайын нәтиже саны:',
 'stub-threshold' => '<a href="#" class="stub">Бастама сілтемесін</a> пішімдеу табалдырығы (байт):',
-'recentchangesdays' => 'Жүықтағы өзгерістерінде көрсетпек күн саны:',
+'stub-threshold-disabled' => 'Ажыратылған',
+'recentchangesdays' => 'Жуықтағы өзгерістерде көрсетілетін күн саны:',
 'recentchangescount' => 'Жуықтағы өзгерістердінде, тарих және журнал беттерінде көрсетпек өңдеме саны:',
 'savedprefs' => 'Бапталымдарыңыз сақталды.',
-'timezonelegend' => 'Уақыт белдеуі',
-'localtime' => 'Жергілікті уақыт',
+'timezonelegend' => 'Уақыт белдеуі:',
+'localtime' => 'Жергілікті уақыт:',
+'timezoneuseserverdefault' => 'Уикидің баптауларын қолдану ($1)',
+'timezoneuseoffset' => 'Басқа (жылжытуды көрсетіңіз)',
 'timezoneoffset' => 'Сағат ығысуы¹',
 'servertime' => 'Сервер уақыты',
 'guesstimezone' => 'Шолғыштан алып толтыру',
@@ -1283,6 +1371,7 @@ $3 келтірілген себебі: ''$2''",
 'username' => 'Қатысушы атыңыз:',
 'uid' => 'Қатысушы теңдестіргішіңіз:',
 'prefs-memberingroups' => 'Кірген {{PLURAL:$1|тобыңыз|топтарыңыз}}:',
+'prefs-registration' => 'Тіркелу уақыты:',
 'yourrealname' => 'Нақты атыңыз:',
 'yourlanguage' => 'Тіліңіз:',
 'yourvariant' => 'Тіл/жазба нұсқаңыз:',
@@ -1365,6 +1454,8 @@ $3 келтірілген себебі: ''$2''",
 'right-minoredit' => 'Өңдемелерді шағын деп белгілеу',
 'right-move' => 'Беттерді жылжыту',
 'right-move-subpages' => 'Беттерді бұлардың бағынышты беттерімен жылжыту',
+'right-move-rootuserpages' => 'қатысушы бетін ауыстыру',
+'right-movefile' => 'Файлдардың атын өзгерту',
 'right-suppressredirect' => 'Тиісті атауға бетті жылжытқанда айдағышты жасамау',
 'right-upload' => 'Файлдарды жүктеу',
 'right-reupload' => 'Бар файл үстіне жазу',
@@ -1420,6 +1511,11 @@ $3 келтірілген себебі: ''$2''",
 'action-read' => 'Осы бетті оқу',
 'action-edit' => 'осы бетті өңдеу',
 'action-delete' => 'Осы бетті жою',
+'action-mergehistory' => 'Бұл беттің өзгеріс тарихын қосу',
+'action-userrights' => 'Қатысушылардың барлық құқықтарын өзгерту',
+'action-userrights-interwiki' => 'Басқа уикилердегі қатысушылардың құқықтарын өзгерту',
+'action-siteadmin' => 'Дерекқорды бұғаттау немесе бұғаттан шығару',
+'action-sendemail' => 'электронды хаттарды жіберу',
 
 # Recent changes
 'nchanges' => '$1 өзгеріс',
@@ -1442,18 +1538,20 @@ $3 келтірілген себебі: ''$2''",
 'rcshowhidemine' => 'Өңдемелерімді $1',
 'rclinks' => 'Соңғы $2 күнде болған, соңғы $1 өзгерісті көрсет<br />$3',
 'diff' => 'айырм.',
-'hist' => 'тар.',
-'hide' => 'жаÑ\81Ñ\8bÑ\80',
-'show' => 'көÑ\80Ñ\81еÑ\82',
+'hist' => 'тарихы',
+'hide' => 'Ð\96аÑ\81Ñ\8bÑ\80Ñ\83',
+'show' => 'Ð\9aÓ©Ñ\80Ñ\81еÑ\82Ñ\83',
 'minoreditletter' => 'ш',
 'newpageletter' => 'Ж',
 'boteditletter' => 'б',
 'number_of_watching_users_pageview' => '[бақылаған $1 қатысушы]',
 'rc_categories' => 'Санаттарға шектеу ("|" белгісімен бөліктеңіз)',
-'rc_categories_any' => 'Қайсыбір',
+'rc_categories_any' => 'Кез келген',
+'rc-change-size-new' => 'Өңдеуден кейінгі көлемі: {{PLURAL:$1|байт|байттар}}',
 'newsectionsummary' => '/* $1 */ жаңа бөлім',
-'rc-enhanced-expand' => 'Толық ақпаратын көрсету (JavaScript-ті керек етеді)',
-'rc-enhanced-hide' => 'Толық ақпаратын жасыру',
+'rc-enhanced-expand' => 'Толық ақпаратты көрсету (JavaScript-ті керек етеді)',
+'rc-enhanced-hide' => 'Толық ақпаратты жасыру',
+'rc-old-title' => 'Бастапқы «$1» сияқты жасалған',
 
 # Recent changes linked
 'recentchangeslinked' => 'Қатысты өзгерістер',
@@ -1468,8 +1566,9 @@ $3 келтірілген себебі: ''$2''",
 
 # Upload
 'upload' => 'Жүктеу',
-'uploadbtn' => 'Қотарып бер!',
+'uploadbtn' => 'Файлды жүктеу',
 'reuploaddesc' => 'Жүктеу пішініне қайта келу.',
+'upload-tryagain' => 'Файл сипаттамасының өзгерістерін жөнелту',
 'uploadnologin' => 'Кірмегенсіз',
 'uploadnologintext' => 'Файлдарды қотарып беру үшін [[{{#special:Userlogin}}|кіруіңіз]] жөн.',
 'upload_directory_missing' => 'Қотарып бермек қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
@@ -1505,6 +1604,7 @@ $3 келтірілген себебі: ''$2''",
 'filetype-unwanted-type' => "'''«.$1»''' — күтілмеген файл түрі. Ұнамды файл түрлері: $2.",
 'filetype-banned-type' => "'''«.$1»''' — рұқсатталмаған файл түрі. Рұқсатталған файл түрлері: $2.",
 'filetype-missing' => 'Бұл файлдың («.jpg» сияқты) кеңейтімі жоқ.',
+'empty-file' => 'Сіз жіберген файл бос.',
 'large-file' => 'Файлдың $1 мөлшерінен аспауына кепілдеме беріледі;
 бұл файл мөлшері — $2.',
 'largefileserver' => 'Осы файлдың мөлшері сервердің қалауынан асып кеткен.',
@@ -1535,18 +1635,25 @@ $3 келтірілген себебі: ''$2''",
 'uploadedimage' => '«[[$1]]» файлын жүктеді',
 'overwroteimage' => '«[[$1]]» файлынның жаңа нұсқасын қотарып берді',
 'uploaddisabled' => 'Қотарып беру өшірілген',
+'copyuploaddisabled' => 'URL арқылы жүктеу өшірілген.',
 'uploaddisabledtext' => '{{SITENAME}} жобасында файл қотарып беруі өшірілген.',
 'uploadscripted' => 'Бұл файлда веб шолғышты қателікпен талдатқызатын HTML не әмір коды бар.',
 'uploadvirus' => 'Бұл файлда вирус бар! Егжей-тегжейлері: $1',
+'upload-source' => 'Қайнар файл',
 'sourcefilename' => 'Қайнар файл атауы:',
+'sourceurl' => 'Қайнардың URL-мекенжайы:',
 'destfilename' => 'Нысана файл атауы:',
 'upload-maxfilesize' => 'Файлдың ең көп мүмкін мөлшері: $1',
-'watchthisupload' => 'Бұл бетті бақылау',
+'upload-description' => 'Файл сипаттамасы',
+'upload-options' => 'Жүктеу баптаулары',
+'watchthisupload' => 'Осы файлды бақылау',
 'filewasdeleted' => 'Бұл атауы бар файл бұрын қотарып берілген де бері келе жойылған.
 Бұны қайта қотарып беру алдынан $1 дегенді тексеріп шығыңыз.',
 'filename-bad-prefix' => "Қотарып бермек файлыңыздың атауы '''«$1» ''' деп басталады, мынадай сипаттаусыз атауды әдетте сандық камералар өздіктік береді.
 Файлыңызға сипаттылау атауды таңдаңыз.",
 'upload-success-subj' => 'Сәтті қотарып берілді',
+'upload-failure-subj' => 'Жүктеу мәселесі',
+'upload-warning-subj' => 'Жүктеу кезіндегі ескерту',
 
 'upload-proto-error' => 'Бұрыс хаттама',
 'upload-proto-error-text' => 'Шеттен қотарып беру үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.',
@@ -1557,6 +1664,11 @@ $3 келтірілген себебі: ''$2''",
 'upload-misc-error-text' => 'Қотарып беру кезінде белгісіз қатеге ұшырасты.
 URL жарамды және қатынаулы екенін тексеріп шығыңыз да қайта байқап көріңіз.
 Егер бұл мәселе әлде де қалса, жүйе әкімшімен қатынасыңыз.',
+'upload-too-many-redirects' => 'URL шектен тыс жылжытуларға ие',
+'upload-unknown-size' => 'Белгісіз өлшем',
+
+# HTTP errors
+'http-read-error' => 'HTTP оқудағы қате.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL жетілмеді',
@@ -1575,12 +1687,13 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'upload_source_file' => ' (компьютеріңіздегі файл)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Бұл арнайы бетте барлық қотарып берілген файлдар көрсетіледі.
-Соңғы қотарып берілген файлдар тізімде жоғарғы шетімен әдепкіден көрсетіледі.
+'listfiles-summary' => 'Бұл арнайы бетте барлық жүктелген файлдар көрсетіледі.
+Соңғы жүктелген файлдар тізімде жоғарғы шетімен әдепкіден көрсетіледі.
 Бағанның бас жолын нұқығанда сұрыптаудың реттеуі өзгертіледі.',
 'listfiles_search_for' => 'Таспа атауын іздеу:',
 'imgfile' => 'файл',
 'listfiles' => 'Файл тізімі',
+'listfiles_thumb' => 'Пішім',
 'listfiles_date' => 'Күн-айы',
 'listfiles_name' => 'Атауы',
 'listfiles_user' => 'Қатысушы',
@@ -2097,7 +2210,7 @@ $1',
 'sp-contributions-talk' => 'талқылауы',
 'sp-contributions-userrights' => 'Қатысушы құқықтарын реттеу',
 'sp-contributions-search' => 'Үлес үшін іздеу',
-'sp-contributions-username' => 'IP мекенжайы не қатысушы аты:',
+'sp-contributions-username' => 'IP-мекенжайы немесе қатысушы аты:',
 'sp-contributions-submit' => 'Ізде',
 
 # What links here
@@ -2125,7 +2238,7 @@ $1',
 'blockiptext' => 'Төмендегі пішін қатысушының жазу рұқсатын белгілі IP мекенжайымен не атымен бұғаттау үшін қолданылады.
 Бұны тек бұзақылықты қақпайлау үшін және де [[{{{{ns:mediawiki}}:Policy-url}}|ережелер]] бойынша атқаруыңыз жөн.
 Төменде тиісті себебін толтырып көрсетіңіз (мысалы, дәйекке бұзақылықпен өзгерткен беттерді келтіріп).',
-'ipadressorusername' => 'IP мекенжайы не қатысушы аты:',
+'ipadressorusername' => 'IP-мекенжайы немесе қатысушы аты:',
 'ipbexpiry' => 'Мерзімі бітпек:',
 'ipbreason' => 'Себебі:',
 'ipbreasonotherlist' => 'Басқа себеп',
@@ -2140,14 +2253,15 @@ $1',
 'ipbcreateaccount' => 'Тіркелуді қақпайлау',
 'ipbemailban' => 'Қатысушы е-поштамен хат жөнелтуін қақпайлау',
 'ipbenableautoblock' => 'Бұл қатысушы соңғы қолданған IP мекенжайын, және кейін өңдеуге байқап көрген әр IP мекенжайларын өзбұғаттауы',
-'ipbsubmit' => 'Қатысушыны бұғатта',
+'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' => 'Бұл қатысушының жеке және талқылау беттерін бақылау',
-'badipaddress' => 'Жарамсыз IP мекенжайы',
+'ipb-confirm' => 'Бұғаттауды растау',
+'badipaddress' => 'IP мекенжайы қате жазылған.',
 'blockipsuccesssub' => 'Бұғаттау сәтті өтті',
 'blockipsuccesstext' => '[[{{#special:Contributions}}/$1|$1]] деген бұғатталған.<br />
 Бұғаттарды шолып шығу үшін [[{{#special:Ipblocklist}}|IP бұғаттау тізімін]] қараңыз.',
@@ -2213,8 +2327,8 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 Осы мақсатыңызды, және баптау біткенде дерекқорды ашатыңызды құптаңыз.',
 'unlockdbtext' => 'Дерекқодын ашылуы барлық қатысушылардың бет өңдеу, баптауын қалау, бақылау тізімін, тағы басқа дерекқорды өзгертетін мүмкіндіктерін қалпына келтіреді.
 Осы мақсатыңызды құптаңыз.',
-'lockconfirm' => 'Ð\98Ó\99, Ð´ÐµÑ\80екÒ\9bоÑ\80 Ò\9bұлÑ\8bпÑ\82аÑ\83Ñ\8bн Ð½Ð°Ò\9bÑ\82Ñ\8b тілеймін.',
-'unlockconfirm' => 'Ð\98Ó\99, Ð´ÐµÑ\80екÒ\9bоÑ\80 Ò\9bұлÑ\8bпÑ\82амаÑ\83Ñ\8bн Ð½Ð°Ò\9bÑ\82Ñ\8b Ñ\82Ñ\96леймÑ\96н.',
+'lockconfirm' => 'Ð\98Ó\99, Ð¼ÐµÐ½ Ñ\88Ñ\8bнÑ\8bменде Ð´ÐµÑ\80екÒ\9bоÑ\80дÑ\8bÒ£ Ò\9bұлÑ\8bпÑ\82алÑ\83Ñ\8bн тілеймін.',
+'unlockconfirm' => 'Ð\98Ó\99, Ð¼ÐµÐ½ Ñ\88Ñ\8bнÑ\8bменде Ð´ÐµÑ\80екÒ\9bоÑ\80дÑ\8bÒ£ Ò\9bұлÑ\8bпÑ\82алÑ\83Ñ\8bн Ó©Ñ\88Ñ\96Ñ\80гÑ\96м ÐºÐµÐ»ÐµÐ´Ñ\96.',
 'lockbtn' => 'Дерекқорды құлыпта',
 'unlockbtn' => 'Дерекқорды құлыптама',
 'locknoconfirm' => 'Құптау көзіне құсбелгі салмағансыз.',
@@ -2258,12 +2372,12 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 
 Ал мақаланың атауын өзгертем деп мағлұматын қолмен көшіруге болмайды, себебі беттің түзету тарихын өшіреді.",
 'movearticle' => 'Ағымдағы бет атауы:',
-'movenologin' => 'Ð\96үйеге кірмегенсіз',
+'movenologin' => 'СÑ\96з Ð¶үйеге кірмегенсіз',
 'movenologintext' => 'Бетті жылжыту үшін тіркелген болуыңыз және [[{{#special:UserLogin}}|кіруіңіз]] жөн.',
 'movenotallowed' => '{{SITENAME}} жобасында беттерді жылжыту руқсатыңыз жоқ.',
 'newtitle' => 'Жаңа бет атауы:',
 'move-watch' => 'Бұл бетті бақылау',
-'movepagebtn' => 'Бетті жылжыт',
+'movepagebtn' => 'Бетті жылжыту',
 'pagemovedsub' => 'Жылжыту сәтті аяқталды',
 'movepage-moved' => '\'\'\'"$1" беті "$2" бетіне жылжытылды\'\'\'',
 'articleexists' => 'Осылай аталған бет алдақашан бар, не таңдаған атауыңыз жарамды емес.
@@ -2321,6 +2435,12 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'allmessagestext' => 'Мында {{ns:mediawiki}} есім аясында жетімді жүйе хабар тізімі беріледі.
 Егер әмбебап MediaWiki жерсіндіруге үлес қосқыңыз келсе [//www.mediawiki.org/wiki/Localisation MediaWiki жерсіндіру бетіне] және [//translatewiki.net translatewiki.net жобасына] барып шығыңыз.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' өшірілген себебінен '''{{#special:AllMessages}}''' беті қолданылмайды.",
+'allmessages-filter-legend' => 'Сүзгі',
+'allmessages-filter-unmodified' => 'Өзгертілмегендер',
+'allmessages-filter-all' => 'Барлығы',
+'allmessages-filter-modified' => 'Өзгертілгендер',
+'allmessages-language' => 'Тілі:',
+'allmessages-filter-submit' => 'Өту',
 
 # Thumbnails
 'thumbnail-more' => 'Үлкейту',
index 24aa511..b981fe1 100644 (file)
@@ -1069,7 +1069,6 @@ Añğartpa: bağıttaw siltemelerin qoldanğanda bul bağan qaýta qoýıladı.'
 
 # Diffs
 'history-title' => '«$1» — tüzetw tarïxı',
-'difference' => '(Tüzetwler arasındağı aýırmaşılıq)',
 'lineno' => 'Jol nömiri $1:',
 'compareselectedversions' => 'Bölektengen nusqalardı salıstırw',
 'editundo' => 'joqqa şığarw',
index 149187b..a56ae7c 100644 (file)
@@ -1206,7 +1206,6 @@ $1",
 
 # Diffs
 'history-title' => 'ប្រវត្តិកំណែប្រែនានានៃ "$1"',
-'difference' => '(ប្រៀបធៀបកំណែនានា)',
 'difference-multipage' => '(ភាពខុសគ្នារវាងទំព័រនានា)',
 'lineno' => 'បន្ទាត់ទី$1៖',
 'compareselectedversions' => 'ប្រៀបធៀប​កំណែដែលបាន​ជ្រើសយក',
index 0ca82d3..1cf1258 100644 (file)
@@ -802,7 +802,6 @@ $2',
 
 # Diffs
 'history-title' => '"$1" ಪುಟದ ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ',
-'difference' => '(ಆವೃತ್ತಿಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸ)',
 'lineno' => '$1 ನೇ ಸಾಲು:',
 'compareselectedversions' => 'ಆಯ್ಕೆ ಮಾಡಿದ ಆವೃತ್ತಿಗಳನ್ನು ಹೊಂದಾಣಿಕೆ ಮಾಡಿ ನೋಡಿ',
 'showhideselectedversions' => 'ಆಯ್ದ ಆವೃತ್ತಿಗಳನ್ನು ತೋರಿಸು/ಅಡಗಿಸು',
index d0a6f9b..5a05292 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Albamhandae
+ * @author Altostratus
  * @author Chanhee
  * @author Chulki Lee
  * @author Cwt96
@@ -953,6 +954,7 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 'updated' => '(바뀜)',
 'note' => "'''주의:'''",
 'previewnote' => "'''이 화면은 미리 보기입니다'''. 편집한 내용은 아직 저장되지 않았습니다!",
+'continue-editing' => '계속 편집하기',
 'previewconflict' => '이 미리 보기는 저장할 때의 모습, 즉 위쪽 편집창의 문서를 반영합니다.',
 'session_fail_preview' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.
 다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인해 보십시오.'''",
@@ -1043,6 +1045,10 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'parser-template-loop-warning' => '재귀적인 틀이 발견되었습니다: [[$1]]',
 'parser-template-recursion-depth-warning' => '틀 반복 횟수 제한을 초과함($1)',
 'language-converter-depth-warning' => '언어 변환기 실행 제한 초과($1)',
+'node-count-exceeded-category' => '페이지가 노드 횟수를 초과하였습니다.',
+'node-count-exceeded-warning' => '페이지가 노드 수를 초과하였습니다.',
+'expansion-depth-exceeded-category' => '페이지가 확장 깊이를 초과하였습니다.',
+'expansion-depth-exceeded-warning' => '페이지가 확장 깊이를 초과하였습니다',
 
 # "Undo" feature
 'undo-success' => '이 편집을 되돌리려면 아래의 변경되는 사항을 확인한 후 저장해주세요.',
@@ -1221,7 +1227,6 @@ $1",
 
 # Diffs
 'history-title' => '‘$1’ 문서의 변경 내력',
-'difference' => '(버전 사이의 차이)',
 'difference-multipage' => '(문서간의 차이)',
 'lineno' => '$1번째 줄:',
 'compareselectedversions' => '선택된 판들을 비교하기',
@@ -2128,6 +2133,11 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'allpages-bad-ns' => '{{SITENAME}}에서는 ‘$1’ 이름공간을 사용하지 않습니다.',
 'allpages-hide-redirects' => '넘겨주기 숨기기',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => '지금 이 문서의 캐시된 버전을 보고 있습니다. 이 버전은 최대 $1만큼 지난 버전일 가능성이 있습니다.',
+'cachedspecial-viewing-cached-ts' => '현재 이 페이지는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.',
+'cachedspecial-refresh-now' => '최신 버전 보기.',
+
 # Special:Categories
 'categories' => '분류',
 'categoriespagetext' => '{{PLURAL:$1}}문서나 자료를 담고 있는 분류 목록입니다.
@@ -2561,7 +2571,8 @@ $1',
 'ipb-confirm' => '차단 확인',
 'badipaddress' => '잘못된 IP 주소',
 'blockipsuccesssub' => '차단 완료',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] 사용자가 차단되었습니다. 차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] 사용자가 차단되었습니다.<br />
+차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.',
 'ipb-blockingself' => '자기 자신을 차단하려고 합니다. 정말로 실행할까요?',
 'ipb-confirmhideuser' => '당신은 사용자를 차단하면서 "계정 숨기기" 설정을 선택했습니다. 이로써 모든 기록에서 이 사용자의 계정 이름을 숨기게 됩니다. 정말로 계정을 숨기시겠습니까?',
 'ipb-edit-dropdown' => '차단 이유 목록 편집하기',
@@ -2612,7 +2623,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'blocklog-showsuppresslog' => '이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.',
 'blocklogentry' => '[[$1]] 사용자를 $2 차단함 $3',
 'reblock-logentry' => '[[$1]] 사용자의 차단 기간을 $2(으)로 변경 $3',
-'blocklogtext' => '이 목록은 사용자 차단/차단 해제 기록입니다. 자동으로 차단된 IP 주소는 여기에 나오지 않습니다. [[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
+'blocklogtext' => '이 목록은 사용자 차단/차단 해제 기록입니다.
+자동으로 차단된 IP 주소는 여기에 나오지 않습니다.
+[[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
 'unblocklogentry' => '$1을 차단 해제했습니다.',
 'block-log-flags-anononly' => 'IP만 막음',
 'block-log-flags-nocreate' => '계정 생성 막음',
@@ -3694,6 +3707,8 @@ $5
 'version-software' => '설치된 프로그램',
 'version-software-product' => '제품',
 'version-software-version' => '버전',
+'version-entrypoints' => 'URL 진입점',
+'version-entrypoints-header-entrypoint' => '진입점',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
index 870b0dc..30fdfcb 100644 (file)
@@ -317,7 +317,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '$1 вильмöтан история',
-'difference' => '(Неöткодьыс версияэз коласын)',
 'difference-multipage' => 'Неöткодьыс листбоккез коласын',
 'lineno' => 'Визёк $1:',
 'compareselectedversions' => 'Ордчаöтны бöрйöм версияэз',
index 1e757d4..0ce1c28 100644 (file)
@@ -326,6 +326,8 @@ $1',
 'page-rss-feed' => '«$1» — RSS-лентасы',
 'page-atom-feed' => '«$1» — Atom-лентасы',
 'red-link-title' => '$1 (быллай бет джокъду)',
+'sort-descending' => 'Кем болуугъа кёре тиз',
+'sort-ascending' => 'Ёсюуге кёре тиз',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Статья',
@@ -392,6 +394,7 @@ $1',
 'badarticleerror' => 'Бу бетде этилирге болмайды быллай амал.',
 'cannotdelete' => '«$1» файлны неда бетни кетерирге болмайды.
 Башха къошулуучу кетерген болургъа боллукъду аны.',
+'cannotdelete-title' => '«$1» бетни кетерирге болмайды',
 'badtitle' => 'Джарамагъан ат',
 'badtitletext' => 'Сорулгъан бетни аты терсди, бошду, неда интервики аты терс джазылгъанды. Келишмеген (хайырланыргъа болмагъан) символла хайырланыргъада боллукъдула атында.',
 'perfcached' => 'Бу информация кэшден алыннганды, ахыр тюрлениулени кёргюзмезге боллукъду. Кэшде максимум {{PLURAL:$1|джазыу}} сакъланады.',
@@ -402,6 +405,7 @@ $1',
 Функция: $1<br />
 Соруу: $2',
 'viewsource' => 'Къарау',
+'viewsource-title' => '$1 бетни чыкъгъан текстине къарау',
 'actionthrottled' => 'Терклик чекленнгенди',
 'actionthrottledtext' => 'Спамгъа къаршчы кюрешиуню себебинден, аз заманны ичинде бу амал бла кёб кере хайырланыу тыйылыбды. Кечирек джангыдан кёрюгюз.',
 'protectedpagetext' => 'Бу бет тюрлендириуге джабылыбды.',
@@ -493,6 +497,7 @@ $2',
 'emailconfirmlink' => 'Электрон почта адресигизни бегитигиз.',
 'invalidemailaddress' => 'Электрон почта адресигизи къабыл этилинирге болмайды, форматха келишмегени ючюн.
 Тюз адрес джазыгъыз неда тизгинни бош къоюгъуз.',
+'emaildisabled' => 'Бу сайт, электрон потча бла билдириуле иймейди.',
 'accountcreated' => 'Тергеу джазыу (аккаунт) къуралды',
 'accountcreatedtext' => '$1 къошулуучугъа тергеу джазыу (аккаунт) къуралды.',
 'createaccount-title' => '{{SITENAME}}: тергеу джазыу (аккаунт) къурау',
@@ -526,8 +531,16 @@ $2',
 'resetpass-temp-password' => 'Болджаллы пароль:',
 
 # Special:PasswordReset
+'passwordreset' => 'Паролну атыу',
+'passwordreset-text' => 'Электрон джазма бла тергеу джазыуугъузну (аккаунтугъузну) параметрлерини юсюнден билдириу алыр ючюн бу форманы толтуругъуз.',
+'passwordreset-legend' => 'Паролну ий',
+'passwordreset-disabled' => 'Бу викиде паролла атыу амал джукъланыбды.',
+'passwordreset-pretext' => '{{PLURAL:$1||Тюбюрекде берилген билгиледен бирин джазыгъыз}}',
 'passwordreset-username' => 'Къошулуучуну аты:',
 'passwordreset-domain' => 'Домен:',
+'passwordreset-capture' => 'Джазылгъан билдириуню эсебине къара?',
+'passwordreset-capture-help' => 'Бу белгини салсагъыз, къошулуучугъа ийилген болджаллы пароль бла билдириу сизге кёргюзюллюкдю.',
+'passwordreset-email' => 'Электрон почтаны адреси:',
 
 # Special:ChangeEmail
 'changeemail-no-info' => 'Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.',
@@ -629,20 +642,25 @@ $2',
 'userpage-userdoesnotexist-view' => '«$1» тергеу джазыу (аккаунт) джокъду.',
 'blocked-notice-logextract' => 'Бу къошулуучу бусагъатда блокланыб турады.
 Тюбюнде блокланыуланы журналындан ахыр джазыу бериледи:',
-'clearyourcache' => "'''Эслегиз:''' Бетде сакъланнгандан сора тюрлендириуле кёрюнюрча браузеригизни кэшин ариулатыгъыз:
-'''Mozilla / Firefox''': ''Ctrl+Shift+R'',
-'''IE:''' ''Ctrl+F5'',
-'''Safari''': ''Cmd+Shift+R'',
- '''Konqueror''': ''F5'',
-'''Opera''':  ''Tools→Preferences'' меню бла.",
+'clearyourcache' => "'''Эслегиз.''' Бетде сакъланнгандан сора тюрлендириуле кёрюнюрча браузеригизни кэшин ариулатыргъа керек болургъа боллукъду.
+* '''Firefox / Safari''': ''Shift'' тиекни басыб тургъанлай инструментлени панелинде ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз, неда ''Ctrl-R'' (Mac-да — ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' басыгъыз (Mac-да — ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' тиекни басыб тургъанлай ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз
+* '''Konqueror:''' ''Джангырт'' тиекни басыгъыз, неда ''F5'' тиекни
+* '''Opera:''' ''Инструментле → Джарашдырыула'' менюда кэшни ариулауну сайлагъыз",
 'usercssyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы CSS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
 'userjsyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы JS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
 'usercsspreview' => "'''Эсде тутугъуз, бу къуру ал къарауду, CSS файлыгъыз алкъын сакъланмагъанды!'''",
 'userjspreview' => "'''Эсде тутугъуз, бу къуру ал къарауду, javascript файлыгъыз алкъын сакъланмагъанды!'''",
+'sitecsspreview' => "'''Эслегиз, бу CSS-ни къуру ал къараууду.'''
+ '''Ол алкъын сакъланмагъанды!'''",
+'sitejspreview' => "'''Эслегиз, бу JavaScript-кодну къуру ал къараууду.'''
+ '''Ол алкъын сакъланмагъанды!'''",
 'userinvalidcssjstitle' => "'''Эс бёлюгюз:''' «$1» атлы тема джокъду. Эсде тутугъуз, .css эм .js бетле атлары ажымсыз къуру гитче харифледен болургъа керекди, сёз ючюн: {{ns:user}}:Foo/vector.css, былай  {{ns:user}}:Foo/Vector.css тюйюл!",
 'updated' => '(Джангыртылды)',
 'note' => "'''Белги:'''",
-'previewnote' => "'''Бу къуру ал къарауду, текст алкъын сакъланмагъанды!'''",
+'previewnote' => "'''Бу къуру ал къарауду.'''
+Сиз этген тюрлениуле алкъын сакъланмагъандыла!",
 'previewconflict' => 'Бу ал къарау, башындагъы тюрлендириу терезеде текстни сакъланнганча кёргюзеди.',
 'session_fail_preview' => "'''Джарсыугъа, сессияны идентификаторуну тас этгени себебли, сервер сизни тюрлендириуюгюзни сакълаталмагъанды.
 Энтдада кёрюгюз.
@@ -655,6 +673,7 @@ $2',
 Себеби: браузеригиз редактор терезеде пунктуация белгилени терс кёргюзеди, аны ючюн статьяны тексти бузулургъа боллукъду.
 Бу халатлары болгъан аноним веб-проксилени хайырландырылгъанлары ючюн болургъа боллукъду'''",
 'editing' => '«$1» бетни тюрлендириу',
+'creating' => '«$1» бетни къурау',
 'editingsection' => '«$1» бетде бёлюмню тюрлендириу',
 'editingcomment' => '«$1» бетни тюрлендириу (джангы бёлюм)',
 'editconflict' => 'Тюрлендириу конфликт: $1',
@@ -678,7 +697,7 @@ $2',
 Башхала сизни текстлеригизни тюрлендиргенлерин излемей эсегиз, былайгъа салмагъыз.<br />
 Сиз дагъыда этген къошакъларыгъызны автору болгъаныгъызны неда информацияны чыкъгъан джери эркин джаяргъа эм тюрлендирирге къойгъанын аны бегитесиз (къарагъыз: $1).
 '''ЭРКИНЛИКСИЗ АВТОР ХАКЪ БЛА ДЖАКЪЛАННГАН МАТЕРИАЛЛА САЛМАГЪЫЗ БЫЛАЙГЪА!'''",
-'longpageerror' => "'''ХАЛАТ: сиз сакълатхан текстни  {{PLURAL:$1|$1 килобайт|$1 килобайт|$1 килобайт}} ёлчеми барды, ол {{PLURAL:$2|$2 килобайт|$2 килобайт|$2 килобайт}} чекден кёбдю. Бет сакъланныкъ тюлдю.'''",
+'longpageerror' => "'''ХАЛАТ: сиз сакълатхан текстни  {{PLURAL:$1|бир килобайт|$1 килобайт}} ёлчеми барды, ол {{PLURAL:$2|бир килобайт|$2 килобайт}} чекден кёбдю. Бет сакъланныкъ тюлдю.'''",
 'readonlywarning' => "'''Эс бёлюгюз: Билгилени базасы бусагъатда киритленибди. Ол себебден тюрлениулеригиз къошулаллыкъ тюлдю. Джазгъанларыгъызны башха бир файлда сакълаб, кечирек къошаргъа боллукъсуз'''
 
 Киритлеген администратор бу билдириуню къойгъанды: $1",
@@ -720,6 +739,7 @@ $2',
 'edit-no-change' => 'Текстде тюрлениуле эсленмегени ючюн, сизни тюрлендириуюгюз къабыл этилмеди.',
 'edit-already-exists' => 'Джангы бет къураргъа боллукъ тюлдю.
 Алайсызда барды бу атлы бет.',
+'defaultmessagetext' => 'Тынгылау бла текст',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Эсгериу:''' Бу бетде асыры кёб къайнакълы функция барды.
@@ -780,36 +800,35 @@ $3 джанындан берилген сылтау: ''$2''",
 Темасы аннга ушагъан бетлени табар ючюн [[Special:Search|викиде излеб]] кёрюгюз.',
 
 # Revision deletion
-'rev-deleted-comment' => '(комментарий кетерилгенди)',
+'rev-deleted-comment' => '(тюрлендириуню суратлауу кетерилгенди)',
 'rev-deleted-user' => '(къошулуучуну аты кетерилгенди)',
 'rev-deleted-event' => '(джазыу кетерилгенди)',
 'rev-deleted-user-contribs' => '[къошулуучуну аты неда IP-адреси кетерилгенди — тюрлендириу къошакъны бетинде кёргюзюлмейди]',
 'rev-deleted-text-permission' => "Бетни бу версиясы '''кетерилгенди'''.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Кетериулени журналында] табыб къояргъа боллукъсуз.",
-'rev-deleted-text-unhide' => "Бу бетни версиясы '''кетерилгенди'''.
-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Кетериулени журналында] чурумла ангылатылгъан болур.
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð±Ð¾Ð»Ð³Ñ\8aанÑ\8bгÑ\8aÑ\8bз Ñ\8eÑ\87Ñ\8eн [$1 бу версияны кёрюрге боллукъсуз].",
-'rev-suppressed-text-unhide' => "Бетни бу версиясы '''джашырылгъанды'''.
-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Джашырылыуланы журналында] чурумла берилген болурла.
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð±Ð¾Ð»Ð³Ñ\8aанÑ\8bгÑ\8aÑ\8bз Ñ\8eÑ\87Ñ\8eн [$1 версияны кёрюрге боллукъсуз].",
-'rev-deleted-text-view' => "Ð\91еÑ\82ни Ð±Ñ\83 Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\81Ñ\8b '''кеÑ\82еÑ\80илгенди'''.
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð±Ð¾Ð»Ð³Ñ\8aанÑ\8bз Ñ\8eÑ\87Ñ\8eн Ð°Ð½Ð½Ð³Ð° ÐºÑ\8aаÑ\80аÑ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aÑ\81Ñ\83з; Ð\90нгÑ\8bлаÑ\82Ñ\8bÑ\83ла [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð\9aеÑ\82еÑ\80иÑ\83лени Ð¶Ñ\83Ñ\80налÑ\8bнда] Ð±Ð¾Ð»Ñ\83Ñ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aдÑ\83ла.",
-'rev-suppressed-text-view' => "Бу бетни версиясы '''джашырылгъанды'''.
\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð±Ð¾Ð»Ð³Ñ\8aанÑ\8bгÑ\8aÑ\8bз Ñ\8eÑ\87Ñ\8eн ÐºÑ\8aаÑ\80аÑ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aÑ\81Ñ\83з. Ð\90нгÑ\8bлаÑ\82Ñ\8bÑ\83ла [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ð\94жаÑ\88Ñ\8bÑ\80Ñ\8bÑ\83ланÑ\8b Ð¶Ñ\83Ñ\80налÑ\8bнда] Ð±Ð¾Ð»Ñ\83Ñ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aдÑ\83ла.",
+'rev-deleted-text-unhide' => "Бетни бу версиясы '''кетерилгенди'''.
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Кетериулени журналында] чурумла ангылатылгъандыла.
¡Ñ\8eйÑ\81егиз [$1 бу версияны кёрюрге боллукъсуз].",
+'rev-suppressed-text-unhide' => "Бетни бу версиясы '''джашырылыбды'''.
+[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Джашырылыуланы журналында] чурумла берилгендиле.
¡Ñ\8eйÑ\81егиз [$1 версияны кёрюрге боллукъсуз].",
+'rev-deleted-text-view' => "Ð\91еÑ\82ни Ð±Ñ\83 Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\81Ñ\8b '''кеÑ\82еÑ\80илибди'''.
¡Ñ\8eйÑ\81егиз ÐºÑ\8aаÑ\80аÑ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aÑ\81Ñ\83з. Ð\90нгÑ\8bлаÑ\82Ñ\8bÑ\83ла [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐºÐµÑ\82еÑ\80иÑ\83лени Ð¶Ñ\83Ñ\80налÑ\8bнда] Ð±Ð°Ñ\80дÑ\8bла.",
+'rev-suppressed-text-view' => "Бетни бу версиясы '''джашырылыбды'''.
¡Ñ\8eйÑ\81егиз ÐºÑ\8aаÑ\80аÑ\80гÑ\8aа Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aÑ\81Ñ\83з. Ð\90нгÑ\8bлаÑ\82Ñ\8bÑ\83ла [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ÐºÐµÑ\82еÑ\80иÑ\83лени Ð¶Ñ\83Ñ\80налÑ\8bнда] Ð±Ð°Ñ\80дÑ\8bла.",
 'rev-deleted-no-diff' => "Бетни версияларыны бири '''кетерилгени''' ючюн, тенглешдиреллик тюлсюз.
 Ангылатыула [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъдула.",
 'rev-suppressed-no-diff' => "Бетни бу версияларын тенглешдиреллик тюлсюз, аладан бири '''кетерилиб''' турады.",
-'rev-deleted-unhide-diff' => "Бетни версияларыны бири '''кетерилгенди'''.
-Ангылатыула [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа болур.
-Администратор болгъаныгъыз ючюн [$1 версиягъа къараргъа боллукъсуз].",
-'rev-suppressed-unhide-diff' => "Бу тенглешдириуну версияларыны бири '''джашырылгъанды'''.
-Ангылатыула [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} джашырыуланы журналында] болургъа болур.
-Администратор болгъаныгъыз ючюн, андан ары бардырыргъа излей эсегиз [$1 версияланы бу башхалыгъына] къараргъа боллукъсуз.",
-'rev-deleted-diff-view' => "Бу тенглешдириуню версияларыны бири '''кетерилгенди'''.
-Администратор болгъаныгъыз ючюн бу тенглештириуге къараргъа боллукъсуз, ангылатыула
-Как администратор, вы можете просмотреть это сравнение, подробности могут быть указаны в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъдула.",
-'rev-suppressed-diff-view' => "Бу тенглешдириуню версияларыны бири '''джашырылгъанды'''.
-Администратор болгъаныгъыз ючюн, бу тенглешдириуге къараргъа боллукъсуз, ангылатыула [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} джашырыуланы журналында] болургъа боллукъду.",
+'rev-deleted-unhide-diff' => "Бетни версияларындан бири '''кетерилибди'''.
+Ангылатыула [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] бардыла.
+Сюйсегиз [$1 версияланы башхалыкъларына къараргъа боллукъсуз].",
+'rev-suppressed-unhide-diff' => "Бетни версияларындан бири ''''''джашырылыбды''''''.
+Ангылатыула [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кетериулени журналында] бардыла.
+Сюйсегиз [$1 версияланы башхалыкъларына къараргъа боллукъсуз].",
+'rev-deleted-diff-view' => "Бу тенглешдириуню версияларыны бири '''кетерилибди'''.
+Сюйсегиз бу тенглештириуге къараргъа боллукъсуз. Ангылатыула [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] бардыла.",
+'rev-suppressed-diff-view' => "Бу тенглешдириуню версияларыны бири '''джашырылыбды'''.
+Сюйсегиз бу тенглештириуге къараргъа боллукъсуз. Ангылатыула [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кетериулени журналында] бардыла.",
 'rev-delundel' => 'кёргюзюу/джашырыу',
 'rev-showdeleted' => 'кёргюз',
 'revisiondelete' => 'Бетни версияларын кетер/къайтар',
@@ -876,8 +895,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'Джашырыуланы журналы',
-'suppressionlogtext' => 'ТÑ\8eбÑ\8eндеги, Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ладан Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\8bлгÑ\8aан Ð¼Ð°Ñ\82еÑ\80иаллада ÐºÑ\8aоÑ\88Ñ\83лгÑ\8aан ÐºÑ\91б Ð±Ð¾Ð»Ð¼Ð°Ð¹ Ñ\8dÑ\82илген ÐºÐµÑ\82еÑ\80иÑ\83ле Ð±Ð»Ð° Ñ\82Ñ\8bйÑ\8bлÑ\8bÑ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83дÑ\83.
-Бусагъатдагъы тыйылыуланы списоклары ючюн [[Special:IPBlockList|IP-тыйылыуланы списогуна]] къарагъыз.',
+'suppressionlogtext' => 'ТÑ\8eбÑ\8eндеги, Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ладан Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\8bлгÑ\8aан Ð¼Ð°Ñ\82еÑ\80иаллада Ð±Ð¾Ð»Ð³Ñ\8aан ÐºÐµÑ\82еÑ\80иÑ\83ле Ð±Ð»Ð° Ð±Ð»Ð¾Ðº Ñ\8dÑ\82иÑ\83лени Ñ\82измеÑ\81иди.
+[[Special:BlockList|Блок этиулени тизмесинде]] бусагъатдагъы блокланы табаргъа боллукъду.',
 
 # History merging
 'mergehistory' => 'Бетни тарихлерини бирлештириую.',
@@ -912,7 +931,6 @@ $1",
 
 # Diffs
 'history-title' => '«$1» бетни тюрлениу тарихи',
-'difference' => '(Версияланы араларында башхалыкъ)',
 'difference-multipage' => '(Бетле арасында башхалыкъ)',
 'lineno' => 'Тизгин $1:',
 'compareselectedversions' => 'Сайланнган версияланы тенглешдириу',
@@ -1455,10 +1473,10 @@ URL-адрес тюз болгъанын осмакълагъыз эмда дж
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Эркинлик джасакъланнганды',
-'img-auth-nopathinfo' => 'PATH_INFO джокъду.
+'img-auth-nopathinfo' => '<code>PATH_INFO</code> джокъду.
 Серверигиз бу билгилени джиберир ючюн джарашмагъанды.
-CGI тамалында ишлерге эмда img_auth бла ишлемезге болур.
-https://www.mediawiki.org/wiki/Manual:Image_Authorization бетге къара.',
+CGI тамалында ишлерге эмда <code>img_auth</code> бла ишлемезге болур.
+Къарагъыз: https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Изленнген джол джюклениулени папкасы бла байламлы тюлдю.',
 'img-auth-badtitle' => '«$1» бла джараулу башлыкъ этилмейди.',
 'img-auth-nologinnWL' => 'Сиз системагъа кирмедигиз, эмда «$1» акъ списокда тюлдю.',
@@ -1498,9 +1516,8 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'upload_source_file' => '(компьютеригиздеги файл)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Бу къуллукъ бет бютеу джюкленнген файлланы кёргюзеди.
-Кеб болмай джюкленнге файлла тынгылау бла списокну башында кёргюзюледиле.
-Колонканы башлыгъына басыу сафламаны тюрлендиреди.',
+'listfiles-summary' => 'Бу къуллукъ бет, бютеу джюкленнген файлланы кёргюзеди.
+Къошулуучугъа кёре айырыуда, ол къошулуучуну джангыз кёб болмай джюклеген файллары кёргюзюледиле.',
 'listfiles_search_for' => 'Медиа ат бла изле:',
 'imgfile' => 'файл',
 'listfiles' => 'Файлланы списогу',
@@ -1529,7 +1546,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'filehist-filesize' => 'Файлны ёлчеми',
 'filehist-comment' => 'Эсгериу',
 'filehist-missing' => 'Файл джокъду',
-'imagelinks' => 'ФайлгÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83ле',
+'imagelinks' => 'ФайлнÑ\8b Ñ\85айÑ\8bÑ\80ланÑ\8bÑ\83Ñ\83',
 'linkstoimage' => 'Бу файлгъа {{PLURAL:$1|бет|$1 бет}} джибередиле:',
 'linkstoimage-more' => '$1-ден артыкъ {{PLURAL:$1|бет|бет}} бу файлгъа джибериу береди.
 Кёзюудеги список къуру бу файлгъа джибериу берген {{PLURAL:$1|биринчи файлны|биринчи $1 файлны}} кёргюзеди.
@@ -1623,7 +1640,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'statistics-users-active-desc' => 'Ахыр {{PLURAL:$1|1 кюнде|$1 кюнде}} ишлеме этген къошулуучула',
 'statistics-mostpopular' => 'Эм кёб къаралгъан бетле',
 
-'disambiguations' => 'Ð\9aÑ\91б Ð¼Ð°Ð³Ñ\8aаналÑ\8b Ð°Ð½Ð³Ñ\8bламланÑ\8b Ð±ÐµÑ\82леÑ\80и',
+'disambiguations' => 'Ð\90нгÑ\8bлам Ð°Ð¹Ñ\8bÑ\80гÑ\8aан Ð±ÐµÑ\82леге Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83леÑ\80и Ð±Ð¾Ð»Ð³Ñ\8aан Ð±ÐµÑ\82ле',
 'disambiguationspage' => 'Template:кёб магъаналылыкъ',
 'disambiguations-text' => "Бу бетле '''кёб магъаналы бетлеге''' джибериу этедиле. Аны орнуна ала белгили бир статьягъа джибериу этерге керек болурла.<br />
 [[MediaWiki:Disambiguationspage]] бетде аты салынган шаблон бетде болса, ол бет кёб магъаналы бетге саналады.",
@@ -1694,7 +1711,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'listusers-editsonly' => 'Къуру тюрлендириу этген къошлуучуланы кёргюз',
 'listusers-creationsort' => 'Къуралгъан заманына кёре сафла',
 'usereditcount' => '$1 {{PLURAL:$1|тюрлендириу|тюрлендириу}}',
-'usercreated' => 'Къуралгъанды: $1 $2',
+'usercreated' => '$1 $2 заманда {{GENDER:$3|регистрацияны ётгенди}}',
 'newpages' => 'Джангы бетле',
 'newpages-username' => 'Къошулуучуну аты:',
 'ancientpages' => 'Ахыр тюрлендириуге кёре эм эски болгъан статьяла',
@@ -1720,8 +1737,8 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'booksources-invalid-isbn' => 'Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.',
 
 # Special:Log
-'specialloguserlabel' => 'Ð\9aÑ\8aоÑ\88Ñ\83луучу:',
-'speciallogtitlelabel' => 'Ð\91аÑ\88лÑ\8bкÑ\8a:',
+'specialloguserlabel' => 'ТолÑ\82Ñ\83Ñ\80уучу:',
+'speciallogtitlelabel' => 'ЫÑ\88ан (баÑ\88лÑ\8bкÑ\8a Ð½ÐµÐ´Ð° ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83):',
 'log' => 'Журналла',
 'all-logs-page' => 'Бютеу ачыкъ журналла',
 'alllogstext' => '{{SITENAME}} ючюн бютеу бар болгъан журналланы бирлешген списогу.
@@ -1761,12 +1778,13 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'sp-deletedcontributions-contribs' => 'къошхан юлюш',
 
 # Special:LinkSearch
-'linksearch' => 'Тыш джибериуле',
+'linksearch' => 'Тыш джибериулени излеу',
 'linksearch-pat' => 'Излеуге шаблон:',
 'linksearch-ns' => 'Ат алам:',
 'linksearch-ok' => 'Таб',
-'linksearch-text' => '<code>*.wikipedia.org</code> кибик джокерле хайырландырыргъа боллукъду.<br />
-Дагъан болгъан протоколла: <tt>$1</tt>',
+'linksearch-text' => '<code>*.wikipedia.org</code> кибик символлла хайырландырыргъа боллукъдула.
+Эм азы бла огъары дараджаны домени керекди, юлгюге: <code>*.org</code><br />
+Дагъан болгъан протоколла: <tt>$1</tt> (быладан къайсысында излеуюгюзге къошмагъыз)',
 'linksearch-line' => '$1-ге  $2-ден джибериу берилгенди',
 'linksearch-error' => 'Джокерле къуру адреслени аллында хайырланыргъа боллукъдула.',
 
@@ -1818,13 +1836,16 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'emailpagetext' => 'Бу къошулуучуну почтасына письмо джиберир ючюн бу форманы толтурургъа боллукъсуз.
 Ызына адрес болуб, сиз [[Special:Preferences|джарашдырыуларыгъызда]] джазгъан адрес белгиленникди, ол себебден сизни письмогъузну аллыкъ сизге тюз джууаб берирге мадарлы боллукъду.',
 'usermailererror' => 'Халат ючюн элетктрон письмо ызына къайтды:',
-'defemailsubject' => '{{SITENAME}} письмо',
+'defemailsubject' => '{{SITENAME}} — $1 къошулуучудан билдириу',
 'usermaildisabled' => 'Къошулуучуну электрон почтасы джукъланыбды',
 'usermaildisabledtext' => 'Сиз бу викини башха къошулуучуларына электрон письмола джиберелмейсиз',
 'noemailtitle' => 'Электрон почтаны адреси джокъду',
 'noemailtext' => 'Бу къошулуучу керти электрон адресин бермегенди.',
 'nowikiemailtitle' => 'Электрон письмо джиберирге эркинлик джокъду',
 'nowikiemailtext' => 'Бу къошулуучу, башха къошулуучуладан электрон писмо алыргъа излемегенин билдиргенди.',
+'emailtarget' => 'Аллыкъ къошулуучуну атын джазыгъыз',
+'emailusername' => 'Къошулуучуну аты:',
+'emailusernamesubmit' => 'Джибер',
 'email-legend' => 'Башха {{SITENAME}} къошулуучугъа электрон письмо джибер',
 'emailfrom' => 'Кимден:',
 'emailto' => 'Кимге:',
@@ -1849,8 +1870,10 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'watchlistanontext' => 'Кёзюгюзде тургъан тизмегизни статьяланы кёрюр неда тюрлендирир ючюн $1.',
 'watchnologin' => 'Системагъа кирирге керекди.',
 'watchnologintext' => 'Кёзюгюзде тургъан тизмегизни тюрлендирир ючюн [[Special:UserLogin|системагъа кирирге керексиз]].',
+'addwatch' => 'Кёзде тургъан тизмеге къош',
 'addedwatchtext' => '«[[:$1]]» бет [[Special:Watchlist|кёзюгюзде тургъан тизмегизге]] къошулду.
 Бу бетни эмда муну бла байламлы сюзюу бетни тюрлениулери ол тизмеде белгиленникдиле, [[Special:RecentChanges|джангы тюрлениулени тизмесини]] бетинде уа къалын шрифт бла чертилинникдиле, кёрюрге тынчыракъ болурча.',
+'removewatch' => 'Кёзде тургъан тизмеден кетер',
 'removedwatchtext' => '«[[:$1]]» бет сизни [[Special:Watchlist|кёзюгюзде тургъан тизмегизден]] кетерилгенди.',
 'watch' => 'Кёзде тут',
 'watchthispage' => 'Бу бетни кёзде тут',
@@ -2170,6 +2193,7 @@ $1',
 'unblocked-id' => '$1 тыйылыу къоратылгъанды',
 'ipblocklist' => 'Блок этилиннген IP-адресле эм къошулуучуланы атлары',
 'ipblocklist-legend' => 'Тыйылгъан къошулуучуну аты',
+'blocklist-expiry' => 'Бошалыу датасы',
 'blocklist-reason' => 'Чурум',
 'ipblocklist-submit' => 'Таб',
 'ipblocklist-localblock' => 'Локал блокга салыу',
@@ -2451,8 +2475,8 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'tooltip-pt-mytalk' => 'Сизни сюзюу бетигиз',
 'tooltip-pt-anontalk' => 'Бу IP-адресден этилген тюрлендириулени сюзюу бет',
 'tooltip-pt-preferences' => 'Джарашдырыуларыгъыз',
-'tooltip-pt-watchlist' => 'Ð\9cен ÐºÑ\91зÑ\8eмде тутхан бетлени тизмеси',
-'tooltip-pt-mycontris' => 'Сизни Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83леÑ\80игизни Ñ\81пиÑ\81огÑ\83',
+'tooltip-pt-watchlist' => 'Сиз ÐºÑ\91зÑ\8eгÑ\8eзде тутхан бетлени тизмеси',
+'tooltip-pt-mycontris' => 'Сизни Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83леÑ\80игизни Ñ\82измеÑ\81и',
 'tooltip-pt-login' => 'Былайда системада регистрация этерге боллукъду, алай а ол ажымсыз керекли тюйюлдю',
 'tooltip-pt-anonlogin' => 'Былайда сисетмагъа регистрация этерге боллукъду, алай а бу зорунлу тюлдю.',
 'tooltip-pt-logout' => 'Чыгъыу',
@@ -2505,6 +2529,8 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'tooltip-diff' => 'Тюрлендириулеригизни кёрюгюз',
 'tooltip-compareselectedversions' => 'Бу бетни сайланнган эки версиясыны араларында башхалыкъларын кёр',
 'tooltip-watch' => 'Бу бетни кёзюгюзде тургъан тизмеге къош',
+'tooltip-watchlistedit-normal-submit' => 'Белгиленнген атланы кетер',
+'tooltip-watchlistedit-raw-submit' => 'Кёзде тургъан тизмени джангырт',
 'tooltip-recreate' => 'Кетерилгенина къарамай бетни ызына къайтар',
 'tooltip-upload' => 'Джюклеуню башла',
 'tooltip-rollback' => 'Бир басхан бла ахыр къошулуучуну тюрлендиргенин кетер',
@@ -2535,6 +2561,17 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'spam_reverting' => '$1 бла джибериую болмагъан ахыр версиягъа къайтылады',
 'spam_blanking' => 'Бютеу версияла $1 бетге джибериу тутадыла, ариуланадыла',
 
+# Info page
+'pageinfo-title' => '«$1» бетни юсюнден информация',
+'pageinfo-header-edits' => 'Тюрлендириуле',
+'pageinfo-header-watchlist' => 'Кёзде тургъан тизме',
+'pageinfo-header-views' => 'Къараула',
+'pageinfo-subjectpage' => 'Бет',
+'pageinfo-talkpage' => 'Сюзюу бет',
+'pageinfo-watchers' => 'Кёргенлени саны',
+'pageinfo-edits' => 'Тюрлендириулени саны',
+'pageinfo-authors' => 'Авторланы саны',
+
 # Skin names
 'skinname-standard' => 'Стандарт',
 'skinname-nostalgia' => 'Ностальгия',
@@ -2589,6 +2626,8 @@ $1',
 'file-nohires' => 'Мындан ары ачыкъланнган версиясы джокъду',
 'svg-long-desc' => '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|фрейм|фрейм}}',
 'file-info-png-looped' => 'тогъайланнганды',
@@ -2607,6 +2646,13 @@ $1',
 'bydate' => 'Хронологиягъа кёре',
 'sp-newimages-showfrom' => '$1, $2 замандан башлаб джангы файлланы кёргюз',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds' => '{{PLURAL:$1|$1 секунд|$1 секунд}}',
+'minutes' => '{{PLURAL:$1|$1 минут|$1 минут}}',
+'hours' => '{{PLURAL:$1|$1 сагъат|$1 сагъат}}',
+'days' => '{{PLURAL:$1|$1 кюн|$1 кюн}}',
+'ago' => '$1 алгъа',
+
 # Bad image list
 'bad_image_list' => 'Формат былай болургъа керекди:
 
@@ -2619,7 +2665,7 @@ $1',
 'metadata-help' => 'Файл, кёбюсюне цифралы камерала бла, неда сканерле бла къошулгъан, къошакъ билгилени тутаргъа болады. Файл къуралгъанындан сора тюрлендирилген эсе, бир-бир параметрлери бусагъатдагъы суратына келишмезге болур.',
 'metadata-expand' => 'Дагъыда билгиле кёргюз',
 'metadata-collapse' => 'Къошакъ билгилени джашыр',
-'metadata-fields' => 'Ð\91Ñ\83 Ñ\81пиÑ\81окда ÐºÐµÐ»Ñ\82иÑ\80илинген Ð¼ÐµÑ\82аданнÑ\8bйлени Ñ\82изгинлеÑ\80и, Ñ\81Ñ\83Ñ\80аÑ\82нÑ\8b Ð±ÐµÑ\82инде Ñ\82Ñ\8bнгÑ\8bлаÑ\83 Ð±Ð»Ð° ÐºÑ\91Ñ\80гÑ\8eзÑ\82Ñ\8eлÑ\8eнлÑ\8eкдÑ\8eле, ÐºÑ\8aалгÑ\8aанла джашырылыныб боллукъдула.
+'metadata-fields' => 'Ð\91Ñ\83 Ñ\82измеде ÐºÐµÐ»Ñ\82иÑ\80илген Ñ\81Ñ\83Ñ\80аÑ\82 Ð¼ÐµÑ\82абилгилеи Ñ\82изгинлеÑ\80и, Ñ\81Ñ\83Ñ\80аÑ\82нÑ\8b Ð±ÐµÑ\82инде ÐºÑ\91Ñ\80гÑ\8eзÑ\8eллÑ\8eкдÑ\8eле, ÐºÑ\8aалгÑ\8aанла Ñ\82Ñ\8bнгÑ\8bлаÑ\83 Ð±ла джашырылыныб боллукъдула.
 * make
 * model
 * datetimeoriginal
@@ -2748,24 +2794,56 @@ $1',
 'exif-gpsareainformation' => 'GPS тёгерекни аты',
 'exif-gpsdatestamp' => 'GPS заман',
 'exif-gpsdifferential' => 'GPS дифференциялы тюзетиу',
+'exif-jpegfilecomment' => 'JPEG-файлны белгиси',
+'exif-keywords' => 'Ачхыч сёзле',
+'exif-countrydest' => 'Суратланнган кърал',
+'exif-provinceorstatedest' => 'Суратланнган провинция, территория неда штат',
+'exif-citydest' => 'Суратланнган шахар',
+'exif-objectname' => 'Къысха аты',
+'exif-specialinstructions' => 'Энчи ангылатыула',
 'exif-headline' => 'Башлыкъ',
+'exif-credit' => 'Суратны берген',
+'exif-source' => 'Къайнакъ',
+'exif-editstatus' => 'Суратны редакцион статусу',
 'exif-urgency' => 'Бу сагъатха магъаналылыгъы',
+'exif-fixtureidentifier' => 'Колонканы аты',
+'exif-locationdest' => 'Суратланнган джер',
+'exif-objectcycle' => 'Бу сурат ючюн сутканы кёзюую',
+'exif-contact' => 'Контактлы информация',
 'exif-writer' => 'Текстни автору',
 'exif-languagecode' => 'Тил',
 'exif-iimversion' => 'IIM версиясы',
 'exif-iimcategory' => 'Категория',
+'exif-iimsupplementalcategory' => 'Къошакъ категорияла',
 'exif-datetimeexpires' => 'Бу датадан сора хайырланмагъыз:',
 'exif-datetimereleased' => 'Чыкъгъан датасы:',
 'exif-identifier' => 'Идентификатор',
 'exif-lens' => 'Хайырланнган объектив',
+'exif-serialnumber' => 'Камераны сериялы номери',
 'exif-cameraownername' => 'Камераны иеси',
 'exif-label' => 'Белги',
+'exif-datetimemetadata' => 'Метабилгилени ахыр тюрлениулерини датасы',
+'exif-nickname' => 'Суратны, формализмли болмагъан аты',
 'exif-rating' => 'Багъа (5-ден)',
+'exif-rightscertificate' => 'Хакъланы джюрютюу сертификат',
+'exif-copyrighted' => 'Автор хакъланы статусу:',
+'exif-copyrightowner' => 'Автор хакъланы иеси',
+'exif-usageterms' => 'Хайырланыуну шартлары',
+'exif-pngfilecomment' => 'PNG-файлны белгиси',
 'exif-disclaimer' => 'Джууаблылыкъны унамау',
+'exif-contentwarning' => 'Ичиндегисини юсюнден эсгертиу',
+'exif-giffilecomment' => 'GIF-файлны белгиси',
 'exif-intellectualgenre' => 'Объектни типи',
+'exif-subjectnewscode' => 'Теманы коду',
+'exif-scenecode' => 'IPTC сахнаны коду',
+'exif-event' => 'Суратланнган болуу',
+'exif-organisationinimage' => 'Суратланнган организация',
+'exif-personinimage' => 'Суратланнган адам',
 
 # EXIF attributes
 'exif-compression-1' => 'Къысдырылмагъан',
+'exif-compression-3' => 'CCITT Group 3, факс кодлау',
+'exif-compression-4' => 'CCITT Group 4, факс кодлау',
 
 'exif-copyrighted-true' => 'Автор хакъла бла джакъланыбды',
 'exif-copyrighted-false' => 'Джамагъат мюлк',
@@ -2905,6 +2983,10 @@ $1',
 'exif-gpslongitude-e' => 'Кюнчыгъыш узунлукъ',
 'exif-gpslongitude-w' => 'Кюнбатыш узунлукъ',
 
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|метрге|метрге}} тенгизден мийик',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|метрге|метрге}} тенгизден алаша',
+
 'exif-gpsstatus-a' => 'Ёлчелеу бошалмагъанды',
 'exif-gpsstatus-v' => 'Ёлчелеу бошалгъанды',
 
@@ -2940,12 +3022,30 @@ $1',
 
 'exif-dc-contributor' => 'Автор нёгерле',
 'exif-dc-coverage' => 'Медианы кенгликле чеклери бла заман чеклери',
+'exif-dc-date' => 'Дата(ла)',
+'exif-dc-publisher' => 'Басмагъа чыгъаргъан',
+'exif-dc-relation' => 'Байламлы медиа',
+'exif-dc-rights' => 'Хакъла',
+'exif-dc-source' => 'Къайнакъ медиа',
+'exif-dc-type' => 'Медианы типи',
 
+'exif-rating-rejected' => 'Къабыл этилмеди',
+
+'exif-isospeedratings-overflow' => '65535-ден уллуду',
+
+'exif-iimcategory-ace' => 'Санат, культура эм кёз ачыу',
+'exif-iimcategory-clj' => 'Аманлыкъчылыкъ эм закон',
+'exif-iimcategory-dis' => 'Катастрофала эм аварияла',
+'exif-iimcategory-fin' => 'Экономика эм бизнес',
 'exif-iimcategory-edu' => 'Окъуу',
+'exif-iimcategory-evn' => 'Тёгерекдеги табийгъат',
 'exif-iimcategory-hth' => 'Саулукъ',
+'exif-iimcategory-hum' => 'Интересли хапарла',
 'exif-iimcategory-lab' => 'Урунуу',
+'exif-iimcategory-lif' => 'Джашау хал эм бош заман',
 'exif-iimcategory-pol' => 'Политика',
 'exif-iimcategory-rel' => 'Дин бла ийнам',
+'exif-iimcategory-sci' => 'Илму эм техника',
 'exif-iimcategory-soi' => 'Социал соруула',
 'exif-iimcategory-spo' => 'Спорт',
 'exif-iimcategory-war' => 'Къазауатла, конфликтле эмда къозгъалыула',
@@ -3035,6 +3135,10 @@ $5
 'confirm-purge-top' => 'Бу бетни кеши кетерилсинми?',
 'confirm-purge-bottom' => 'Бетни кеши кетерилгенден сора, андан сора келген версиясы кёргюзюллюкдю.',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'ОК',
+'confirm-unwatch-button' => 'ОК',
+
 # Separators for various lists, etc.
 'semicolon-separator' => ';&#32;',
 'percent' => '$1%',
@@ -3192,6 +3296,7 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'version-software' => 'Салыннган программа баджарыу',
 'version-software-product' => 'Продукт',
 'version-software-version' => 'Версия',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Файлгъа джол',
@@ -3292,30 +3397,42 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'sqlite-no-fts' => '$1 толу текст излеуню хайырландыра билмеген',
 
 # New logging system
+'revdelete-content-hid' => 'ичиндегиси джашырылыбды',
 'revdelete-summary-hid' => 'тюрлендириуню ачыкълауу джашырылыбды',
+'revdelete-uname-hid' => 'къошулуучуну аты джашырылыбды',
+'revdelete-content-unhid' => 'ичиндегиси кёргюзюлдю',
 'revdelete-uname-unhid' => 'къошулуучуну аты ачылды',
 'revdelete-restricted' => 'администраторла ючюн этилген чеклениуле',
 'revdelete-unrestricted' => 'администратолра ючюн этилген чеклениуле къоратылгъандыла',
+'logentry-move-move' => '$1, $3 бетни атын $4 деб тюрлендирди',
 'logentry-patrol-patrol-auto' => '$1, $3 бетни $4 версиясын автомат халда тинтиб чыкъды',
 'newuserlog-byemail' => 'пароль электрон почта бла джиберилгенди',
 
 # Feedback
 'feedback-subject' => 'Тема:',
 'feedback-message' => 'Билдириу:',
+'feedback-cancel' => 'Ызына алыу',
 'feedback-submit' => 'Оюмунгу джибер',
+'feedback-error2' => 'Халат. Тюзетиу ётмеди',
+'feedback-close' => 'Тындырылды',
 
 # API errors
 'api-error-badtoken' => 'Ич халат: терс токен.',
+'api-error-duplicate-popup-title' => ' {{PLURAL:$1|Файлны|Файлны}} дубликаты',
 'api-error-empty-file' => 'Сиз ийген файлны ичи бошду.',
 'api-error-emptypage' => 'Ичи бош болгъан джангы бетле къураргъа болмайды.',
 'api-error-file-too-large' => 'Сиз ийген файл асыры уллуду.',
 'api-error-filename-tooshort' => 'Файлны аты асыры къысхады.',
 'api-error-filetype-banned' => 'Быллай типли файлла джасакъланыбдыла.',
+'api-error-filetype-missing' => 'Файлны кенгериую джокъду.',
 'api-error-hookaborted' => 'Сиз теджеген тюрлендириуню кенгертиуню сюзюучю джасакълагъанды.',
 'api-error-illegal-filename' => 'Джарамагъан файл ат.',
 'api-error-invalid-file-key' => 'Ич халат: болджаллы асыраучу джерде файл  табылмады.',
 'api-error-mustbeposted' => 'Ич халат: соруу, HTTP POST инструкцияны излейди.',
+'api-error-ok-but-empty' => 'Ич халат: сервер джууаб бермейди.',
+'api-error-unclassified' => 'Белгили болмагъан халат чыкъды',
 'api-error-unknown-code' => 'Билинмеген халат: «$1».',
+'api-error-unknown-error' => 'Ич халат: файлны джюклерге излеген сагъатда не эсе да терс болду.',
 'api-error-unknown-warning' => 'Билинмеген билдириу: $1',
 'api-error-unknownerror' => 'Билинмеген халат: «$1».',
 'api-error-uploaddisabled' => 'Бу викиде файлла джюклеу амал джукъланыбды',
index 37ebf37..64ea2d5 100644 (file)
@@ -1262,7 +1262,6 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 
 # Diffs
 'history-title' => 'Liss met Versione vun „$1“',
-'difference' => '(Ungerscheid zwesche de Versione)',
 'difference-multipage' => '(Ongerscheide zwesche Sigge)',
 'lineno' => 'Reih $1:',
 'compareselectedversions' => 'Dun de markeete Version verjliche',
index abc6288..dc78c8d 100644 (file)
@@ -107,7 +107,7 @@ $messages = array(
 'tog-previewonfirst' => 'Li cem guherandinê hertim yekemîn pêşdîtinê nîşan bide',
 'tog-nocache' => 'Vegirtina rûpelan bisekinîne',
 'tog-enotifwatchlistpages' => 'Heke rûpeleke ez dişopînim hate guhertin ji min re E-nameyekê bişîne',
-'tog-enotifusertalkpages' => 'Dema rûpela min a Guftûgoyê hate guhertin e-nameyekê ji min re bişîne',
+'tog-enotifusertalkpages' => 'Dema rûpela min a Gotûbêjê hate guhertin e-nameyekê ji min re bişîne',
 'tog-enotifminoredits' => 'Ji bo guhertinên biçûk jî E-nameyekê ji min re bişîne',
 'tog-enotifrevealaddr' => 'Navnîşana e-nameya min di agahdariyên e-nameyan de nîşan bide',
 'tog-shownumberswatching' => 'Nîşan bide, çiqas bikarhêner dişopînin',
@@ -212,7 +212,7 @@ $messages = array(
 'moredotdotdot' => 'Bêhtir...',
 'mypage' => 'Rûpela min',
 'mytalk' => 'Rûpela gotûbêja min',
-'anontalk' => 'Guftûgo ji bo vê IPê',
+'anontalk' => "Gotûbêj ji bo vê IP'ê",
 'navigation' => 'Navîgasyon',
 'and' => '&#32;û',
 
@@ -271,13 +271,13 @@ $messages = array(
 'unprotect' => 'Parastinê rake',
 'unprotectthispage' => 'Parastina vê rûpelê rake',
 'newpage' => 'Rûpela nû',
-'talkpage' => 'Vê rûpelê guftûgo bike',
+'talkpage' => 'Vê rûpelê gotûbêj bike',
 'talkpagelinktext' => 'Nîqaş',
 'specialpage' => 'Rûpela taybet',
 'personaltools' => 'Amûrên kesane',
 'postcomment' => 'Beşeke nû',
 'articlepage' => 'Li rûpela naverokê binêre',
-'talk' => 'Guftûgo',
+'talk' => 'Gotûbêj',
 'views' => 'Dîtin',
 'toolbox' => 'Qutiya amûran',
 'userpage' => 'Li rûpela vê/vî bikarhênerê/î binêre',
@@ -287,7 +287,7 @@ $messages = array(
 'templatepage' => 'Rûpela şablonê bibîne',
 'viewhelppage' => 'Rûpela alîkariyê bibîne',
 'categorypage' => 'Li rûpela kategoriyê binêre',
-'viewtalkpage' => 'Li guftûgoyê binêre',
+'viewtalkpage' => 'Li gotûbêjê binêre',
 'otherlanguages' => 'Zimanên din',
 'redirectedfrom' => '(ji $1 hate beralîkirin)',
 'redirectpagesub' => 'Rûpelê beralî bike',
@@ -624,7 +624,7 @@ Zanibe ku tu nikarî e-nameya bişînî heta tu di [[Special:Preferences|tercih
 'newarticletext' => "Ev rûpel hîn tune. Eger tu bixwazî vê rûpelê çêkî, dest bi nivîsandinê bike û piştre qeyd bike. '''Wêrek be''', biceribîne!<br />
 Ji bo alîkariyê binêre: [[{{MediaWiki:Helppage}}|Alîkarî]].<br />
 Heke tu bi şaşîtî hatî, bizîvire rûpela berê.",
-'anontalkpagetext' => "----''Ev rûpela guftûgo ye ji bo bikarhênerên nediyarkirî ku hîn hesabekî xwe çênekirine an jî bikarnaînin. Ji ber vê yekê divê em wan bi navnîşana IP ya hejmarî nîşan bikin. Navnîşaneke IP dikare ji aliyê gelek kesan ve were bikaranîn. Heger tu bikarhênerekî nediyarkirî bî û bawerdikî ku nirxandinên bê peywend di der barê te de hatine kirin ji kerema xwe re [[Special:UserLogin|hesabekî xwe veke an jî têkeve]] da ku tu xwe ji tevlîheviyên bi bikarhênerên din re biparêzî.''",
+'anontalkpagetext' => "----''Ev rûpela gotûbêjê ye ji bo bikarhênerên nediyarkirî ku hîn hesabekî xwe çênekirine an jî bikarnaînin. Ji ber vê yekê divê em wan bi navnîşana IP ya hejmarî nîşan bikin. Navnîşaneke IP dikare ji aliyê gelek kesan ve were bikaranîn. Heger tu bikarhênerekî nediyarkirî bî û bawerdikî ku nirxandinên bê peywend di der barê te de hatine kirin ji kerema xwe re [[Special:UserLogin|hesabekî xwe veke an jî têkeve]] da ku tu xwe ji tevlîheviyên bi bikarhênerên din re biparêzî.''",
 'noarticletext' => 'Ev rûpel niha vala ye, tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] an [{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].',
 'noarticletext-nopermission' => 'Ev rûpel niha vala ye, tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] an [{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].
 Ev rûpel niha vala ye, tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] an [{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].',
@@ -686,7 +686,7 @@ Ew berê heye.',
 # "Undo" feature
 'undo-success' => 'Ev guherandina kane were şondakirin. Xêra xwe ferqê piştî tomarkirinê bibîne û seke, ku tu ew versîyona dixwazê û tomarbike. Eger te şaşbûnekî kir, xêra xwe derkeve.',
 'undo-failure' => 'Ev guherandina nikane were şondakirin ji ber ku guherandinên piştî wê.',
-'undo-summary' => 'Guhertoya $1 ya [[Special:Contributions/$2|$2]] ([[User talk:$2|guftûgo]]) şûnde kir',
+'undo-summary' => 'Guhertoya $1 ya [[Special:Contributions/$2|$2]] ([[User talk:$2|gotûbêj]]) şûnde kir',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Hesab nikarîbû were çêkirin',
@@ -768,7 +768,6 @@ Sedema qedexekirina $3 ev e: ''$2''",
 
 # Diffs
 'history-title' => 'Dîroka versyonên "$1"',
-'difference' => '(Ciyawaziya nav guhertoyan)',
 'difference-multipage' => '(Cudahî di navbera rûpelan de)',
 'lineno' => 'Rêz $1:',
 'compareselectedversions' => 'Guhertoyan bide ber hev',
@@ -984,7 +983,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'action-read' => 'Vê rûpelê bixwîne',
 'action-edit' => 'vê rûpelê biguherîne',
 'action-createpage' => 'rûpelan çêke',
-'action-createtalk' => 'rûpelên guftûgoyan çêke',
+'action-createtalk' => 'rûpelên gotûbêjan çêke',
 'action-createaccount' => "vê account'ê bikarhênerê çêke",
 'action-minoredit' => 'vê weke guhertineke biçûk nîşan bide',
 'action-move' => 'vê rûpelê bigerîne',
@@ -1362,7 +1361,7 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'watchnologintext' => 'Ji bo xeyrandinê lîsteya te ya şopandinê tu gireke xwe [[Special:UserLogin|qedy kiribe]].',
 'addwatch' => 'Tevlî lîsteya şopandinê bike',
 'addedwatchtext' => "Rûpela \"<nowiki>\$1</nowiki>\" çû ser [[Special:Watchlist|lîsteya te ya şopandinê]].
-Li dahatû de her guhartoyek li wê rûpelê û rûpela guftûgo ya wê were kirin li vir dêt nîşan dan,
+Li dahatû de her guhartoyek li wê rûpelê û rûpela gotûbêjê wê were kirin li vir dêt nîşan dan,
 
 Li rûpela [[Special:RecentChanges|Guherandinên dawî]] jî ji bo hasan dîtina wê, ew rûpel bi '''Nivîsa estûr''' dê nîşan dayîn.
 
@@ -1376,7 +1375,7 @@ Li rûpela [[Special:RecentChanges|Guherandinên dawî]] jî ji bo hasan dîtina
 'unwatchthispage' => 'Êdî neşopîne',
 'notanarticle' => 'Ne gotar e',
 'watchnochange' => 'Ne rûpelek, yê tu dişopînê, hate xeyrandin di vê wextê da, yê tu dixazê bibînê.',
-'watchlist-details' => '* {{PLURAL:$1|Rûpelek tê|$1 rûpel tên}} şopandin, rûpelên guftûgoyê netên jimartin.',
+'watchlist-details' => '* {{PLURAL:$1|Rûpelek tê|$1 rûpel tên}} şopandin, rûpelên gotûbêjê nayên jimartin.',
 'wlheader-enotif' => '* Agahdariya E-nameyê pêk tê.',
 'wlheader-showupdated' => "* Ew rûpel yê hatin xeyrandin jilkî te li wan sekir di '''nivîsa estûr''' tên pêşandin.",
 'watchlistcontains' => 'Di lîsteya şopandina te de {{PLURAL:$1|rûpelek heye|$1 rûpel hene}}.',
@@ -1452,9 +1451,9 @@ Naverroka berî betalkirinê ev bû:'$1'",
 'rollbacklink' => 'bizivirîne pêş',
 'cantrollback' => "Guharto naye vegerandin; bikarhêrê dawî, '''tenya''' nivîskarê wê rûpelê ye.",
 'alreadyrolled' => 'Guherandina dawiya [[$1]]
-bi [[User:$2|$2]] ([[User talk:$2|guftûgo]]) venizivre; keseke din wê rûpelê zivrandiye an guherandiye.
+bi [[User:$2|$2]] ([[User talk:$2|gotûbêj]]) venizivre; keseke din wê rûpelê zivrandiye an guherandiye.
 
-Guhartoya dawî bi [[User:$3|$3]] ([[User talk:$3|guftûgo]]).',
+Guhartoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).',
 'editcomment' => "Kurtenivîsê guherandinê ev bû: \"''\$1''\".",
 'revertpage' => 'Guherandina $2 hat betal kirin, vegerand guhartoya dawî ya $1',
 'rollback-success' => 'Guherandina $1 şondakir; dîsa guharte verzyona $2.',
@@ -1602,7 +1601,7 @@ Sedemekê binivîse!',
 'ipbotheroption' => 'yên din',
 'ipbotherreason' => 'Sedemekî din',
 'ipbhidename' => 'Navê bikarhêner / adresê IP ji "pirtûkê" astengkirinê, lîsteya astengkirinên nuh û lîsteya bikarhêneran veşêre',
-'ipbwatchuser' => 'Rûpelên bikarhêner û guftûgoyê bişopîne',
+'ipbwatchuser' => 'Rûpelên bikarhêner û gotûbêjê bişopîne',
 'ipb-confirm' => 'Astengkirinê piştrast bike',
 'badipaddress' => 'Bikarhêner bi vî navî tune',
 'blockipsuccesssub' => 'Astengkirin serkeftî bû',
@@ -1636,7 +1635,7 @@ Sedemekê binivîse!',
 'noautoblockblock' => 'astengkirina otomatîk hatîye temirandin',
 'createaccountblock' => 'çêkirina hesaban hate qedexekirin',
 'emailblock' => 'E-Mail hate girtin',
-'blocklist-nousertalk' => 'nikarê rûpela gûftugoya xwe biguherînê',
+'blocklist-nousertalk' => 'nikare rûpela gotûbêja xwe biguherîne',
 'ipblocklist-empty' => 'Lîsteya astengkirinê vala ye.',
 'ipblocklist-no-results' => "Ew IP'ya ya bikarhênera nehatîye astengkirin.",
 'blocklink' => 'asteng bike',
@@ -1653,7 +1652,7 @@ Sedemekê binivîse!',
 'block-log-flags-nocreate' => 'çêkirina hesaban hate qedexekirin',
 'block-log-flags-noautoblock' => 'astengkirina otomatik tune',
 'block-log-flags-noemail' => 'Şandina e-nameyan hatîye qedexekirin',
-'block-log-flags-nousertalk' => 'nikare guftûgoyê xwe biguherîne',
+'block-log-flags-nousertalk' => 'nikare gotûbêja xwe biguherîne',
 'block-log-flags-hiddenname' => 'navê bikarhêneriyê yê veşartî',
 'ipb_expiry_invalid' => 'Dem ne serrast e.',
 'ipb_already_blocked' => '"$1" berê hatîye astengkirin',
@@ -1702,7 +1701,7 @@ da bikarî navê wê rûpelê biguherînî.',
 'articleexists' => 'Rûpela bi vî navî heye, an navê ku te hilbijart derbas nabe. Navekî din hilbijêre.',
 'cantmove-titleprotected' => 'Tu nikanê vê rûpelê bervê vê cihê bigerînê ji ber ku sernava nuh tê parastin ji bo çêkirinê',
 'movedto' => 'bû',
-'movetalk' => "Rûpela '''guftûgo''' ya wê jî bigerîne, eger gengaz be.",
+'movetalk' => "Rûpela '''gotûbêj'''a wê jî bigerîne, eger gengaz be.",
 'movepage-page-exists' => 'Rûpela $1 berê heye û ew nikane otomatîk were jêbirin.',
 'movepage-page-moved' => 'Rûpela $1 çû cihê $2.',
 'movepage-page-unmoved' => 'Rûpela $1 nikanî çûba ciha $2.',
@@ -1759,12 +1758,12 @@ Rûpela "[[:$1]]" berê heye. Tu rast dixazê wê jêbibê ji bo navguherandinê
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Rûpela min',
 'tooltip-pt-anonuserpage' => 'The user page for the ip you',
-'tooltip-pt-mytalk' => 'Rûpela guftûgo ya min',
+'tooltip-pt-mytalk' => 'Rûpela min a gotûbêjê',
 'tooltip-pt-preferences' => 'Tercîhên min',
 'tooltip-pt-watchlist' => 'The list of pages you',
 'tooltip-pt-mycontris' => 'Lîsteya beşdariyên min',
 'tooltip-pt-logout' => 'Derkeve (Log out)',
-'tooltip-ca-talk' => 'Guftûgo li ser rûpela naverokê',
+'tooltip-ca-talk' => 'Gotûbêj li ser rûpela naverokê',
 'tooltip-ca-edit' => 'Vê rûpelê biguherîne! Berê qeydkirinê bişkoka "Pêşdîtin',
 'tooltip-ca-addsection' => 'Beşekê zêde bike.',
 'tooltip-ca-viewsource' => 'Ev rûpela tê parastin. Tu dikarê bes li çavkanîyê sekê.',
@@ -2025,7 +2024,7 @@ Xêra xwe zanibe ku tu bi rastî dixwazê vê rûpelê dîsa çêkê",
 'lag-warn-high' => 'Ji bo westinê sistêmê ew xeyrandin, yê piştî $1 sanîyan hatine çêkirin netên wêşendan.',
 
 # Watchlist editor
-'watchlistedit-numitems' => 'Di lîsteya te ya şopandinê de {{PLURAL:$1|gotarek heye.|$1 gotar hene.}} (ji xeynî rûpela guftûgoyan).',
+'watchlistedit-numitems' => 'Di lîsteya te ya şopandinê de {{PLURAL:$1|gotarek heye.|$1 gotar hene.}} (ji xeynî rûpela gotûbêjan).',
 'watchlistedit-noitems' => 'Di lîsteya te ya şopandinê  de gotar tune ne.',
 'watchlistedit-normal-title' => 'Lîsteya xwe ya şopandinê biguherîne',
 'watchlistedit-normal-legend' => 'Gotaran ji lîsteya min ya şopandinê rake',
index 61c8513..65d0914 100644 (file)
@@ -491,7 +491,6 @@ Alhwedh: '''({{int:cur}})''' = dyffrans gans an amendyans diwettha, '''({{int:la
 
 # Diffs
 'history-title' => 'Istori an folen "$1"',
-'difference' => '(Dyffrans ynter an amendyansow)',
 'difference-multipage' => '(Dyffrans ynter an folednow)',
 'lineno' => 'Linen $1:',
 'compareselectedversions' => 'Keheveli an amendyansow dowisyes',
index 6469ad8..e69d5e7 100644 (file)
@@ -399,7 +399,6 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 
 # Diffs
 'history-title' => '"$1" барактын тарыхына сереп',
-'difference' => '(Оңдоолордун айырмасы)',
 'lineno' => '$1 -сап:',
 'compareselectedversions' => 'Тандалган версияларды салыштыр',
 'editundo' => 'жокко чыгар',
index 0624ce1..cf8af41 100644 (file)
@@ -803,7 +803,6 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 
 # Diffs
 'history-title' => 'Historia paginae "$1"',
-'difference' => '(Dissimilitudo inter emendationes)',
 'lineno' => 'Linea $1:',
 'compareselectedversions' => 'Conferre emendationes selectas',
 'showhideselectedversions' => 'Monstrare/celare emendationes selectas',
index fbbd3cb..eacc492 100644 (file)
@@ -633,7 +633,6 @@ Leyenda: (act) = diferencias con la versión actual,
 
 # Diffs
 'history-title' => 'Istoria de revisiones para «$1»',
-'difference' => '(Diferencias entre rêvisiones)',
 'lineno' => 'Shurá $1:',
 'compareselectedversions' => 'Comparar versiones escogidas',
 'editundo' => 'deshaze',
index 7b13bfd..017884c 100644 (file)
@@ -552,6 +552,8 @@ $2',
 'customjsprotected' => "Dir hutt net d'Recht dës JavaScript-Säit z'änneren, well dorop déi perséinlech Astellunge vun engem anere Benotzer gespäichert sinn.",
 'ns-specialprotected' => 'Spezialsäite kënnen net verännert ginn.',
 'titleprotected' => "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
+'invalidtitle-knownnamespace' => 'Net valabelen Titel mam Nummraum "$2" a mam Text "$3"',
+'invalidtitle-unknownnamespace' => 'Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Schlecht Configuratioun: onbekannte  Virescanner: ''$1''",
@@ -1102,7 +1104,8 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 
 # Diffs
 'history-title' => 'Versiounshistorique vun „$1“',
-'difference' => '(Ennerscheed tëscht Versiounen)',
+'difference-title' => 'Ënnerscheed tëschent de Versioune vun "$1"',
+'difference-title-multipage' => 'Ënnerscheed tëschent de Säiten "$1" a(n) "$2"',
 'difference-multipage' => '(Ënnerscheed tëschent Säiten)',
 'lineno' => 'Linn $1:',
 'compareselectedversions' => 'Ausgewielte Versioune vergläichen',
@@ -1652,6 +1655,7 @@ Wann de Problem weider besteet, dann un de [[Special:ListUsers/sysop|Administrat
 'backend-fail-closetemp' => 'Den temporäre Fichier konnt net zougemaach ginn.',
 'backend-fail-read' => 'De Fichier $1 konnt net geliest ginn.',
 'backend-fail-create' => 'De Fichier $1 konnt net ugeluecht ginn.',
+'backend-fail-maxsize' => 'De Fichier $1 konnt net generéiert gi well e méi grouss ass wéi {{PLURAL:$2|ee Byte|$2 Byten}}.',
 'backend-fail-readonly' => 'De Späicher-Backend "$1" kann elo nëmme geliest ginn (read-only). De Grond deen ugi gouf war: "$2"',
 
 # Lock manager
@@ -1984,6 +1988,8 @@ Dir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisit
 'allpages-hide-redirects' => 'Viruleedunge verstoppen',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Dir gesitt eng Versioun aus dem Tëschespäicher (cache) vun dëser Säit, déi bis zu $1 al ka sinn.',
+'cachedspecial-viewing-cached-ts' => 'Dir gesitt eng Versioun vun dëser Säit aus dem Tëschespäicher (cache), déi eventuell net méi aktuell ass.',
 'cachedspecial-refresh-now' => 'Déi rezentst weisen.',
 
 # Special:Categories
@@ -3532,6 +3538,8 @@ Dir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public
 'version-software' => 'Installéiert Software',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versioun',
+'version-entrypoints' => 'URLe vun Agangspunkten',
+'version-entrypoints-header-entrypoint' => 'Agangspunkt',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
index d5b59e3..4f71a7f 100644 (file)
@@ -513,7 +513,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '$1  -  масакIавилерин тарих',
-'difference' => '(Жуьрейрин арада тафаватар)',
 'lineno' => 'ЦIар $1:',
 'compareselectedversions' => 'Хкягъай жуьреяр гекъигун',
 'editundo' => 'Гьич авун',
index 80ed160..c5f20af 100644 (file)
@@ -428,7 +428,6 @@ La arcivo de sutraes per esta paje es asi per conveni:",
 
 # Diffs
 'history-title' => 'Istoria de cambias de "$1"',
-'difference' => '(Difere entre cambias)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Compare varias elejeda',
 'editundo' => 'desfa',
index e72f69f..3eeb620 100644 (file)
@@ -803,7 +803,6 @@ oba ku gano agali ku lupapula luno.<br />
 
 # Diffs
 'history-title' => 'Empandika eza "$1"',
-'difference' => "(Enjawulo mu mpandika ez'olupapula)",
 'lineno' => 'Lunyiriri namba $1:',
 'compareselectedversions' => 'Gerageranya likooda zenonze',
 'editundo' => 'julula enkyukakyuka',
index 17d2c77..38ebaca 100644 (file)
@@ -1083,7 +1083,6 @@ Wees zeker det deze wieziging de gesjiedenisdoorloupendheid van de pagina zal be
 
 # Diffs
 'history-title' => 'Gesjiedenis van "$1"',
-'difference' => '(Versjil tösje bewirkinge)',
 'difference-multipage' => '(Versjil tösje paazjes)',
 'lineno' => 'Tekslien $1:',
 'compareselectedversions' => 'Vergeliek geselecteerde versies',
@@ -2865,7 +2864,7 @@ $1",
 
 # Media information
 'mediawarning' => "'''Waorsjuwing''': Dit bestandj kin 'n anger kood höbbe, door 't te doorveure in dien systeem kin 't gecompromeerde dinger oplevere.",
-'imagemaxsize' => "Meximale aafbeildjingsaafmaeting:<b r/>''(veur besjrievingspaasj)''",
+'imagemaxsize' => "Meximale aafbeildjingsaafmaeting:<br/>''(veur besjrievingspaasj)''",
 'thumbsize' => 'Gruutde vanne thumbnail:',
 'widthheightpage' => "$1 × $2, $3 {{PLURAL:$3|pazjena|pazjena's}}",
 'file-info' => 'bestandsgruutde: $1, MIME-type: $2',
index 5bd9c85..48376fb 100644 (file)
@@ -584,7 +584,6 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 
 # Diffs
 'history-title' => 'Stöia de revixoìn de "$1"',
-'difference' => '(Differense fra e revixoîn)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Confronta e verscioîn selessionæ',
 'editundo' => 'Anùlla',
index ec1607a..c2c9750 100644 (file)
@@ -307,7 +307,6 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 
 # Diffs
 'history-title' => 'Līed "$1" mõitõkst istōrij',
-'difference' => '(Vaiţīd redaktsijõd vail)',
 'lineno' => 'Rīnda $1:',
 'compareselectedversions' => 'Līdzinţ vēļdõt redaktsijḑi',
 'editundo' => 'kištānt jarā',
index 6fc01f0..1ccd9ce 100644 (file)
@@ -592,7 +592,6 @@ Per infurmazion, varda ind el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGE
 
 # Diffs
 'history-title' => 'Cronolugia di mudifegh de "$1"',
-'difference' => '(Diferenz intra i revisión)',
 'lineno' => 'Riga $1:',
 'compareselectedversions' => 'Compara i versión seleziunaa',
 'editundo' => "turna a 'me che l'era",
@@ -1366,7 +1365,7 @@ Te riçevaree un mesacc cun deent un ligamm specjal; ti duvaree clicaa sül liga
 'watchlisttools-raw' => 'Mudifega la lista in furmaa test',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciciaràde]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciciarade]])',
 
 # Special:Version
 'version' => 'Versiun',
index 14fcf89..9597ca9 100644 (file)
@@ -21,292 +21,292 @@ $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
 $messages = array(
 # User preference toggles
-'tog-underline'        => 'Kotíya sulimá na bikangisi:',
-'tog-showtoolbar'      => 'Komɔ́nisa ndámbo-ndámbo (esengélí JavaScript)',
+'tog-underline' => 'Kotíya sulimá na bikangisi:',
+'tog-showtoolbar' => 'Komɔ́nisa ndámbo-ndámbo (esengélí JavaScript)',
 'tog-rememberpassword' => 'Komíkundola bokitoli na molúki (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)',
 
 # Dates
-'sunday'        => 'Lomíngo',
-'monday'        => 'mokɔlɔ ya libosó',
-'tuesday'       => 'mokɔlɔ ya míbalé',
-'wednesday'     => 'mokɔlɔ ya mísáto',
-'thursday'      => 'mokɔlɔ ya mínei',
-'friday'        => 'mokɔlɔ ya mítáno',
-'saturday'      => 'Mpɔ́sɔ',
-'sun'           => 'Lom',
-'mon'           => 'Mɔ̌k',
-'tue'           => 'Míb',
-'wed'           => 'Mís',
-'thu'           => 'Mín',
-'fri'           => 'Mít',
-'sat'           => 'Mpɔ́',
-'january'       => 'sánzá ya yambo',
-'february'      => 'sánzá ya míbalé',
-'march'         => 'sánzá ya mísáto',
-'april'         => 'sánzá ya mínei',
-'may_long'      => 'sánzá ya mítáno',
-'june'          => 'sánzá ya motóbá',
-'july'          => 'sánzá ya nsambo',
-'august'        => 'sánzá ya mwambe',
-'september'     => 'sánzá ya libwá',
-'october'       => 'sánzá ya zómi',
-'november'      => 'sánzá ya zómi na mɔ̌kɔ́',
-'december'      => 'sánzá ya zómi na míbalé',
-'january-gen'   => 'sánzá ya yambo',
-'february-gen'  => 'sánzá ya míbalé',
-'march-gen'     => 'sánzá ya mísáto',
-'april-gen'     => 'sánzá ya mínei',
-'may-gen'       => 'sánzá ya mítáno',
-'june-gen'      => 'sánzá ya motóbá',
-'july-gen'      => 'sánzá ya nsambo',
-'august-gen'    => 'sánzá ya mwambe',
+'sunday' => 'Lomíngo',
+'monday' => 'mokɔlɔ ya libosó',
+'tuesday' => 'mokɔlɔ ya míbalé',
+'wednesday' => 'mokɔlɔ ya mísáto',
+'thursday' => 'mokɔlɔ ya mínei',
+'friday' => 'mokɔlɔ ya mítáno',
+'saturday' => 'Mpɔ́sɔ',
+'sun' => 'Lom',
+'mon' => 'Mɔ̌k',
+'tue' => 'Míb',
+'wed' => 'Mís',
+'thu' => 'Mín',
+'fri' => 'Mít',
+'sat' => 'Mpɔ́',
+'january' => 'sánzá ya yambo',
+'february' => 'sánzá ya míbalé',
+'march' => 'sánzá ya mísáto',
+'april' => 'sánzá ya mínei',
+'may_long' => 'sánzá ya mítáno',
+'june' => 'sánzá ya motóbá',
+'july' => 'sánzá ya nsambo',
+'august' => 'sánzá ya mwambe',
+'september' => 'sánzá ya libwá',
+'october' => 'sánzá ya zómi',
+'november' => 'sánzá ya zómi na mɔ̌kɔ́',
+'december' => 'sánzá ya zómi na míbalé',
+'january-gen' => 'sánzá ya yambo',
+'february-gen' => 'sánzá ya míbalé',
+'march-gen' => 'sánzá ya mísáto',
+'april-gen' => 'sánzá ya mínei',
+'may-gen' => 'sánzá ya mítáno',
+'june-gen' => 'sánzá ya motóbá',
+'july-gen' => 'sánzá ya nsambo',
+'august-gen' => 'sánzá ya mwambe',
 'september-gen' => 'sánzá ya libwá',
-'october-gen'   => 'sánzá ya zómi',
-'november-gen'  => 'sánzá ya zómi na mɔ̌kɔ́',
-'december-gen'  => 'sánzá ya zómi na míbalé',
-'jan'           => 's1',
-'feb'           => 's2',
-'mar'           => 's3',
-'apr'           => 's4',
-'may'           => 's4',
-'jun'           => 's5',
-'jul'           => 's7',
-'aug'           => 's8',
-'sep'           => 's9',
-'oct'           => 's10',
-'nov'           => 's11',
-'dec'           => 's12',
+'october-gen' => 'sánzá ya zómi',
+'november-gen' => 'sánzá ya zómi na mɔ̌kɔ́',
+'december-gen' => 'sánzá ya zómi na míbalé',
+'jan' => 's1',
+'feb' => 's2',
+'mar' => 's3',
+'apr' => 's4',
+'may' => 's4',
+'jun' => 's5',
+'jul' => 's7',
+'aug' => 's8',
+'sep' => 's9',
+'oct' => 's10',
+'nov' => 's11',
+'dec' => 's12',
 
 # Categories related messages
-'pagecategories'        => '{{PLURAL:$1|Katégoli|Katégoli}}',
-'category_header'       => 'Nkásá o molɔngɔ́ ya bilɔkɔ ya loléngé mɔ̌kɔ́ « $1 »',
-'subcategories'         => 'Ndéngé-bǎna',
+'pagecategories' => '{{PLURAL:$1|Katégoli|Katégoli}}',
+'category_header' => 'Nkásá o molɔngɔ́ ya bilɔkɔ ya loléngé mɔ̌kɔ́ « $1 »',
+'subcategories' => 'Ndéngé-bǎna',
 'category-media-header' => 'Media in category "$1"',
-'category-empty'        => "''Loléngé loye ezalí na ekakola tɛ̂, loléngé-mwǎna tɛ̂ tǒ nkásá mitímediá tɛ̂.''",
+'category-empty' => "''Loléngé loye ezalí na ekakola tɛ̂, loléngé-mwǎna tɛ̂ tǒ nkásá mitímediá tɛ̂.''",
 
-'about'      => 'elɔ́kɔ elobámí',
-'article'    => 'ekakoli',
-'newwindow'  => '(ekofúngola na lininísa lya sika)',
-'cancel'     => 'Kozóngela',
-'mytalk'     => 'Ntembe na ngáí',
+'about' => 'elɔ́kɔ elobámí',
+'article' => 'ekakoli',
+'newwindow' => '(ekofúngola na lininísa lya sika)',
+'cancel' => 'Kozóngela',
+'mytalk' => 'Ntembe na ngáí',
 'navigation' => 'Botamboli',
-'and'        => '&#32;mpé',
+'and' => '&#32;mpé',
 
 # Cologne Blue skin
-'qbfind'         => 'Koluka',
-'qbbrowse'       => 'Kolúka',
-'qbedit'         => 'Kobɔngisa',
-'qbpageinfo'     => 'Context',
+'qbfind' => 'Koluka',
+'qbbrowse' => 'Kolúka',
+'qbedit' => 'Kobɔngisa',
+'qbpageinfo' => 'Context',
 'qbspecialpages' => 'Nkásá gudi',
-'faq'            => 'Mitúná Mizóngelaka (MM)',
+'faq' => 'Mitúná Mizóngelaka (MM)',
 
 # Vector skin
-'vector-action-addsection'       => 'Kobakisa mpɔ̂',
-'vector-action-delete'           => 'Kolímwisa',
-'vector-action-move'             => 'Kobóngola nkómbó',
-'vector-action-protect'          => 'Kobátela',
-'vector-action-undelete'         => 'Kolímwisa tɛ̂',
-'vector-action-unprotect'        => ' Kobátela tɛ̂',
+'vector-action-addsection' => 'Kobakisa mpɔ̂',
+'vector-action-delete' => 'Kolímwisa',
+'vector-action-move' => 'Kobóngola nkómbó',
+'vector-action-protect' => 'Kobátela',
+'vector-action-undelete' => 'Kolímwisa tɛ̂',
+'vector-action-unprotect' => ' Kobátela tɛ̂',
 'vector-simplesearch-preference' => 'Kolamusa bokáni bwa boluki bobakísámí (káka na Vector)',
-'vector-view-create'             => 'Kokela',
-'vector-view-edit'               => 'Kobɔngisa',
-'vector-view-history'            => 'Komɔ́nisa mokóló',
-'vector-view-view'               => 'Kotánga',
-'vector-view-viewsource'         => 'Komɔ́nisa mosólo',
-'namespaces'                     => 'Ntáká ya nkómbó',
-
-'errorpagetitle'    => 'Mbéba',
-'returnto'          => 'Kozóngisa na $1.',
-'tagline'           => 'Útá {{SITENAME}}.',
-'help'              => 'Bosálisi',
-'search'            => 'Boluki',
-'searchbutton'      => 'Boluki',
-'go'                => 'Kokɛndɛ',
-'searcharticle'     => 'Kokɛndɛ',
-'history'           => 'Mokóló mwa lonkásá',
-'history_short'     => 'Mokóló',
-'printableversion'  => 'Mpɔ̂ na kofínela',
-'permalink'         => 'Ekangeli ya ntángo yɔ́nsɔ',
-'print'             => 'kobimisa nkomá',
-'view'              => 'Komɔ́nisa',
-'edit'              => 'kobɔngisa',
-'create'            => 'Kokela',
-'editthispage'      => 'Kokoma lonkásá óyo',
-'create-this-page'  => 'Kokela lonkásá loye',
-'delete'            => 'Kolímwisa',
-'deletethispage'    => 'Kolímwisa lonkásá loye',
-'protect'           => 'Kobátela',
-'protect_change'    => 'kobóngola',
-'protectthispage'   => 'Kobátela lonkásá loye',
-'unprotect'         => 'Kobátela tɛ̂',
+'vector-view-create' => 'Kokela',
+'vector-view-edit' => 'Kobɔngisa',
+'vector-view-history' => 'Komɔ́nisa mokóló',
+'vector-view-view' => 'Kotánga',
+'vector-view-viewsource' => 'Komɔ́nisa mosólo',
+'namespaces' => 'Ntáká ya nkómbó',
+
+'errorpagetitle' => 'Mbéba',
+'returnto' => 'Kozóngisa na $1.',
+'tagline' => 'Útá {{SITENAME}}.',
+'help' => 'Bosálisi',
+'search' => 'Boluki',
+'searchbutton' => 'Boluki',
+'go' => 'Kokɛndɛ',
+'searcharticle' => 'Kokɛndɛ',
+'history' => 'Mokóló mwa lonkásá',
+'history_short' => 'Mokóló',
+'printableversion' => 'Mpɔ̂ na kofínela',
+'permalink' => 'Ekangeli ya ntángo yɔ́nsɔ',
+'print' => 'kobimisa nkomá',
+'view' => 'Komɔ́nisa',
+'edit' => 'kobɔngisa',
+'create' => 'Kokela',
+'editthispage' => 'Kokoma lonkásá óyo',
+'create-this-page' => 'Kokela lonkásá loye',
+'delete' => 'Kolímwisa',
+'deletethispage' => 'Kolímwisa lonkásá loye',
+'protect' => 'Kobátela',
+'protect_change' => 'kobóngola',
+'protectthispage' => 'Kobátela lonkásá loye',
+'unprotect' => 'Kobátela tɛ̂',
 'unprotectthispage' => 'Kobátela lonkásá loye tɛ̂',
-'newpage'           => 'Lonkásá la sika',
-'talkpage'          => 'Ntembe ya lonkásá loye',
-'talkpagelinktext'  => 'Ntembe',
-'specialpage'       => 'Lonkásá gudi',
-'personaltools'     => 'Bisáleli ya moto-mɛ́i',
-'articlepage'       => 'Komɔ́nisa káti',
-'talk'              => 'Ntembe',
-'views'             => 'Bomɔ́nisi',
-'toolbox'           => 'Bisáleli',
-'userpage'          => 'Komɔ́nisa lonkásá la mosáleli',
-'projectpage'       => 'Komɔ́nisa lonkásá la mwǎngo',
-'imagepage'         => 'Komɔ́nisa lonkásá la kásá',
-'viewhelppage'      => 'Komɔ́nisa lonkásá la bosálisi',
-'categorypage'      => 'Komɔ́nisa lonkásá la katégori',
-'otherlanguages'    => 'Na nkótá isúsu',
-'redirectedfrom'    => '(Eyendísí útá $1)',
-'redirectpagesub'   => 'Lonkásá la boyendisi',
-'lastmodifiedat'    => 'Lonkásá loye lobóngwámí o mokɔlɔ $1, ngonga $2.',
-'protectedpage'     => 'Lonkásá lobátélámí',
-'jumpto'            => 'Kokɛndɛ na:',
-'jumptonavigation'  => 'bolúki',
-'jumptosearch'      => 'boluki',
+'newpage' => 'Lonkásá la sika',
+'talkpage' => 'Ntembe ya lonkásá loye',
+'talkpagelinktext' => 'Ntembe',
+'specialpage' => 'Lonkásá gudi',
+'personaltools' => 'Bisáleli ya moto-mɛ́i',
+'articlepage' => 'Komɔ́nisa káti',
+'talk' => 'Ntembe',
+'views' => 'Bomɔ́nisi',
+'toolbox' => 'Bisáleli',
+'userpage' => 'Komɔ́nisa lonkásá la mosáleli',
+'projectpage' => 'Komɔ́nisa lonkásá la mwǎngo',
+'imagepage' => 'Komɔ́nisa lonkásá la kásá',
+'viewhelppage' => 'Komɔ́nisa lonkásá la bosálisi',
+'categorypage' => 'Komɔ́nisa lonkásá la katégori',
+'otherlanguages' => 'Na nkótá isúsu',
+'redirectedfrom' => '(Eyendísí útá $1)',
+'redirectpagesub' => 'Lonkásá la boyendisi',
+'lastmodifiedat' => 'Lonkásá loye lobóngwámí o mokɔlɔ $1, ngonga $2.',
+'protectedpage' => 'Lonkásá lobátélámí',
+'jumpto' => 'Kokɛndɛ na:',
+'jumptonavigation' => 'bolúki',
+'jumptosearch' => 'boluki',
 
 # 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'            => 'Elɔ́kɔ elobí {{SITENAME}}',
-'aboutpage'            => 'Project:Etalí',
-'copyright'            => 'Maloba ma nkomá mazalí na ndingisa ya $1.',
-'copyrightpage'        => '{{ns:project}}:Mikokisi',
-'currentevents'        => 'Elɔ́kɔ ya sika',
-'disclaimers'          => 'Ndelo ya boyanoli',
-'disclaimerpage'       => 'Project:Boyanoli ndelo',
-'edithelp'             => 'Kobimisela bosálisi',
-'edithelppage'         => 'Help:Libɔngeli',
-'mainpage'             => 'Lonkásá ya libosó',
+'aboutsite' => 'Elɔ́kɔ elobí {{SITENAME}}',
+'aboutpage' => 'Project:Etalí',
+'copyright' => 'Maloba ma nkomá mazalí na ndingisa ya $1.',
+'copyrightpage' => '{{ns:project}}:Mikokisi',
+'currentevents' => 'Elɔ́kɔ ya sika',
+'disclaimers' => 'Ndelo ya boyanoli',
+'disclaimerpage' => 'Project:Boyanoli ndelo',
+'edithelp' => 'Kobimisela bosálisi',
+'edithelppage' => 'Help:Libɔngeli',
+'mainpage' => 'Lonkásá ya libosó',
 'mainpage-description' => 'Lokásá ya libosó',
-'portal'               => 'Bísó na bísó',
-'privacy'              => 'Politíki ya viplívɛ',
-'privacypage'          => 'Project:Politíki ya viplívɛ',
+'portal' => 'Bísó na bísó',
+'privacy' => 'Politíki ya viplívɛ',
+'privacypage' => 'Project:Politíki ya viplívɛ',
 
-'ok'                 => 'Nandimi',
-'retrievedfrom'      => 'Ezwámí úta «$1»',
+'ok' => 'Nandimi',
+'retrievedfrom' => 'Ezwámí úta «$1»',
 'youhavenewmessages' => 'Ozweí $1 ($2).',
-'newmessageslink'    => 'nsango ya sika',
-'editsection'        => 'kobɔngisa',
-'editold'            => 'kobɔngisa',
-'viewsourceold'      => 'Komɔ́nisa mosólo',
-'editlink'           => 'kobɔngisa',
-'viewsourcelink'     => 'komɔ́nisa mosólo',
-'editsectionhint'    => 'Kokoma sɛksíɔ: $1',
-'toc'                => 'Etápe',
-'showtoc'            => 'komɔ́nisa',
-'hidetoc'            => 'kobomba',
-'feedlinks'          => 'Ebale:',
-'site-rss-feed'      => 'Ebale RSS ya $1',
-'site-atom-feed'     => 'Ebale Atom ya «$1»',
-'page-rss-feed'      => 'Ebale RSS ya «$1»',
-'page-atom-feed'     => 'Ebale Atom ya «$1»',
-'red-link-title'     => '$1 (lonkásá  ezalí tɛ̂)',
+'newmessageslink' => 'nsango ya sika',
+'editsection' => 'kobɔngisa',
+'editold' => 'kobɔngisa',
+'viewsourceold' => 'Komɔ́nisa mosólo',
+'editlink' => 'kobɔngisa',
+'viewsourcelink' => 'komɔ́nisa mosólo',
+'editsectionhint' => 'Kokoma sɛksíɔ: $1',
+'toc' => 'Etápe',
+'showtoc' => 'komɔ́nisa',
+'hidetoc' => 'kobomba',
+'feedlinks' => 'Ebale:',
+'site-rss-feed' => 'Ebale RSS ya $1',
+'site-atom-feed' => 'Ebale Atom ya «$1»',
+'page-rss-feed' => 'Ebale RSS ya «$1»',
+'page-atom-feed' => 'Ebale Atom ya «$1»',
+'red-link-title' => '$1 (lonkásá  ezalí tɛ̂)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'lonkásá',
-'nstab-user'      => 'Lonkásá la mosáleli',
-'nstab-media'     => 'Mediá',
-'nstab-special'   => 'Lonkásá gudi',
-'nstab-project'   => 'Etalí',
-'nstab-image'     => 'Kásá',
+'nstab-main' => 'lonkásá',
+'nstab-user' => 'Lonkásá la mosáleli',
+'nstab-media' => 'Mediá',
+'nstab-special' => 'Lonkásá gudi',
+'nstab-project' => 'Etalí',
+'nstab-image' => 'Kásá',
 'nstab-mediawiki' => 'Liyébísí',
-'nstab-template'  => 'Emekisele',
-'nstab-help'      => 'Lonkásá ya lisálisi',
-'nstab-category'  => 'Katégori',
+'nstab-template' => 'Emekisele',
+'nstab-help' => 'Lonkásá ya lisálisi',
+'nstab-category' => 'Katégori',
 
 # Main script and global functions
-'nosuchaction'      => 'Ekelá eyébani tɛ̂',
+'nosuchaction' => 'Ekelá eyébani tɛ̂',
 'nosuchspecialpage' => 'Lonkásá gudi lwangó lozalí tɛ̂',
 'nospecialpagetext' => '<strong>Otúní lonkásá gudi kasi yangó ezalí tɛ̂.</strong>
 
 Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error'              => 'Mbéba',
-'databaseerror'      => 'Zíko ya litákoli ya kabo',
-'laggedslavemode'    => "'''Likébisi''': lonkásá óyo ekokí kokwa mbóngwana ya nsúka nyɔ́nsɔ tɛ̂",
-'readonly'           => 'Litákoli ya kabo efúngámí',
-'enterlockreason'    => 'Ópésa ntína mpé ntángo ya kokanisa ya bofúngi ya litákoli ya kabo',
-'internalerror'      => 'Zíko ya káti',
+'error' => 'Mbéba',
+'databaseerror' => 'Zíko ya litákoli ya kabo',
+'laggedslavemode' => "'''Likébisi''': lonkásá óyo ekokí kokwa mbóngwana ya nsúka nyɔ́nsɔ tɛ̂",
+'readonly' => 'Litákoli ya kabo efúngámí',
+'enterlockreason' => 'Ópésa ntína mpé ntángo ya kokanisa ya bofúngi ya litákoli ya kabo',
+'internalerror' => 'Zíko ya káti',
 'internalerror_info' => 'Zíko ya káti: $1',
-'perfcached'         => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'       => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂. Bizalí bya $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
-'viewsource'         => 'Komɔ́nisa mosólo',
+'perfcached' => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcachedts' => 'Bipeseli byangó bizalí o mobómbisi-lombángu mpé bikokí kozala ya lɛlɔ́ tɛ̂. Bizalí bya $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'viewsource' => 'Komɔ́nisa mosólo',
 
 # Login and logout pages
-'yourname'                => 'Nkómbó ya mosáleli:',
-'yourpassword'            => 'Banda nayó:',
-'yourpasswordagain'       => 'Banda naíno:',
-'remembermypassword'      => 'Mɛ́i-komíkitola na molúki moye mbala ilandí (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)',
-'login'                   => 'komíkitola (log in)',
+'yourname' => 'Nkómbó ya mosáleli:',
+'yourpassword' => 'Banda nayó:',
+'yourpasswordagain' => 'Banda naíno:',
+'remembermypassword' => 'Mɛ́i-komíkitola na molúki moye mbala ilandí (ekosúkisa na {{PLURAL:$1|mokɔlɔ|mikɔlɔ}} $1)',
+'login' => 'komíkitola (log in)',
 'nav-login-createaccount' => 'Komíkomisa tǒ kokɔtɔ',
-'userlogin'               => 'Komíkomisa tǒ komíkitola',
-'userloginnocreate'       => 'komíkitola (log in)',
-'logout'                  => 'kolongwa',
-'userlogout'              => 'Kolongwa',
-'nologin'                 => "Omíkomísí naíno tɛ̂? '''$1'''.",
-'nologinlink'             => 'Míkomísá yɔ̌-mɛ́i',
-'gotaccount'              => "Omíkomísí naíno ? '''$1'''.",
-'gotaccountlink'          => 'komíkitola (log in)',
-'createaccountmail'       => 'na mokánda',
-'createaccountreason'     => 'Ntína:',
-'mailmypassword'          => 'Kotíndisa liloba-nzelá lya sika na mɛ́lɛ',
-'loginlanguagelabel'      => 'Lokótá: $1',
+'userlogin' => 'Komíkomisa tǒ komíkitola',
+'userloginnocreate' => 'komíkitola (log in)',
+'logout' => 'kolongwa',
+'userlogout' => 'Kolongwa',
+'nologin' => "Omíkomísí naíno tɛ̂? '''$1'''.",
+'nologinlink' => 'Míkomísá yɔ̌-mɛ́i',
+'gotaccount' => "Omíkomísí naíno ? '''$1'''.",
+'gotaccountlink' => 'komíkitola (log in)',
+'createaccountmail' => 'na mokánda',
+'createaccountreason' => 'Ntína:',
+'mailmypassword' => 'Kotíndisa liloba-nzelá lya sika na mɛ́lɛ',
+'loginlanguagelabel' => 'Lokótá: $1',
 
 # Change password dialog
-'oldpassword'             => 'Banda kala',
-'newpassword'             => 'Banda sika',
+'oldpassword' => 'Banda kala',
+'newpassword' => 'Banda sika',
 'resetpass-submit-cancel' => 'Kozóngela',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Nkómbó ya mosáleli:',
-'passwordreset-email'    => 'Adɛlɛ́sɛ-ímɛ́lɛ:',
+'passwordreset-email' => 'Adɛlɛ́sɛ-ímɛ́lɛ:',
 
 # Edit page toolbar
-'bold_sample'     => 'Nkomá ya mbinga',
-'bold_tip'        => 'Nkomá ya mbinga',
-'italic_sample'   => 'Nkomá ya kotɛ́ngama',
-'italic_tip'      => 'Nkomá ya kotɛ́ngama',
-'link_sample'     => 'Títɛlɛ ya ekangisele',
-'extlink_sample'  => 'http://www.example.com Litɛ́mɛ ya ekangisi',
-'extlink_tip'     => 'Ekangisele na libándá (óbósana http:// o libóso tɛ̂)',
+'bold_sample' => 'Nkomá ya mbinga',
+'bold_tip' => 'Nkomá ya mbinga',
+'italic_sample' => 'Nkomá ya kotɛ́ngama',
+'italic_tip' => 'Nkomá ya kotɛ́ngama',
+'link_sample' => 'Títɛlɛ ya ekangisele',
+'extlink_sample' => 'http://www.example.com Litɛ́mɛ ya ekangisi',
+'extlink_tip' => 'Ekangisele na libándá (óbósana http:// o libóso tɛ̂)',
 'headline_sample' => 'Nkomá ya litɛ́mɛ',
-'headline_tip'    => 'Litɛ́mɛ ya emeko 2',
-'image_tip'       => 'Kásá eyíngísámí',
-'media_tip'       => 'Ekangisele ya kásá',
-'hr_tip'          => 'Monkɔ́lɔ́tɔ́ molálí sémba (kosálela mwâ mokɛ́)',
+'headline_tip' => 'Litɛ́mɛ ya emeko 2',
+'image_tip' => 'Kásá eyíngísámí',
+'media_tip' => 'Ekangisele ya kásá',
+'hr_tip' => 'Monkɔ́lɔ́tɔ́ molálí sémba (kosálela mwâ mokɛ́)',
 
 # Edit pages
-'summary'                => 'Likwé ya mokusé:',
-'subject'                => 'Mokonza/litɛ́mɛ:',
-'minoredit'              => 'Ezalí mbóngwana ya mokɛ́',
-'watchthis'              => 'Kolanda lonkásá óyo',
-'savearticle'            => 'kobómbisa lonkásá',
-'preview'                => 'Botáli',
-'showpreview'            => 'Kotála yambo',
-'showdiff'               => 'Komɔ́nisa mbóngwana',
-'newarticle'             => '(Sika)',
-'editing'                => 'Kokoma «$1»',
-'editingsection'         => 'Bobɔngisi ya «$1» (sɛksió)',
-'editingcomment'         => 'Bobɔngisi ya «$1» (sɛksió ya sika)',
-'yourtext'               => 'Nkomá na yɔ̌',
-'templatesused'          => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o lonkásá óyo:',
-'templatesusedpreview'   => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o botáli boye:',
-'template-protected'     => '(na bobáteli)',
+'summary' => 'Likwé ya mokusé:',
+'subject' => 'Mokonza/litɛ́mɛ:',
+'minoredit' => 'Ezalí mbóngwana ya mokɛ́',
+'watchthis' => 'Kolanda lonkásá óyo',
+'savearticle' => 'kobómbisa lonkásá',
+'preview' => 'Botáli',
+'showpreview' => 'Kotála yambo',
+'showdiff' => 'Komɔ́nisa mbóngwana',
+'newarticle' => '(Sika)',
+'editing' => 'Kokoma «$1»',
+'editingsection' => 'Bobɔngisi ya «$1» (sɛksió)',
+'editingcomment' => 'Bobɔngisi ya «$1» (sɛksió ya sika)',
+'yourtext' => 'Nkomá na yɔ̌',
+'templatesused' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o lonkásá óyo:',
+'templatesusedpreview' => '{{PLURAL:$1|Emekisele esálélí|Bimekisele bisálélí}} o botáli boye:',
+'template-protected' => '(na bobáteli)',
 'template-semiprotected' => '(na bobáteli ya ndámbo)',
 
 # History pages
-'viewpagelogs'        => 'Komɔ́nisa zuluná ya lonkásá loye',
-'currentrev'          => 'Lizóngeli na mosálá',
-'revisionasof'        => 'Lizóngeli ya $1',
-'previousrevision'    => '← Lizóngeli lilekí',
-'nextrevision'        => 'Lizóngeli lilandí →',
+'viewpagelogs' => 'Komɔ́nisa zuluná ya lonkásá loye',
+'currentrev' => 'Lizóngeli na mosálá',
+'revisionasof' => 'Lizóngeli ya $1',
+'previousrevision' => '← Lizóngeli lilekí',
+'nextrevision' => 'Lizóngeli lilandí →',
 'currentrevisionlink' => 'Lizóngeli na mosálá',
-'cur'                 => 'sika',
-'next'                => 'bolɛngɛli',
-'last'                => 'ya nsúka',
-'histfirst'           => 'ya yambo',
-'histlast'            => 'ya nsúka',
+'cur' => 'sika',
+'next' => 'bolɛngɛli',
+'last' => 'ya nsúka',
+'histfirst' => 'ya yambo',
+'histlast' => 'ya nsúka',
 
 # Revision deletion
-'rev-delundel'   => 'komɔ́nisa/kobomba',
+'rev-delundel' => 'komɔ́nisa/kobomba',
 'revdel-restore' => 'kobóngola emɔnanela',
 
 # Merge log
@@ -314,56 +314,56 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 
 # Diffs
 'history-title' => 'Mokóló mwa mbóngwana mwa « $1 »',
-'lineno'        => 'Mokɔlɔ́tɔ $1 :',
-'editundo'      => 'kozóngela',
+'lineno' => 'Mokɔlɔ́tɔ $1 :',
+'editundo' => 'kozóngela',
 
 # Search results
-'searchresults'                  => 'Bozwi bwa boluki',
-'searchresults-title'            => 'Bozwi bwa boluka bwa «$1»',
-'searchresulttext'               => 'Mpɔ̂ na liyébísí lya {{SITENAME}}, ótala [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle'                 => "Olukákí '''[[:$1]]'''  ([[Special:Prefixindex/$1|nkásá yɔ́nsɔ ibandí na « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|nkásá yɔ́nsɔ ikangísí na « $1 »]])",
-'searchsubtitleinvalid'          => "Olukákí « '''$1''' »",
-'notitlematches'                 => 'Títɛlɛ yɔ̌kɔ́ tɛ́ ekokánísí',
-'notextmatches'                  => 'Nkomá ya nkásá yɔ̌kɔ́ tɛ́ ekokánísí',
-'prevn'                          => '{{PLURAL:$1|$1}} ya libosó',
-'nextn'                          => 'bolɛngɛli {{PLURAL:$1|$1}}',
-'viewprevnext'                   => 'Komɔ́na ($1 {{int:pipe-separator}} $2) ($3)',
-'searchprofile-articles'         => 'ekakoli',
-'searchprofile-images'           => 'Mitímediá',
-'searchprofile-everything'       => 'Yɔ́nsɔ',
+'searchresults' => 'Bozwi bwa boluki',
+'searchresults-title' => 'Bozwi bwa boluka bwa «$1»',
+'searchresulttext' => 'Mpɔ̂ na liyébísí lya {{SITENAME}}, ótala [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => "Olukákí '''[[:$1]]'''  ([[Special:Prefixindex/$1|nkásá yɔ́nsɔ ibandí na « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|nkásá yɔ́nsɔ ikangísí na « $1 »]])",
+'searchsubtitleinvalid' => "Olukákí « '''$1''' »",
+'notitlematches' => 'Títɛlɛ yɔ̌kɔ́ tɛ́ ekokánísí',
+'notextmatches' => 'Nkomá ya nkásá yɔ̌kɔ́ tɛ́ ekokánísí',
+'prevn' => '{{PLURAL:$1|$1}} ya libosó',
+'nextn' => 'bolɛngɛli {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Komɔ́na ($1 {{int:pipe-separator}} $2) ($3)',
+'searchprofile-articles' => 'ekakoli',
+'searchprofile-images' => 'Mitímediá',
+'searchprofile-everything' => 'Yɔ́nsɔ',
 'searchprofile-articles-tooltip' => 'Koluka na $1',
-'searchprofile-project-tooltip'  => 'Koluka na $1',
-'search-result-size'             => '$1 ({{PLURAL:$2|lokomá 1|nkomá $2}})',
-'search-result-score'            => 'Ntína : $1%',
-'search-redirect'                => '(boyendisi útá $1)',
-'search-section'                 => '(sɛksió ya $1)',
-'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ó.
+'searchprofile-project-tooltip' => 'Koluka na $1',
+'search-result-size' => '$1 ({{PLURAL:$2|lokomá 1|nkomá $2}})',
+'search-result-score' => 'Ntína : $1%',
+'search-redirect' => '(boyendisi útá $1)',
+'search-section' => '(sɛksió ya $1)',
+'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.",
-'powersearch'                    => 'Boluki',
-'powersearch-legend'             => 'Boluki bopúsání',
-'powersearch-ns'                 => 'Koluka o ntáká ya nkómbó :',
-'powersearch-redir'              => 'Kotíya molɔngɔ́ mwa mayendisi',
-'powersearch-field'              => 'Koluka',
+'powersearch' => 'Boluki',
+'powersearch-legend' => 'Boluki bopúsání',
+'powersearch-ns' => 'Koluka o ntáká ya nkómbó :',
+'powersearch-redir' => 'Kotíya molɔngɔ́ mwa mayendisi',
+'powersearch-field' => 'Koluka',
 
 # Preferences page
-'preferences'       => 'Malúli',
-'mypreferences'     => 'Malúli ma ngáí',
-'prefs-datetime'    => 'Mokɔlɔ mpé ntángo',
-'prefs-rc'          => 'Mbóngwana ya nsúka',
-'saveprefs'         => 'kobómbisa',
+'preferences' => 'Malúli',
+'mypreferences' => 'Malúli ma ngáí',
+'prefs-datetime' => 'Mokɔlɔ mpé ntángo',
+'prefs-rc' => 'Mbóngwana ya nsúka',
+'saveprefs' => 'kobómbisa',
 'searchresultshead' => 'Boluki',
-'allowemail'        => 'Enable mokánda from other users',
-'youremail'         => 'Mokandá (e-mail) *',
-'username'          => 'Nkómbó ya mosáleli :',
-'yourrealname'      => 'nkómbó ya sɔ̂lɔ́',
-'yourlanguage'      => 'Lokótá',
-'email'             => 'Mokánda',
+'allowemail' => 'Enable mokánda from other users',
+'youremail' => 'Mokandá (e-mail) *',
+'username' => 'Nkómbó ya mosáleli :',
+'yourrealname' => 'nkómbó ya sɔ̂lɔ́',
+'yourlanguage' => 'Lokótá',
+'email' => 'Mokánda',
 
 # Groups
 'group-sysop' => 'Bayángeli',
@@ -377,56 +377,56 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'action-edit' => 'Kobɔngisa lonkásá loye',
 
 # Recent changes
-'recentchanges'                  => 'Mbóngwana ya nsúka',
-'recentchanges-legend'           => 'Mapɔni ma mbóngwana ya nsúka',
+'recentchanges' => 'Mbóngwana ya nsúka',
+'recentchanges-legend' => 'Mapɔni ma mbóngwana ya nsúka',
 'recentchanges-feed-description' => 'Kolanda mbóngwana ya nsúka ya wiki o ebale eye.',
-'recentchanges-label-minor'      => 'Ezalí mbóngwana ya mokɛ́',
-'rcnote'                         => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana '''1''' ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|mokɔlɔ|mikɔlɔ '''$2'''}} ya nsúka, o ntángo $5 o mokɔlɔ $4.",
-'rcshowhideminor'                => '$1 mbóngwana ya mokɛ́',
-'rcshowhidebots'                 => '$1 barobot',
-'rcshowhideliu'                  => '$1 basáleli bamíkitólí',
-'rcshowhideanons'                => '$1 basáleli sóngóló',
-'rcshowhidemine'                 => '$1 mbóngwana ya ngáí',
-'rclinks'                        => 'Komɔ́nisa mbóngwana $1 ya nsúka o mikɔlɔ $2<br />$3',
-'diff'                           => 'mbó.',
-'hist'                           => 'mokóló',
-'hide'                           => 'kobomba',
-'show'                           => 'Komɔ́nisa',
-'minoreditletter'                => 'm',
-'newpageletter'                  => 'S',
-'boteditletter'                  => 'b',
-'rc-enhanced-expand'             => 'Komɔ́nisa ndámbo-ndámbo (esengélí JavaScript)',
+'recentchanges-label-minor' => 'Ezalí mbóngwana ya mokɛ́',
+'rcnote' => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana '''1''' ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|mokɔlɔ|mikɔlɔ '''$2'''}} ya nsúka, o ntángo $5 o mokɔlɔ $4.",
+'rcshowhideminor' => '$1 mbóngwana ya mokɛ́',
+'rcshowhidebots' => '$1 barobot',
+'rcshowhideliu' => '$1 basáleli bamíkitólí',
+'rcshowhideanons' => '$1 basáleli sóngóló',
+'rcshowhidemine' => '$1 mbóngwana ya ngáí',
+'rclinks' => 'Komɔ́nisa mbóngwana $1 ya nsúka o mikɔlɔ $2<br />$3',
+'diff' => 'mbó.',
+'hist' => 'mokóló',
+'hide' => 'kobomba',
+'show' => 'Komɔ́nisa',
+'minoreditletter' => 'm',
+'newpageletter' => 'S',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Komɔ́nisa ndámbo-ndámbo (esengélí JavaScript)',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Bolandi ekangisi',
-'recentchangeslinked-feed'    => 'Bolandi ekangisi',
+'recentchangeslinked' => 'Bolandi ekangisi',
+'recentchangeslinked-feed' => 'Bolandi ekangisi',
 'recentchangeslinked-toolbox' => 'Bolandi ekangisi',
-'recentchangeslinked-title'   => 'Mbóngwana ikangání na « $1 »',
-'recentchangeslinked-page'    => 'Nkómbó ya lonkásá :',
+'recentchangeslinked-title' => 'Mbóngwana ikangání na « $1 »',
+'recentchangeslinked-page' => 'Nkómbó ya lonkásá :',
 
 # Upload
-'upload'        => 'Kotíya kásá yɔ̌kɔ́',
-'uploadbtn'     => 'Kotíya nkásá mɔ̌kɔ́',
+'upload' => 'Kotíya kásá yɔ̌kɔ́',
+'uploadbtn' => 'Kotíya nkásá mɔ̌kɔ́',
 'uploadlogpage' => 'Zuluná ya botómbisi likoló',
-'filedesc'      => 'Likwé ya mokusé:',
-'savefile'      => 'kobómbisa kásá-kásá',
+'filedesc' => 'Likwé ya mokusé:',
+'savefile' => 'kobómbisa kásá-kásá',
 'uploadedimage' => '«[[$1]]» etómbísámí likoló',
 
 # Special:ListFiles
 'listfiles_date' => 'Mokɔlɔ',
 
 # File description page
-'file-anchor-link'          => 'Elilingi',
-'filehist'                  => 'Mokóló mwa kásá',
-'filehist-revert'           => 'kozóngela',
-'filehist-current'          => 'ya sikáwa',
-'filehist-datetime'         => 'Mokɔlɔ mpé ntángo',
-'filehist-thumb'            => 'Miniátilɛ',
-'filehist-thumbtext'        => 'Miniátilɛ ya versió ya $1',
-'filehist-user'             => 'Mosáleli',
-'filehist-dimensions'       => 'Dimasió',
-'filehist-comment'          => 'Ntembe',
-'imagelinks'                => 'Bikangisele  bya kásá',
+'file-anchor-link' => 'Elilingi',
+'filehist' => 'Mokóló mwa kásá',
+'filehist-revert' => 'kozóngela',
+'filehist-current' => 'ya sikáwa',
+'filehist-datetime' => 'Mokɔlɔ mpé ntángo',
+'filehist-thumb' => 'Miniátilɛ',
+'filehist-thumbtext' => 'Miniátilɛ ya versió ya $1',
+'filehist-user' => 'Mosáleli',
+'filehist-dimensions' => 'Dimasió',
+'filehist-comment' => 'Ntembe',
+'imagelinks' => 'Bikangisele  bya kásá',
 'uploadnewversion-linktext' => 'Kotómbisa likoló kásá eye lisúsu',
 
 # File deletion
@@ -446,20 +446,20 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'doubleredirects' => 'Boyendisi mbala míbalé',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 {{PLURAL:$1|okté|baokté}}',
-'nmembers'                => '{{PLURAL:$1|ekakoli|bikakoli}} $1',
-'uncategorizedpages'      => 'Nkásá izángí loléngé',
+'nbytes' => '$1 {{PLURAL:$1|okté|baokté}}',
+'nmembers' => '{{PLURAL:$1|ekakoli|bikakoli}} $1',
+'uncategorizedpages' => 'Nkásá izángí loléngé',
 'uncategorizedcategories' => 'Ndéngé izángí loléngé',
-'uncategorizedimages'     => 'Bilílí bizángí loléngé',
-'uncategorizedtemplates'  => 'Bimekoli bizángí loléngé',
-'unusedcategories'        => 'Ndéngé na mosálá tɛ̂',
-'prefixindex'             => 'Nkásá yɔ́nsɔ na libandi...',
-'shortpages'              => 'Nkásá ya mokúsé',
-'longpages'               => 'Nkásá ya molaí',
-'newpages'                => 'Ekakoli ya sika',
-'newpages-username'       => 'Nkómbó ya mosáleli :',
-'move'                    => 'Kobóngola nkómbó',
-'movethispage'            => 'Kobóngola nkómbó ya lonkásá loye',
+'uncategorizedimages' => 'Bilílí bizángí loléngé',
+'uncategorizedtemplates' => 'Bimekoli bizángí loléngé',
+'unusedcategories' => 'Ndéngé na mosálá tɛ̂',
+'prefixindex' => 'Nkásá yɔ́nsɔ na libandi...',
+'shortpages' => 'Nkásá ya mokúsé',
+'longpages' => 'Nkásá ya molaí',
+'newpages' => 'Ekakoli ya sika',
+'newpages-username' => 'Nkómbó ya mosáleli :',
+'move' => 'Kobóngola nkómbó',
+'movethispage' => 'Kobóngola nkómbó ya lonkásá loye',
 
 # Book sources
 'booksources-go' => 'Kɛndɛ́',
@@ -468,13 +468,13 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'log' => 'Bapasɔ́',
 
 # Special:AllPages
-'allpages'       => 'Nkásá ínsɔ',
+'allpages' => 'Nkásá ínsɔ',
 'alphaindexline' => '$1 kina $2',
-'nextpage'       => 'Lonkásá ya nsima ($1)',
-'prevpage'       => 'Lonkasá o libosó ($1)',
-'allarticles'    => 'Nkásá ínsɔ',
-'allpagesprev'   => '< ya libosó',
-'allpagesnext'   => 'bolɛngɛli >',
+'nextpage' => 'Lonkásá ya nsima ($1)',
+'prevpage' => 'Lonkasá o libosó ($1)',
+'allarticles' => 'Nkásá ínsɔ',
+'allpagesprev' => '< ya libosó',
+'allpagesnext' => 'bolɛngɛli >',
 'allpagessubmit' => 'kokɛndɛ',
 
 # Special:Categories
@@ -484,121 +484,121 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'newuserlogpage' => 'Zuluná ya bokeli bwa konti ya mosáleli',
 
 # E-mail user
-'emailuser'       => 'Kotíndela yě mɛ́lɛ',
+'emailuser' => 'Kotíndela yě mɛ́lɛ',
 'defemailsubject' => '{{SITENAME}} mokánda',
-'emailfrom'       => 'útá',
-'emailto'         => 'epái',
-'emailmessage'    => 'Nsango',
-'emailsend'       => 'kotínda',
-'emailsent'       => 'nkandá etíndámá',
-'emailsenttext'   => 'Nkandá ya yɔ̌ etíndámá',
+'emailfrom' => 'útá',
+'emailto' => 'epái',
+'emailmessage' => 'Nsango',
+'emailsend' => 'kotínda',
+'emailsent' => 'nkandá etíndámá',
+'emailsenttext' => 'Nkandá ya yɔ̌ etíndámá',
 
 # Watchlist
-'watchlist'         => 'Nkásá nalandí',
-'mywatchlist'       => 'Nkásá nalandí',
-'addedwatchtext'    => "Lonkásá «[[:$1]]» lobakísámí na [[Special:Watchlist|nkásá olandí]]. Mbóngwana o lonkásá loye mpé o lonkásá la ntembe ikomɔ́nisama áwa, ikokɔ́mana '''mbinga''' o [[Special:RecentChanges|Lístɛ ya mbóngwana ya nsúka]] mpɔ̂ na mpási tɛ̂.",
-'watch'             => 'Kolanda',
-'watchthispage'     => 'Kolanda lonkásá óyo',
-'unwatch'           => 'Kolanda tɛ́',
+'watchlist' => 'Nkásá nalandí',
+'mywatchlist' => 'Nkásá nalandí',
+'addedwatchtext' => "Lonkásá «[[:$1]]» lobakísámí na [[Special:Watchlist|nkásá olandí]]. Mbóngwana o lonkásá loye mpé o lonkásá la ntembe ikomɔ́nisama áwa, ikokɔ́mana '''mbinga''' o [[Special:RecentChanges|Lístɛ ya mbóngwana ya nsúka]] mpɔ̂ na mpási tɛ̂.",
+'watch' => 'Kolanda',
+'watchthispage' => 'Kolanda lonkásá óyo',
+'unwatch' => 'Kolanda tɛ́',
 'watchlist-details' => '{{PLURAL:$1|Lonkásá $1 elandámí|Nkásá $1 bilandámí}}, longola nkásá ya ntembe.',
-'wlnote'            => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|ngonga|ngonga '''$2'''}} ya nsúka.",
-'wlshowlast'        => 'Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ $3',
+'wlnote' => "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|ngonga|ngonga '''$2'''}} ya nsúka.",
+'wlshowlast' => 'Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ $3',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Kolanda...',
+'watching' => 'Kolanda...',
 'unwatching' => 'Kolanda tɛ́...',
 
 'created' => 'ekomákí',
 
 # Delete
-'deletepage'            => 'Kolímwisa lonkásá loye',
-'dellogpage'            => 'zuluná ya bolímwisi',
-'deletionlog'           => 'zuluná ya bolímwisi',
-'deletecomment'         => 'Ntína:',
-'deleteotherreason'     => 'Ntína káka tǒ esúsu :',
+'deletepage' => 'Kolímwisa lonkásá loye',
+'dellogpage' => 'zuluná ya bolímwisi',
+'deletionlog' => 'zuluná ya bolímwisi',
+'deletecomment' => 'Ntína:',
+'deleteotherreason' => 'Ntína káka tǒ esúsu :',
 'deletereasonotherlist' => 'Ntína esúsu',
 
 # Rollback
 'rollbacklink' => 'kolíngola',
 
 # Protect
-'protectlogpage'              => 'Zuluná ya mbátela',
-'protectcomment'              => 'Ntína:',
-'protectexpiry'               => 'Esílí :',
-'protect_expiry_invalid'      => 'Ntángo ya bosílisi ebɔngɛ́lí tɛ̂',
-'protect_expiry_old'          => 'Ntángo ya bosílisi ezalí o ntángo elékákí',
-'protect-default'             => 'Kolingisa basáleli bánsɔ',
-'protect-fallback'            => 'Esengélí ndingisa « $1 »',
+'protectlogpage' => 'Zuluná ya mbátela',
+'protectcomment' => 'Ntína:',
+'protectexpiry' => 'Esílí :',
+'protect_expiry_invalid' => 'Ntángo ya bosílisi ebɔngɛ́lí tɛ̂',
+'protect_expiry_old' => 'Ntángo ya bosílisi ezalí o ntángo elékákí',
+'protect-default' => 'Kolingisa basáleli bánsɔ',
+'protect-fallback' => 'Esengélí ndingisa « $1 »',
 'protect-level-autoconfirmed' => 'Kotɛ́lɛmisa basáleli bamíkomísí tɛ́ tǒ ya sika',
-'protect-level-sysop'         => 'Káka bayángeli',
-'protect-summary-cascade'     => 'bobáteli ya kokitana',
-'protect-expiring'            => 'Esílí o $1 (UTC)',
-'restriction-type'            => 'Ndingisa :',
-'restriction-level'           => 'nivó ya bondimi ndámbo',
+'protect-level-sysop' => 'Káka bayángeli',
+'protect-summary-cascade' => 'bobáteli ya kokitana',
+'protect-expiring' => 'Esílí o $1 (UTC)',
+'restriction-type' => 'Ndingisa :',
+'restriction-level' => 'nivó ya bondimi ndámbo',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Kobɔngisa',
 'restriction-move' => 'Kobóngola nkómbó',
 
 # Undelete
-'undeletelink'     => 'komɔnisa / kozóngisa',
+'undeletelink' => 'komɔnisa / kozóngisa',
 'undeleteviewlink' => 'Komɔ́nisa',
 
 # Namespace form on various pages
-'namespace'      => 'Ntáká ya nkómbó :',
+'namespace' => 'Ntáká ya nkómbó :',
 'blanknamespace' => '(Ya libosó)',
 
 # Contributions
-'contributions'       => 'Mosálá mwa mosáleli óyo',
+'contributions' => 'Mosálá mwa mosáleli óyo',
 'contributions-title' => 'Mosálá mwa mosáleli $1',
-'mycontris'           => 'Nkásá nakomí',
-'contribsub2'         => 'Mpɔ̂ na $1 ($2)',
-'month'               => 'Bandá sánzá (mpé yangó ilekí):',
-'year'                => 'Bandá mobú (mpé myangó milekí) :',
+'mycontris' => 'Nkásá nakomí',
+'contribsub2' => 'Mpɔ̂ na $1 ($2)',
+'month' => 'Bandá sánzá (mpé yangó ilekí):',
+'year' => 'Bandá mobú (mpé myangó milekí) :',
 
 'sp-contributions-blocklog' => 'zuluná ya botɛ́lɛmisi',
-'sp-contributions-talk'     => 'Ntembe',
-'sp-contributions-submit'   => 'Boluki',
+'sp-contributions-talk' => 'Ntembe',
+'sp-contributions-submit' => 'Boluki',
 
 # What links here
-'whatlinkshere'            => 'Ekangísí áwa',
-'whatlinkshere-title'      => 'Nkásá ikangísí na « $1 »',
-'whatlinkshere-page'       => 'Lonkásá:',
-'isredirect'               => 'Lonkásá la boyendisi',
-'isimage'                  => 'Bikangisele  bya kásá',
-'whatlinkshere-links'      => '← bikangiseli',
+'whatlinkshere' => 'Ekangísí áwa',
+'whatlinkshere-title' => 'Nkásá ikangísí na « $1 »',
+'whatlinkshere-page' => 'Lonkásá:',
+'isredirect' => 'Lonkásá la boyendisi',
+'isimage' => 'Bikangisele  bya kásá',
+'whatlinkshere-links' => '← bikangiseli',
 'whatlinkshere-hideredirs' => '$1 mayendisi',
-'whatlinkshere-hidetrans'  => '$1 botíyi na káti',
-'whatlinkshere-hidelinks'  => '$1 bikangiseli',
-'whatlinkshere-filters'    => 'Bikɔngɔlɛlɛ',
+'whatlinkshere-hidetrans' => '$1 botíyi na káti',
+'whatlinkshere-hidelinks' => '$1 bikangiseli',
+'whatlinkshere-filters' => 'Bikɔngɔlɛlɛ',
 
 # Block/unblock
-'blockip'                  => 'Kotɛ́lɛmisa mosáleli',
-'ipboptions'               => 'ngonga 2:2 hours, mokɔlɔ 1:1 day, mikɔlɔ 3:3 days,mpɔ́sɔ 1:1 week,mpɔ́sɔ 2:2 weeks,sánzá 1:1 month,sánzá 3:3 months,sánzá 6:6 months,mobú 1:1 year,na nsúka tɛ̂:infinite',
-'ipblocklist'              => 'Adɛ́lɛsɛ IP mpé basáleli batɛ́lɛmísámí',
-'blocklink'                => 'kotɛ́lɛmisa',
-'unblocklink'              => 'koboma botɛ́lɛmisi',
-'change-blocklink'         => 'kobóngola botɛ́lɛmisi',
-'contribslink'             => 'bíteni ya mosálá',
-'blocklogpage'             => 'Zuluná ya botɛ́lɛmisi',
-'blocklogentry'            => '[[$1]] atɛ́lɛ́mísámí ; bosílisi : $2 $3',
-'unblocklogentry'          => 'ebomí botɛ́lɛmisi $1',
+'blockip' => 'Kotɛ́lɛmisa mosáleli',
+'ipboptions' => 'ngonga 2:2 hours, mokɔlɔ 1:1 day, mikɔlɔ 3:3 days,mpɔ́sɔ 1:1 week,mpɔ́sɔ 2:2 weeks,sánzá 1:1 month,sánzá 3:3 months,sánzá 6:6 months,mobú 1:1 year,na nsúka tɛ̂:infinite',
+'ipblocklist' => 'Adɛ́lɛsɛ IP mpé basáleli batɛ́lɛmísámí',
+'blocklink' => 'kotɛ́lɛmisa',
+'unblocklink' => 'koboma botɛ́lɛmisi',
+'change-blocklink' => 'kobóngola botɛ́lɛmisi',
+'contribslink' => 'bíteni ya mosálá',
+'blocklogpage' => 'Zuluná ya botɛ́lɛmisi',
+'blocklogentry' => '[[$1]] atɛ́lɛ́mísámí ; bosílisi : $2 $3',
+'unblocklogentry' => 'ebomí botɛ́lɛmisi $1',
 'block-log-flags-nocreate' => 'bokeli bwa konti botendísámí',
 
 # Move page
-'movearticle'             => 'Kobóngola nkómbó ya ekakoli :',
-'move-watch'              => 'Kolánda lonkásá la líziba mpé lonkásá la tíndamelo',
-'movepagebtn'             => 'Kobóngola lonkásá',
-'movedto'                 => 'nkómbó ya sika',
-'movelogpage'             => 'Zuluná ya bobóngoli nkómbó',
-'movereason'              => 'Ntína :',
-'revertmove'              => 'kozóngela',
-'delete_and_move'         => 'Kolímwisa mpé kobóngola nkómbó',
+'movearticle' => 'Kobóngola nkómbó ya ekakoli :',
+'move-watch' => 'Kolánda lonkásá la líziba mpé lonkásá la tíndamelo',
+'movepagebtn' => 'Kobóngola lonkásá',
+'movedto' => 'nkómbó ya sika',
+'movelogpage' => 'Zuluná ya bobóngoli nkómbó',
+'movereason' => 'Ntína :',
+'revertmove' => 'kozóngela',
+'delete_and_move' => 'Kolímwisa mpé kobóngola nkómbó',
 'delete_and_move_confirm' => 'Boye, kolímwisa lonkásá',
-'delete_and_move_reason'  => 'Ntína ya bolímwisi mpé bobóngoli bwa nkómbó',
+'delete_and_move_reason' => 'Ntína ya bolímwisi mpé bobóngoli bwa nkómbó',
 
 # Export
-'export'        => 'komɛmɛ na...',
+'export' => 'komɛmɛ na...',
 'export-submit' => 'Komɛmɛ',
 
 # Namespace 8 related
@@ -611,48 +611,48 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 'import' => 'koútisa...',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Lonkásá na ngáí',
-'tooltip-pt-mytalk'              => 'Lonkásá ntembe lwa ngáí',
-'tooltip-pt-preferences'         => 'Malúli ma ngáí',
-'tooltip-pt-watchlist'           => 'Nkásá nalandí mpɔ̂ na mbóngwana',
-'tooltip-pt-mycontris'           => 'Molɔngɔ́ mwa nkásá nakomí',
-'tooltip-pt-login'               => 'Epésí lilako lya komíkitola yɔ̂, kasi esengélí tê.',
-'tooltip-pt-logout'              => 'Kolongwa',
-'tooltip-ca-talk'                => 'Ntembe etálí lonkásá lwa nkomá',
-'tooltip-ca-edit'                => 'Okokí kokoma lonkásá loye. Ósálela butɔ́ ya botáli-yambo o libóso na kobómbisa.',
-'tooltip-ca-history'             => 'Mbóngwana ya kala ya lonkásá loye (na basáleli)',
-'tooltip-ca-protect'             => 'Kobátela lonkásá loye',
-'tooltip-ca-delete'              => 'Kolímwisa lonkásá loye',
-'tooltip-ca-move'                => 'Kobóngola nkómbó ya lonkásá loye',
-'tooltip-ca-watch'               => 'Kobakisa na nkásá olandaka',
-'tooltip-ca-unwatch'             => 'Kolongola na nkásá olandaka',
-'tooltip-search'                 => 'Boluki {{SITENAME}}',
-'tooltip-search-go'              => 'Kokɛndɛ na lonkásá na nkómbó óyo sɔ́kí ezalí',
-'tooltip-search-fulltext'        => 'Koluka nkásá na nkomá yangó.',
-'tooltip-p-logo'                 => 'Lokásá ya libosó',
-'tooltip-n-mainpage'             => 'Kokɛndɛ na Lonkásá ya libosó',
+'tooltip-pt-userpage' => 'Lonkásá na ngáí',
+'tooltip-pt-mytalk' => 'Lonkásá ntembe lwa ngáí',
+'tooltip-pt-preferences' => 'Malúli ma ngáí',
+'tooltip-pt-watchlist' => 'Nkásá nalandí mpɔ̂ na mbóngwana',
+'tooltip-pt-mycontris' => 'Molɔngɔ́ mwa nkásá nakomí',
+'tooltip-pt-login' => 'Epésí lilako lya komíkitola yɔ̂, kasi esengélí tê.',
+'tooltip-pt-logout' => 'Kolongwa',
+'tooltip-ca-talk' => 'Ntembe etálí lonkásá lwa nkomá',
+'tooltip-ca-edit' => 'Okokí kokoma lonkásá loye. Ósálela butɔ́ ya botáli-yambo o libóso na kobómbisa.',
+'tooltip-ca-history' => 'Mbóngwana ya kala ya lonkásá loye (na basáleli)',
+'tooltip-ca-protect' => 'Kobátela lonkásá loye',
+'tooltip-ca-delete' => 'Kolímwisa lonkásá loye',
+'tooltip-ca-move' => 'Kobóngola nkómbó ya lonkásá loye',
+'tooltip-ca-watch' => 'Kobakisa na nkásá olandaka',
+'tooltip-ca-unwatch' => 'Kolongola na nkásá olandaka',
+'tooltip-search' => 'Boluki {{SITENAME}}',
+'tooltip-search-go' => 'Kokɛndɛ na lonkásá na nkómbó óyo sɔ́kí ezalí',
+'tooltip-search-fulltext' => 'Koluka nkásá na nkomá yangó.',
+'tooltip-p-logo' => 'Lokásá ya libosó',
+'tooltip-n-mainpage' => 'Kokɛndɛ na Lonkásá ya libosó',
 'tooltip-n-mainpage-description' => 'Kokɛndɛ na lonkásá ya libosó',
-'tooltip-n-portal'               => 'Etalí mwángo moye',
-'tooltip-n-recentchanges'        => 'Lístɛ ya mbóngwana ya nsúka o wiki',
-'tooltip-n-randompage'           => 'Tómbisa lonkásá na mbɛsɛ',
-'tooltip-n-help'                 => 'Esíká ya bosálisi',
-'tooltip-t-whatlinkshere'        => 'Lístɛ ya nkásá wiki nyɔ́nsɔ iye ikangísí áwa',
-'tooltip-feed-rss'               => 'Ebale RSS mpɔ̂ na lonkásá loye',
-'tooltip-feed-atom'              => 'Ebale Atom mpɔ̂ na lonkásá loye',
-'tooltip-t-emailuser'            => 'Kotíndela mosáleli óyo mɛ́lɛ',
-'tooltip-t-upload'               => 'Kotíya kásá ebelé',
-'tooltip-t-specialpages'         => 'Lístɛ ya nkásá gudi nyɔ́nsɔ',
-'tooltip-t-print'                => 'Loléngé la lonkásá loye la kobimisa',
-'tooltip-t-permalink'            => 'Ekangisele ya koúmela na versió eye ya lonkánsá',
-'tooltip-ca-nstab-main'          => 'Komɔ́nisa káti',
-'tooltip-ca-nstab-user'          => 'Komɔ́nisa lonkásá la mosáleli',
-'tooltip-ca-nstab-special'       => 'Eye ezalí lonkásá gudi, okokí kobɔngisa eye tɛ̂',
-'tooltip-ca-nstab-project'       => 'Komɔ́nisa lonkásá la mwǎngo',
-'tooltip-ca-nstab-image'         => 'Komɔ́nisa lonkásá la kásá',
-'tooltip-ca-nstab-template'      => 'Komɔ́nisela emekisele',
-'tooltip-ca-nstab-category'      => 'Komɔ́nisa lonkásá la katégori',
-'tooltip-save'                   => 'Kobómbisa mbóngwana ya yɔ̌',
-'tooltip-watch'                  => 'Kobakisa na nkásá olandaka',
+'tooltip-n-portal' => 'Etalí mwángo moye',
+'tooltip-n-recentchanges' => 'Lístɛ ya mbóngwana ya nsúka o wiki',
+'tooltip-n-randompage' => 'Tómbisa lonkásá na mbɛsɛ',
+'tooltip-n-help' => 'Esíká ya bosálisi',
+'tooltip-t-whatlinkshere' => 'Lístɛ ya nkásá wiki nyɔ́nsɔ iye ikangísí áwa',
+'tooltip-feed-rss' => 'Ebale RSS mpɔ̂ na lonkásá loye',
+'tooltip-feed-atom' => 'Ebale Atom mpɔ̂ na lonkásá loye',
+'tooltip-t-emailuser' => 'Kotíndela mosáleli óyo mɛ́lɛ',
+'tooltip-t-upload' => 'Kotíya kásá ebelé',
+'tooltip-t-specialpages' => 'Lístɛ ya nkásá gudi nyɔ́nsɔ',
+'tooltip-t-print' => 'Loléngé la lonkásá loye la kobimisa',
+'tooltip-t-permalink' => 'Ekangisele ya koúmela na versió eye ya lonkánsá',
+'tooltip-ca-nstab-main' => 'Komɔ́nisa káti',
+'tooltip-ca-nstab-user' => 'Komɔ́nisa lonkásá la mosáleli',
+'tooltip-ca-nstab-special' => 'Eye ezalí lonkásá gudi, okokí kobɔngisa eye tɛ̂',
+'tooltip-ca-nstab-project' => 'Komɔ́nisa lonkásá la mwǎngo',
+'tooltip-ca-nstab-image' => 'Komɔ́nisa lonkásá la kásá',
+'tooltip-ca-nstab-template' => 'Komɔ́nisela emekisele',
+'tooltip-ca-nstab-category' => 'Komɔ́nisa lonkásá la katégori',
+'tooltip-save' => 'Kobómbisa mbóngwana ya yɔ̌',
+'tooltip-watch' => 'Kobakisa na nkásá olandaka',
 
 # Browsing diffs
 'previousdiff' => '← Bobóngoli bwa libosó',
@@ -668,7 +668,7 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'nyɔ́nsɔ',
 'namespacesall' => 'Nyɔ́nsɔ',
-'monthsall'     => 'nyɔ́nsɔ',
+'monthsall' => 'nyɔ́nsɔ',
 
 # action=purge
 'confirm_purge_button' => 'Nandimi',
@@ -682,13 +682,13 @@ Ezalí listɛ́ ya nkásá gudi bizalí  na [[Special:SpecialPages|{{int:special
 # Watchlist editing tools
 'watchlisttools-view' => 'Komɔ́nisela mbóngwana ya ntína',
 'watchlisttools-edit' => 'Komɔ́nisela mpé kobóngola nkásá nalandí',
-'watchlisttools-raw'  => 'Kobimisela nkásá nalandí (na pɛpɛ)',
+'watchlisttools-raw' => 'Kobimisela nkásá nalandí (na pɛpɛ)',
 
 # Special:SpecialPages
 'specialpages' => 'Nkásá gudi',
 
 # HTML forms
-'htmlform-submit'              => 'Kotínda',
+'htmlform-submit' => 'Kotínda',
 'htmlform-selectorother-other' => 'Mosúsu',
 
 );
index ecc2420..9eb5252 100644 (file)
@@ -469,7 +469,6 @@ $messages = array(
 
 # Diffs
 'history-title' => 'ປະຫວັດການດັດແກ້ ຂອງ "$1"',
-'difference' => '(ສ່ວນຕ່າງລະຫວ່າງແຕ່ລະສະບັບ)',
 'lineno' => 'ແຖວ $1:',
 'compareselectedversions' => 'ສົມທຽບ ລະຫວ່າງ ສະບັບເລືອກ',
 'editundo' => 'ກັບຄືນ',
index bccb4ac..762c1e8 100644 (file)
@@ -441,7 +441,6 @@ Informasi: (bye) = petuho a nca selt,
 
 # Diffs
 'history-title' => 'Bundau di selt di "$1"',
-'difference' => '(Petuho kwa selt)',
 'lineno' => 'Lani $1:',
 'compareselectedversions' => 'Bapisize',
 'editundo' => "afi hloli ye ng'i",
index 8a8c926..6df4a0a 100644 (file)
@@ -562,6 +562,8 @@ $2',
 'ns-specialprotected' => 'Specialieji puslapiai negali būti redaguojami.',
 'titleprotected' => "[[User:$1|$1]] apsaugojo šį pavadinimą nuo sukūrimo.
 Nurodyta priežastis yra ''$2''.",
+'filereadonlyerror' => 'Neįmanoma pakeisti failo " $1 " nes failų saugykla " $2 " yra nustatyta tik skaitymo režimu.
+Ją užrakinęs administratorius pateikė šį paaiškinimą: " $3 ".',
 
 # Virus scanner
 'virus-badscanner' => "Neleistina konfigūracija: nežinomas virusų skeneris: ''$1''",
@@ -654,6 +656,7 @@ nebus siunčiami nei vienai žemiau išvardintai paslaugai.',
 'invalidemailaddress' => 'El. pašto adresas negali būti priimtas, nes atrodo, kad jis nėra teisingo formato.
 Prašome įvesti gerai suformuotą adresą arba palikite tą laukelį tuščią.',
 'cannotchangeemail' => 'Paskyros e-mail adresas šiame viki negali būti keičiamas.',
+'emaildisabled' => 'Ši svetainė negali siųsti elektroninių laiškų.',
 'accountcreated' => 'Paskyra sukurta',
 'accountcreatedtext' => 'Naudotojo paskyra $1 buvo sukurta.',
 'createaccount-title' => '{{SITENAME}} paskyros kūrimas',
@@ -837,6 +840,7 @@ Jūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] ki
 'updated' => '(Atnaujinta)',
 'note' => "'''Pastaba:'''",
 'previewnote' => "''Nepamirškite, kad tai tik peržiūra, pakeitimai dar nėra išsaugoti!'''",
+'continue-editing' => 'Tęsti redagavimą',
 'previewconflict' => 'Ši peržiūra parodo tekstą iš viršutiniojo teksto redagavimo lauko taip, kaip jis bus rodomas, jei pasirinksite išsaugoti.',
 'session_fail_preview' => "'''Atsiprašome! Mes negalime vykdyti jūsų keitimo dėl sesijos duomenų praradimo.
 Prašome pamėginti vėl. Jei tai nepadeda, pamėginkite atsijungti ir prisijungti atgal.'''",
@@ -848,6 +852,7 @@ Prašome pamėginti vėl. Jei tai nepadeda, pamėginkite atsijungti ir prisijung
 'token_suffix_mismatch' => "'''Jūsų pakeitimas buvo atmestas, nes jūsų naršyklė iškraipė skyrybos ženklus keitimo žymėje. Keitimas buvo atmestas norint apsaugoti puslapio tekstą nuo sugadinimo. Taip kartais būna, kai jūs naudojate anoniminį tarpinio serverio paslaugą.'''",
 'edit_form_incomplete' => "'''Kai redaguoti formos dalys nepasiekė serverio; du kartus patikrinti, kad jūsų pakeitimai yra nesugadintos ir bandykite dar kartą.'''",
 'editing' => 'Taisomas $1',
+'creating' => 'Kuriama $1',
 'editingsection' => 'Taisomas $1 (skyrelis)',
 'editingcomment' => 'Taisomas $1 (komentaras)',
 'editconflict' => 'Išpręskite konfliktą: $1',
@@ -911,6 +916,7 @@ Greičiausiai jis yra ištrintas.',
 'edit-no-change' => 'Jūsų keitimas buvo ignoruotas kadangi nebuvo atlikta jokių teksto pakeitimų.',
 'edit-already-exists' => 'Negalima sukurti naujo puslapio.
 Jis jau egzistuoja.',
+'defaultmessagetext' => 'Numatytasis pranešimo tekstas',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Įspėjimas: Šiame puslapyje yra per daug užtrunkančių analizatoriaus funkcijų šaukinių.
@@ -1071,7 +1077,7 @@ Prašome patikrinti sąrašus.',
 # Suppression log
 'suppressionlog' => 'Trynimo istorija',
 'suppressionlogtext' => 'Žemiau yra trynimų ir blokavimų sąrašas, įtraukiant turinį, paslėptą nuo administratorių.
-Žiūrėkite [[Special:BlockList|IP blokavimų sąrašą]], kad rastumėte dabar veikiančius draudimus ir blokavimus.',
+Žiūrėkite [[Special:BlockList|blokavimų sąrašą]], kad rastumėte dabar veikiančius draudimus ir blokavimus.',
 
 # History merging
 'mergehistory' => 'Sujungti puslapių istorijas',
@@ -1105,7 +1111,6 @@ Prašome patikrinti sąrašus.',
 
 # Diffs
 'history-title' => '„$1“ versijų istorija',
-'difference' => '(Skirtumai tarp versijų)',
 'difference-multipage' => '(Skirtumai tarp puslapių)',
 'lineno' => 'Eilutė $1:',
 'compareselectedversions' => 'Palyginti pasirinktas versijas',
@@ -1494,6 +1499,7 @@ teisės",
 'newsectionsummary' => '/* $1 */ naujas skyrius',
 'rc-enhanced-expand' => 'Rodyti detales (reikia JavaScript)',
 'rc-enhanced-hide' => 'Slėpti detales',
+'rc-old-title' => 'iš pradžių sukurtas kaip " $1 "',
 
 # Recent changes linked
 'recentchangeslinked' => 'Susiję keitimai',
@@ -1652,6 +1658,7 @@ Prašome susisiekti su [[Special:ListUsers/sysop|sistemos administratoriumi]].',
 'backend-fail-closetemp' => 'Negalima uždaryti laikino failo.',
 'backend-fail-read' => 'Negalima nuskaityti failo $1.',
 'backend-fail-create' => 'Negalima sukurti failo $1.',
+'backend-fail-maxsize' => 'Failo $1 sukurti nepavyko nes jis didesnis nei {{PLURAL:$2|vienas baitas|$2 baitai|$2 baitų}}.',
 'backend-fail-readonly' => 'Galutinė saugykla "$1" dabar yra skirta tik skaitymui. Buvo nurodyta priežastis: "$2"',
 'backend-fail-synced' => 'Failas "$1", esantis vidinėje galutinėje saugykloje, yra pažymėtas kaip nepilnas.',
 'backend-fail-connect' => 'Negalima prisijungti prie galutinės saugyklos "$1".',
@@ -1978,6 +1985,12 @@ Galima sumažinti rezultatų skaičių patikslinant veiksmo rūšį, naudotoją
 'allpagesprefix' => 'Rodyti puslapiu su priedėliu:',
 'allpagesbadtitle' => 'Duotas puslapio pavadinimas yra neteisingas arba turi tarpkalbininį arba tarpprojektinį priedėlį. Jame yra vienas ar keli simboliai, kurių negalima naudoti pavadinimuose.',
 'allpages-bad-ns' => '{{SITENAME}} neturi „$1“ vardų srities.',
+'allpages-hide-redirects' => 'Slėpti peradresavimus',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Jūs matote kompiuterio atmintyje išsaugotą puslapio versiją, kuri gali būti $1 senumo.',
+'cachedspecial-viewing-cached-ts' => 'Jūs matote kompiuterio atmintyje išsaugotą puslapio versiją, kuri gali neatitikti naujausios versijos.',
+'cachedspecial-refresh-now' => 'Peržiūrėti naujausius.',
 
 # Special:Categories
 'categories' => 'Kategorijos',
@@ -2471,7 +2484,7 @@ Pateikiamas paskutinis blokavimo istorijos įrašas.',
 'reblock-logentry' => 'pakeisti [[$1]] blokavimo nustatymai, naujas blokavimo laikas – $2 $3',
 'blocklogtext' => 'Čia yra naudotojų blokavimo ir atblokavimo sąrašas.
 Automatiškai blokuoti IP adresai neišvardinti.
-Jei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[Special:BlockList|IP blokavimų sąrašą]].',
+Jei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[Special:BlockList|blokavimų sąrašą]].',
 'unblocklogentry' => 'atblokavo $1',
 'block-log-flags-anononly' => 'tik anoniminiai naudotojai',
 'block-log-flags-nocreate' => 'paskyrų kūrimas išjungtas',
@@ -3563,6 +3576,7 @@ Jūs turėjote gauti [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public Licens
 'version-software' => 'Įdiegta programinė įranga',
 'version-software-product' => 'Produktas',
 'version-software-version' => 'Versija',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Failo kelias',
@@ -3693,6 +3707,7 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'feedback-submit' => 'Siųsti Atsiliepimą',
 'feedback-adding' => 'Pridedamas atsiliepimas į puslapį ...',
 'feedback-error2' => 'Klaida: Redagavimas nepavyko',
+'feedback-close' => 'Atlikta',
 
 # API errors
 'api-error-badaccess-groups' => 'Jums neleidžiama įkelti failus į šią wiki.',
@@ -3713,6 +3728,19 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'api-error-unknown-code' => 'Nežinoma klaida: " $1 "',
 'api-error-unknown-error' => 'Vidinė klaida: kažkas nutiko bandant įkelti failą.',
 'api-error-unknown-warning' => 'Nežinomas įspėjimas: $1',
+'api-error-unknownerror' => 'Nežinoma klaida: " $1 "',
 'api-error-uploaddisabled' => 'Įkėlimas išjungtas šioje wiki.',
+'api-error-verification-error' => 'Šis failas gali būti sugadintas arba turi neteisingą papildinį.',
+
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekundė|sekundės|sekundžių}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minutė|minutės|minučių}}',
+'duration-hours' => '$1 {{PLURAL:$1|valanda|valandos|valandų}}',
+'duration-days' => '$1 {{PLURAL:$1|diena|dienos|dienų}}',
+'duration-weeks' => '$1 {{PLURAL:$1|savaitė|savaitės|savaičių}}',
+'duration-years' => '$1 {{PLURAL:$1|metai|metai|metų}}',
+'duration-decades' => '$1 {{PLURAL:$1|dešimtmetis|dešimtmečiai|dešimtmečių}}',
+'duration-centuries' => '$1 {{PLURAL:$1|amžius|amžiai|amžių}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}',
 
 );
index 78c5152..497b6c4 100644 (file)
@@ -371,7 +371,6 @@ n = nasvareigs lobuojums.',
 
 # Diffs
 'history-title' => '"$1" verseju viesture',
-'difference' => '(Versiju saleidzynuojums)',
 'lineno' => '$1 aiļa',
 'compareselectedversions' => 'Saleidzynuot ituos versejis',
 'editundo' => 'atsaukt',
index 583efb8..0fce327 100644 (file)
@@ -134,7 +134,7 @@ $messages = array(
 'category-article-count' => "{{PLURAL:$2|He pawl hian hemi phêk chauh hi a nei. | Hê'ng phek {{PLURAL:$1||$1-te}} hi he pawlah hian a awm, avaia $2 zingah.}}",
 'category-article-count-limited' => '{{PLURAL: $1 |$1He|$1 Heng}} phekte hi hë pawl, i en mékah hian a awm.',
 'category-file-count' => '{{PLURAL:$2|He pawl hian hë taksa chauh hi a kengtel.|{{PLURAL:$1|He taksa $1 |Heng taksa $1-te}} hi he pawlah hian a awm, a vaia $2 zingah}}',
-'category-file-count-limited' => '{{PLURAL:$1|He taksa (file)|$1Heng taksate}} hi hemi pawl, i en mékah hian a awm.',
+'category-file-count-limited' => '{{PLURAL:$1|He taksa|$1Heng taksate}} hi hemi pawl, i en mékah hian a awm.',
 'listingcontinuesabbrev' => 'chhunz.',
 'index-category' => 'Phêk tarlante',
 'noindex-category' => 'Phêk tarlan lohte',
@@ -483,6 +483,7 @@ I thurûk i thlâk hlawhtling tawh a nih loh pawhin thurûk lailâwk i dil a ni
 'passwordreset' => 'Thurûk ziakţha rawh',
 'passwordreset-legend' => 'Thurûk ziakţha rawh',
 'passwordreset-username' => 'Hmangtu hming:',
+'passwordreset-domain' => 'Huamchin:',
 'passwordreset-email' => 'E-chenhmun:',
 'passwordreset-emailtitle' => '{{SITENAME}}-a siangchan chanchin kim',
 'passwordreset-emailelement' => 'Hmangtuhming: $1
@@ -571,6 +572,12 @@ I rawn atan a danbeh chhinchhiahna kan han tarlang a ni e:',
 'note' => "'''Hriat tùr:'''",
 'previewnote' => "'''Heihi endikna chauh a ni tih hrereng ang che.'''
 I tihdanglamna dahţhat a la ni lo!",
+'session_fail_preview_html' => "'''A pawi hlë mai! Ṭhutchhúng chanchin vawnna hloh avangin i siamṭhatna dahṭhat theih a ni lo.'''
+
+''{{SITENAME}}-in HTML hel a tihzalen avangin hë enlâwkna hi JavaScript beihna laka invèn fimkhur nan thup bo a ni.''
+
+'''Hei hi siamṭhat tumna dànzui pangngai a nih chuan khawngaihin dahṭhat tum nawn leh rawh.'''
+I la dahṭhat theih loh cheu chuan [[Special:UserLogout|chhuah phawt ]] a, luh nawn leh hmang tein han bei vêl chhin lä.",
 'editing' => '$1 i siam(ţha) mék',
 'editingsection' => '$1 (hlawm) i siam(ţha) mék',
 'editingcomment' => '$1 (hlawm thar) i siam(ţha) mék',
@@ -578,6 +585,8 @@ I tihdanglamna dahţhat a la ni lo!",
 'yourtext' => 'I thu tah hian:',
 'storedversion' => 'Ennawnna vawnţhat',
 'yourdiff' => 'Danglamnate',
+'protectedpagewarning' => "'''Vaukhanna: Hë phêk hi roreltute chauhvin an siamṭhat theihna tùrin vènhim a ni.'''
+I rawn atan ziaka chanchin dah hnuhnüng ber kan rawn chhawp chhuak e:",
 'semiprotectedpagewarning' => "'''Hriat tùr:''' He phêk hi hmangtu inziaklûtte chauhvin an tihdanglam theihna tùra vènhim a ni.
 I rawn tùrin siamm-danglamna chanchin ziaka kan dahţhat thar ber a hnuaiah khuan kan chhawp e:",
 'templatesused' => 'He phêka {{PLURAL:$1|siamsa hman|siamsa hmante}}',
@@ -654,7 +663,6 @@ Lamtawi hmante: '''({{int:cur}})'''= ennawnna thar ber nena danglamna, '''({{int
 
 # Diffs
 'history-title' => '"$1" ennawnna chanchin',
-'difference' => '(Ennawnnate danglamna)',
 'lineno' => 'Tlar $1:',
 'compareselectedversions' => 'Ennawnna i thlan tâkte khi khaikhin rawh le',
 'editundo' => 'tihletna',
@@ -961,9 +969,11 @@ Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
 'boteditletter' => 'k',
 'rc-enhanced-expand' => 'Tilang kim rawh (JavaScript a ngai)',
 'rc-enhanced-hide' => 'Thup ţhenna',
+'rc-old-title' => 'Atìra "&1" tih hming pú-a siam.',
 
 # Recent changes linked
 'recentchangeslinked' => 'Tihdanglam anpuite',
+'recentchangeslinked-feed' => 'Tihdanglam anpuite',
 'recentchangeslinked-toolbox' => 'Tihdanglam anpuite',
 'recentchangeslinked-title' => '"$1" kaihhnawih tihdanglamnate',
 'recentchangeslinked-noresult' => 'I hun thlan chhungah hian a phek zawmpui tihdanglam pakhat mah a awm lo.',
@@ -982,6 +992,9 @@ Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
 'upload_directory_missing' => 'Hlankai bawmpui ($1)  a awm lo va, Rangserverin a siam thei lo bawl.',
 'upload_directory_read_only' => 'Hlankai bawmpui ($1) hi Rangserver in a ziak thei lo.',
 'uploaderror' => 'Hlankai sual',
+'upload-recreate-warning' => "'''Vaukhànna: Hemi hming pu taksa hi sawn tawh emaw paih tawh a ni.'''
+
+I ràwnah paihna leh sawnna chhinchhiahna thuziak kan rawn chhawpchhuak e:",
 'upload-permitted' => 'Taksa phal chiho: $1.',
 'upload-preferred' => 'Taksa duh deuh bîk: $1.',
 'upload-prohibited' => 'Taksa khap: $1.',
@@ -1028,7 +1041,7 @@ A hming thlâk la bei ţha leh rawh.',
 'listfiles_count' => 'Chhuah',
 
 # File description page
-'file-anchor-link' => 'Taksa (file)',
+'file-anchor-link' => 'Taksa',
 'filehist' => 'A chanchin enna',
 'filehist-help' => 'A hunlaia a lan dan en tùrin a hun/ni-ah hmet rawh.',
 'filehist-deleteall' => 'a vaiin nuaibo rawh',
@@ -1118,6 +1131,7 @@ Phêk hminga hman awih loh hawrawp a hmang palh a ni mai thei bawk.',
 'sp-deletedcontributions-contribs' => 'kutthawhnate',
 
 # Special:LinkSearch
+'linksearch-ns' => 'Hminghmun:',
 'linksearch-ok' => 'Zawng rawh',
 'linksearch-line' => '$1 hi $2 aţanga thlunzawm a ni',
 
index d3d6ddc..2354acc 100644 (file)
@@ -882,7 +882,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" versiju hronoloģija',
-'difference' => '(Atšķirības starp versijām)',
 'difference-multipage' => '(Atšķirības starp lapām)',
 'lineno' => '$1. rindiņa:',
 'compareselectedversions' => 'Salīdzināt izvēlētās versijas',
index 13b6701..447bae3 100644 (file)
@@ -857,7 +857,6 @@ $1",
 
 # Diffs
 'history-title' => '$1之誌',
-'difference' => '(辨異)',
 'difference-multipage' => '(辨頁)',
 'lineno' => '列$1:',
 'compareselectedversions' => '辨二擇',
index 7e9c100..593d127 100644 (file)
@@ -11,6 +11,7 @@
  * @author Dato deutschland
  * @author Dawid Deutschland
  * @author Ibero-kolxi
+ * @author Reedy
  * @author The Evil IP address
  */
 
@@ -18,340 +19,339 @@ $fallback = 'tr';
 
 $messages = array(
 # User preference toggles
-'tog-underline'        => "Link'iş tude kogu3’uxaçki:",
+'tog-underline' => "Link'iş tude kogu3’uxaçki:",
 'tog-rememberpassword' => 'Parola-skani goişini (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-showhiddencats'   => "Şinaxeri k'at'egorepe ko3'iri",
+'tog-showhiddencats' => "Şinaxeri k'at'egorepe ko3'iri",
 
 'underline-always' => "P'anda",
-'underline-never'  => "P'ot'e",
+'underline-never' => "P'ot'e",
 
 # Dates
-'sunday'        => 'Mjaçxa',
-'monday'        => 'Tutaçxa',
-'tuesday'       => 'İk’inaçxa',
-'wednesday'     => 'Cumaçxa',
-'thursday'      => 'Çaçxa',
-'friday'        => 'Obiçxa',
-'saturday'      => 'Sabat’oni',
-'sun'           => 'Mja',
-'mon'           => 'Tut',
-'tue'           => "İk'i",
-'wed'           => 'Cum',
-'thu'           => 'Çaç',
-'fri'           => 'Obi',
-'sat'           => 'Sab',
-'january'       => '3ʼanağani',
-'february'      => 'Kʼundura',
-'march'         => 'Martʼi',
-'april'         => 'Apʼrili',
-'may_long'      => 'Maisi',
-'june'          => 'Mbuliştuta',
-'july'          => 'X3ala',
-'august'        => 'Maraşina',
-'september'     => 'Stʼaroşina',
-'october'       => 'Gumatuta',
-'november'      => 'Çxalva',
-'december'      => 'Xristʼana',
-'january-gen'   => '3ʼanağani',
-'february-gen'  => 'Kʼundura',
-'march-gen'     => 'Martʼi',
-'april-gen'     => 'Apʼrili',
-'may-gen'       => 'Maisi',
-'june-gen'      => 'Mbuliştuta',
-'july-gen'      => 'X3ala',
-'august-gen'    => 'Maraşina',
+'sunday' => 'Mjaçxa',
+'monday' => 'Tutaçxa',
+'tuesday' => 'İk’inaçxa',
+'wednesday' => 'Cumaçxa',
+'thursday' => 'Çaçxa',
+'friday' => 'Obiçxa',
+'saturday' => 'Sabat’oni',
+'sun' => 'Mja',
+'mon' => 'Tut',
+'tue' => "İk'i",
+'wed' => 'Cum',
+'thu' => 'Çaç',
+'fri' => 'Obi',
+'sat' => 'Sab',
+'january' => '3ʼanağani',
+'february' => 'Kʼundura',
+'march' => 'Martʼi',
+'april' => 'Apʼrili',
+'may_long' => 'Maisi',
+'june' => 'Mbuliştuta',
+'july' => 'X3ala',
+'august' => 'Maraşina',
+'september' => 'Stʼaroşina',
+'october' => 'Gumatuta',
+'november' => 'Çxalva',
+'december' => 'Xristʼana',
+'january-gen' => '3ʼanağani',
+'february-gen' => 'Kʼundura',
+'march-gen' => 'Martʼi',
+'april-gen' => 'Apʼrili',
+'may-gen' => 'Maisi',
+'june-gen' => 'Mbuliştuta',
+'july-gen' => 'X3ala',
+'august-gen' => 'Maraşina',
 'september-gen' => 'Stʼaroşina',
-'october-gen'   => 'Gumatuta',
-'november-gen'  => 'Çxalva',
-'december-gen'  => 'Xristʼana',
-'jan'           => '3ʼan',
-'feb'           => 'Kʼun',
-'mar'           => 'Mar',
-'apr'           => 'Apʼr',
-'may'           => 'Mai',
-'jun'           => 'Mbul',
-'jul'           => 'X3al',
-'aug'           => 'Mara',
-'sep'           => 'Stʼa',
-'oct'           => 'Gum',
-'nov'           => 'Çxa',
-'dec'           => 'Xri',
+'october-gen' => 'Gumatuta',
+'november-gen' => 'Çxalva',
+'december-gen' => 'Xristʼana',
+'jan' => '3ʼan',
+'feb' => 'Kʼun',
+'mar' => 'Mar',
+'apr' => 'Apʼr',
+'may' => 'Mai',
+'jun' => 'Mbul',
+'jul' => 'X3al',
+'aug' => 'Mara',
+'sep' => 'Stʼa',
+'oct' => 'Gum',
+'nov' => 'Çxa',
+'dec' => 'Xri',
 
 # Categories related messages
-'pagecategories'                => 'Butʼkʼaşi {{PLURAL:$1|kʼatʼegori|kʼatʼegorepe}}',
-'category_header'               => '"$1" kʼatʼegoris butʼkʼape',
-'subcategories'                 => 'Tudekʼategorepe',
-'category-media-header'         => '"$1" k\'at\'egoris media',
-'category-empty'                => "''Am k'at'egoris çkar madde varna media va uğun.''",
-'hidden-categories'             => '{{PLURAL:$1|Şinaxeri kʼatʼegori|Şinaxeri kʼatʼegorepe}}',
-'hidden-category-category'      => "Şinaxeri k'at'egorepe",
-'category-subcat-count'         => '{{PLURAL:$2|Am kʼatʼegoris, xvala, tude na ren kʼatʼegori uğun.|Am kʼatʼegori tʼoplamurot $2 kʼatʼegorişen {{PLURAL:$1|tudekʼatʼegori|$1 tudekʼatʼegori}}s uğun}}',
+'pagecategories' => 'Butʼkʼaşi {{PLURAL:$1|kʼatʼegori|kʼatʼegorepe}}',
+'category_header' => '"$1" kʼatʼegoris butʼkʼape',
+'subcategories' => 'Tudekʼategorepe',
+'category-media-header' => '"$1" k\'at\'egoris media',
+'category-empty' => "''Am k'at'egoris çkar madde varna media va uğun.''",
+'hidden-categories' => '{{PLURAL:$1|Şinaxeri kʼatʼegori|Şinaxeri kʼatʼegorepe}}',
+'hidden-category-category' => "Şinaxeri k'at'egorepe",
+'category-subcat-count' => '{{PLURAL:$2|Am kʼatʼegoris, xvala, tude na ren kʼatʼegori uğun.|Am kʼatʼegori tʼoplamurot $2 kʼatʼegorişen {{PLURAL:$1|tudekʼatʼegori|$1 tudekʼatʼegori}}s uğun}}',
 'category-subcat-count-limited' => "Am k'at'egori tudes na dgin {{PLURAL:$1|tude k'at'egoris|$1 tude k'at'egoris}} uğun.",
-'category-article-count'        => '{{PLURAL:$2|Am kʼatʼegoris, xvala, tude na ren kʼatʼegori uğun.|Tʼoplami $2 şen, tude na ren {{PLURAL:$1|butʼkʼa|$1 butʼkʼa}} am kʼatʼegoris ren.}}',
-'listingcontinuesabbrev'        => '(naqona)',
-'index-category'                => "Indexi na uğun but'k'ape",
-'noindex-category'              => 'Indexi muşi na var uğun sayfape',
-
-'about'         => 'Şeni',
-'newwindow'     => '(ağne penceres guin3ʼkʼen)',
-'cancel'        => 'İpʼtʼali qʼvi',
+'category-article-count' => '{{PLURAL:$2|Am kʼatʼegoris, xvala, tude na ren kʼatʼegori uğun.|Tʼoplami $2 şen, tude na ren {{PLURAL:$1|butʼkʼa|$1 butʼkʼa}} am kʼatʼegoris ren.}}',
+'listingcontinuesabbrev' => '(naqona)',
+'index-category' => "Indexi na uğun but'k'ape",
+'noindex-category' => 'Indexi muşi na var uğun sayfape',
+
+'about' => 'Şeni',
+'newwindow' => '(ağne penceres guin3ʼkʼen)',
+'cancel' => 'İpʼtʼali qʼvi',
 'moredotdotdot' => 'Çkva…',
-'mypage'        => 'Çkimi sayfa',
-'mytalk'        => 'Çkimi mesajepe',
-'anontalk'      => "Am IP'şi mesajepe",
-'navigation'    => 'Goxtima',
-'and'           => '&#32;do',
+'mypage' => 'Çkimi sayfa',
+'mytalk' => 'Çkimi mesajepe',
+'anontalk' => "Am IP'şi mesajepe",
+'navigation' => 'Goxtima',
+'and' => '&#32;do',
 
 # Cologne Blue skin
-'qbfind'         => 'Koz*iri',
-'qbedit'         => 'Doktiri',
-'qbpageoptions'  => 'Am sayfa',
-'qbmyoptions'    => 'Çkimi sayfape',
+'qbfind' => 'Koz*iri',
+'qbedit' => 'Doktiri',
+'qbpageoptions' => 'Am sayfa',
+'qbmyoptions' => 'Çkimi sayfape',
 'qbspecialpages' => 'Doxmeli sayfape',
 
 # Vector skin
 'vector-action-delete' => 'Jili',
-'vector-view-edit'     => 'Doktiri',
-
-'errorpagetitle'   => 'Çilata',
-'returnto'         => '$1 butʼkʼaşa goikti.',
-'tagline'          => '{{SITENAME}}-işen',
-'help'             => 'Meşvela',
-'search'           => 'mgori',
-'searchbutton'     => 'Mgori',
-'go'               => 'İgzali',
-'searcharticle'    => 'İgzali',
-'history'          => 'Butʼkʼaş tarixi',
-'history_short'    => 'Tarixi',
+'vector-view-edit' => 'Doktiri',
+
+'errorpagetitle' => 'Çilata',
+'returnto' => '$1 butʼkʼaşa goikti.',
+'tagline' => '{{SITENAME}}-işen',
+'help' => 'Meşvela',
+'search' => 'mgori',
+'searchbutton' => 'Mgori',
+'go' => 'İgzali',
+'searcharticle' => 'İgzali',
+'history' => 'Butʼkʼaş tarixi',
+'history_short' => 'Tarixi',
 'printableversion' => "Kart'alişa na geibaz*gen versiyoni",
-'permalink'        => 'Am xalişa kʼontaktʼi qʼvi',
-'edit'             => 'doktiri',
-'create'           => 'dokʼidi',
-'editthispage'     => 'Butʼkʼa doktiri',
-'delete'           => 'Jili',
-'deletethispage'   => 'Am sayfa jili',
-'protect'          => 'İçvi',
-'protect_change'   => 'Doktiri',
-'newpage'          => 'Ağani butʼkʼa',
-'talkpage'         => 'Butʼkʼas ğarğali.',
+'permalink' => 'Am xalişa kʼontaktʼi qʼvi',
+'edit' => 'doktiri',
+'create' => 'dokʼidi',
+'editthispage' => 'Butʼkʼa doktiri',
+'delete' => 'Jili',
+'deletethispage' => 'Am sayfa jili',
+'protect' => 'İçvi',
+'protect_change' => 'Doktiri',
+'newpage' => 'Ağani butʼkʼa',
+'talkpage' => 'Butʼkʼas ğarğali.',
 'talkpagelinktext' => 'Mesaji',
-'specialpage'      => 'Doxmeli sayfa',
-'personaltools'    => 'Doxmeli oxmaronepe',
-'talk'             => 'Ğarğala',
-'views'            => 'Oz*iramepe',
-'toolbox'          => 'Oxmaronepe',
-'otherlanguages'   => 'Majurani nenapes',
-'redirectedfrom'   => '($1 butʼkʼaşen moxtu)',
-'redirectpagesub'  => 'Redirektʼiş butʼkʼa',
-'lastmodifiedat'   => 'Am butʼkʼa çodinurot $2, $1 tarixis iktirinu.',
-'jumpto'           => 'İdi do:',
+'specialpage' => 'Doxmeli sayfa',
+'personaltools' => 'Doxmeli oxmaronepe',
+'talk' => 'Ğarğala',
+'views' => 'Oz*iramepe',
+'toolbox' => 'Oxmaronepe',
+'otherlanguages' => 'Majurani nenapes',
+'redirectedfrom' => '($1 butʼkʼaşen moxtu)',
+'redirectpagesub' => 'Redirektʼiş butʼkʼa',
+'lastmodifiedat' => 'Am butʼkʼa çodinurot $2, $1 tarixis iktirinu.',
+'jumpto' => 'İdi do:',
 'jumptonavigation' => 'ixmari',
-'jumptosearch'     => 'mgori',
+'jumptosearch' => 'mgori',
 
 # 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}} şeni',
-'aboutpage'            => 'Project:Ambarepe',
-'copyright'            => 'Doloxe na renanpe, $1-şi ren.',
-'copyrightpage'        => '{{ns:project}}:Şinaxeri Hakʼepe',
-'disclaimers'          => 'Kʼabuli na var ixvenu ondepe',
-'disclaimerpage'       => 'Project:Mtelot kʼabuli na var ixvenu ondepe',
-'edithelp'             => 'Muçʼoşi iktirinen?',
-'edithelppage'         => 'Help:Butʼkʼa muçʼoşi iktirinen?',
-'helppage'             => 'Help:Doloxe na renanpe',
-'mainpage'             => 'Dudi Butʼkʼa',
+'aboutsite' => '{{SITENAME}} şeni',
+'aboutpage' => 'Project:Ambarepe',
+'copyright' => 'Doloxe na renanpe, $1-şi ren.',
+'copyrightpage' => '{{ns:project}}:Şinaxeri Hakʼepe',
+'disclaimers' => 'Kʼabuli na var ixvenu ondepe',
+'disclaimerpage' => 'Project:Mtelot kʼabuli na var ixvenu ondepe',
+'edithelp' => 'Muçʼoşi iktirinen?',
+'edithelppage' => 'Help:Butʼkʼa muçʼoşi iktirinen?',
+'helppage' => 'Help:Doloxe na renanpe',
+'mainpage' => 'Dudi Butʼkʼa',
 'mainpage-description' => "Dudi But'k'a",
-'privacy'              => 'Şinaxeri Hakʼepe',
-'privacypage'          => 'Project:Şinaxeri Hakʼepe',
+'privacy' => 'Şinaxeri Hakʼepe',
+'privacypage' => 'Project:Şinaxeri Hakʼepe',
 
 'badaccess' => 'İzini çilata',
 
-'ok'                      => 'HO',
-'retrievedfrom'           => '"$1" adresişen eizdinu',
-'youhavenewmessages'      => 'Ağani <u>$1</u> giğun. ($2)',
-'newmessageslink'         => 'ağani mesajepe',
-'newmessagesdifflink'     => 'çodinaşi oktiroba',
+'ok' => 'HO',
+'retrievedfrom' => '"$1" adresişen eizdinu',
+'youhavenewmessages' => 'Ağani $1 giğun. ($2)',
+'newmessageslink' => 'ağani mesajepe',
+'newmessagesdifflink' => 'çodinaşi oktiroba',
 'youhavenewmessagesmulti' => "$1's ağne mesajepe giğun",
-'editsection'             => 'doktiri',
-'editold'                 => 'Doktiri',
-'editlink'                => 'Doktiri',
-'viewsourcelink'          => 'odude koz*iri',
-'editsectionhint'         => '$1 burme muşi doktiri',
-'toc'                     => 'Temaşi dudi-coxope',
-'showtoc'                 => 'ko3ʼiri',
-'hidetoc'                 => 'Doşinaxi',
-'site-rss-feed'           => '$1 RSS-iş Feedi',
-'site-atom-feed'          => '$1 Atʼom-iş feedi',
-'page-rss-feed'           => '"$1" RSS-iş Feedi',
-'page-atom-feed'          => '"$1" Atʼom-iş Feedi',
-'red-link-title'          => '$1 (Ak butʼkʼa va ren)',
+'editsection' => 'doktiri',
+'editold' => 'Doktiri',
+'editlink' => 'Doktiri',
+'viewsourcelink' => 'odude koz*iri',
+'editsectionhint' => '$1 burme muşi doktiri',
+'toc' => 'Temaşi dudi-coxope',
+'showtoc' => 'ko3ʼiri',
+'hidetoc' => 'Doşinaxi',
+'site-rss-feed' => '$1 RSS-iş Feedi',
+'site-atom-feed' => '$1 Atʼom-iş feedi',
+'page-rss-feed' => '"$1" RSS-iş Feedi',
+'page-atom-feed' => '"$1" Atʼom-iş Feedi',
+'red-link-title' => '$1 (Ak butʼkʼa va ren)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Stʼatʼia',
-'nstab-user'      => 'maxmareş butʼkʼa',
-'nstab-special'   => 'Doxmeli butʼkʼa',
-'nstab-project'   => 'Pʼrojeşi butʼkʼa',
-'nstab-image'     => 'Dosya',
+'nstab-main' => 'Stʼatʼia',
+'nstab-user' => 'maxmareş butʼkʼa',
+'nstab-special' => 'Doxmeli butʼkʼa',
+'nstab-project' => 'Pʼrojeşi butʼkʼa',
+'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesaji',
-'nstab-template'  => 'Şabloni',
-'nstab-category'  => 'Kʼatʼegori',
+'nstab-template' => 'Şabloni',
+'nstab-category' => 'Kʼatʼegori',
 
 # General errors
-'missing-article'    => 'Datʼabeizik, na igoren "$1" $2 coxoni butʼkʼaşi tekstʼi var az*iru.
+'missing-article' => 'Datʼabeizik, na igoren "$1" $2 coxoni butʼkʼaşi tekstʼi var az*iru.
 
 Muşeni? Çunki am butʼkʼa, jileri na ren a butʼkʼaşi golaxteri versiyoni ren.
 
 Eger sebebi aya na va renna, pʼrogramis ar çilata z*irit.
 Mu iqʼven! Aya, a [[Special:ListUsers/sysop|adminis]], URL-ti çʼareli şekʼilite rapʼortʼi doçʼarit.',
 'missingarticle-rev' => '(revizyoni#: $1)',
-'badtitletext'       => 'Na içʼaren butʼkʼaşi coxo ya çilatoni ren ya boşi ren varna inter-nena do inter-vikʼişi kʼontʼaktʼis na uğutʼu şeni mtini varen.
+'badtitletext' => 'Na içʼaren butʼkʼaşi coxo ya çilatoni ren ya boşi ren varna inter-nena do inter-vikʼişi kʼontʼaktʼis na uğutʼu şeni mtini varen.
 Dudicoxopes oxmaruşi yasaği na ren ar, varna daha dido kʼarakʼtʼeri uğun.',
-'viewsource'         => 'Odudes o3ʼkʼedi',
+'viewsource' => 'Odudes o3ʼkʼedi',
 
 # Login and logout pages
-'yourname'                => 'Skani maxmare-coxo:',
-'yourpassword'            => 'Pʼarola-skani:',
-'remembermypassword'      => 'Parola-skani goişini (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                   => 'Sitʼeşa amaxti',
+'yourname' => 'Skani maxmare-coxo:',
+'yourpassword' => 'Pʼarola-skani:',
+'remembermypassword' => 'Parola-skani goişini (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Sitʼeşa amaxti',
 'nav-login-createaccount' => 'Sitʼeşa amaxti / hesabi dokʼidi',
-'userlogin'               => 'Sitʼeşa amaxti / hesabi dokʼidi',
-'logout'                  => 'Siteşen Kogamaxti',
-'userlogout'              => 'Siteşen Kogamaxti',
-'nologin'                 => "Hesabi va giğuni? '''$1'''",
-'nologinlink'             => 'Hesabi dokʼidi.',
-'mailmypassword'          => 'Ağne pʼarola-çkimi moncğoni',
+'userlogin' => 'Sitʼeşa amaxti / hesabi dokʼidi',
+'logout' => 'Siteşen Kogamaxti',
+'userlogout' => 'Siteşen Kogamaxti',
+'nologin' => "Hesabi va giğuni? '''$1'''",
+'nologinlink' => 'Hesabi dokʼidi.',
+'mailmypassword' => 'Ağne pʼarola-çkimi moncğoni',
 
 # Change password dialog
 'oldpassword' => "Mcveşi p'arola:",
 'newpassword' => "Ağani P'arola:",
 
 # Edit page toolbar
-'bold_sample'     => 'Mçxu nçʼara',
-'bold_tip'        => 'Mçxu nçʼara',
-'italic_sample'   => 'Elakteri nçʼara',
-'italic_tip'      => 'Elakteri nçʼara',
-'link_sample'     => 'Kʼontʼaktʼiş dudicoxo',
-'link_tip'        => 'Doloxeni linkʼi',
-'extlink_sample'  => 'http://www.example.com adresiş oxo3ʼonapa',
-'extlink_tip'     => 'Galeni kʼontʼaktʼi (Adresiş dudis http:// ukʼatit)',
+'bold_sample' => 'Mçxu nçʼara',
+'bold_tip' => 'Mçxu nçʼara',
+'italic_sample' => 'Elakteri nçʼara',
+'italic_tip' => 'Elakteri nçʼara',
+'link_sample' => 'Kʼontʼaktʼiş dudicoxo',
+'link_tip' => 'Doloxeni linkʼi',
+'extlink_sample' => 'http://www.example.com adresiş oxo3ʼonapa',
+'extlink_tip' => 'Galeni kʼontʼaktʼi (Adresiş dudis http:// ukʼatit)',
 'headline_sample' => 'Dudicoxoşi nçʼara',
-'headline_tip'    => '2. derece dudicoxo',
-'nowiki_sample'   => 'Oxoşkveri formatʼi nçʼara-tkvani ak doçʼarit.',
-'nowiki_tip'      => 'vikʼiş formatʼi ipʼtʼali qʼvi.',
-'image_tip'       => 'Doxveri dosya',
-'media_tip'       => 'Media dosyasişa kʼontʼaktʼi',
-'sig_tip'         => 'Xeşçʼara-tkvani do tarixi',
-'hr_tip'          => 'Horizontʼali ğara (m3ika ixmarit)',
+'headline_tip' => '2. derece dudicoxo',
+'nowiki_sample' => 'Oxoşkveri formatʼi nçʼara-tkvani ak doçʼarit.',
+'nowiki_tip' => 'vikʼiş formatʼi ipʼtʼali qʼvi.',
+'image_tip' => 'Doxveri dosya',
+'media_tip' => 'Media dosyasişa kʼontʼaktʼi',
+'sig_tip' => 'Xeşçʼara-tkvani do tarixi',
+'hr_tip' => 'Horizontʼali ğara (m3ika ixmarit)',
 
 # Edit pages
-'summary'                          => 'Mkʼule nçʼarate:',
-'subject'                          => 'Tema/dudi-coxo:',
-'minoredit'                        => 'Çʼitʼa oktiroba',
-'watchthis'                        => 'Butkʼa gatxozi',
-'savearticle'                      => 'Butʼkʼas ikʼayitʼi',
-'preview'                          => 'Evvelişen i3ʼkʼedi',
-'showpreview'                      => '"Evvelişen i3ʼkʼedi" fonkʼsioni ixmari',
-'showdiff'                         => 'Oktirobape ko3ʼiri',
-'anoneditwarning'                  => "'''KUN3Xİ:''' Sitʼeşa amaxtimeri va re.
+'summary' => 'Mkʼule nçʼarate:',
+'subject' => 'Tema/dudi-coxo:',
+'minoredit' => 'Çʼitʼa oktiroba',
+'watchthis' => 'Butkʼa gatxozi',
+'savearticle' => 'Butʼkʼas ikʼayitʼi',
+'preview' => 'Evvelişen i3ʼkʼedi',
+'showpreview' => '"Evvelişen i3ʼkʼedi" fonkʼsioni ixmari',
+'showdiff' => 'Oktirobape ko3ʼiri',
+'anoneditwarning' => "'''KUN3Xİ:''' Sitʼeşa amaxtimeri va re.
 Emuşeni butʼkʼaşi oktirobaşi kʼayitʼepes, coxoskani yeine IP adresiskani ikʼayitʼinasen.",
-'summary-preview'                  => '"Evvelişen i3ʼkʼedi" fonkʼsionişi ozetʼi:',
-'newarticle'                       => '(Ağani)',
-'newarticletext'                   => "Daha na va ren ar butʼkʼaşa na geidven ar kʼontʼaktʼis atxozit. Am butʼkʼa okʼidu şeni tude na ren tʼeksboksi ixmarit. Çkina şeni [[{{MediaWiki:Helppage}}|meşvelaşi butʼkʼas]] o3ʼkʼedit. Ak çilataten moxtit na, pʼrogramişi '''Ukʼuni''' tʼuşis geibaz*git.",
-'noarticletext'                    => 'A3ʼi am butʼkʼa boşi ren.
+'summary-preview' => '"Evvelişen i3ʼkʼedi" fonkʼsionişi ozetʼi:',
+'newarticle' => '(Ağani)',
+'newarticletext' => "Daha na va ren ar butʼkʼaşa na geidven ar kʼontʼaktʼis atxozit. Am butʼkʼa okʼidu şeni tude na ren tʼeksboksi ixmarit. Çkina şeni [[{{MediaWiki:Helppage}}|meşvelaşi butʼkʼas]] o3ʼkʼedit. Ak çilataten moxtit na, pʼrogramişi '''Ukʼuni''' tʼuşis geibaz*git.",
+'noarticletext' => 'A3ʼi am butʼkʼa boşi ren.
 Am butʼkʼaş dudi-coxo majurani butʼkʼapes [[Special:Search/{{PAGENAME}}|gagoren]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} alakʼali na renan ndğerepe gagoren],
 varna am butʼkʼa [{{fullurl:{{FULLPAGENAME}}|action=edit}} gaktirinen]</span>.',
-'previewnote'                      => "'''Aya, xvala, \"Evvelişen i3ʼkʼedi\" fonkʼsioni ren do oktirobape-skani kʼayitʼi var ixvenu çkva!'''",
-'editing'                          => '"$1" butʼkʼa iktirinen a3ʼi',
-'editingsection'                   => '"$1" butʼkʼas burme iktirinen',
-'copyrightwarning'                 => "'''Mu iqʼven kʼun3xi:''' {{SITENAME}} sitʼeşa na ixvenu mteli meşvelape <i>$2</i>
+'previewnote' => "'''Aya, xvala, \"Evvelişen i3ʼkʼedi\" fonkʼsioni ren do oktirobape-skani kʼayitʼi var ixvenu çkva!'''",
+'editing' => '"$1" butʼkʼa iktirinen a3ʼi',
+'editingsection' => '"$1" butʼkʼas burme iktirinen',
+'copyrightwarning' => "'''Mu iqʼven kʼun3xi:''' {{SITENAME}} sitʼeşa na ixvenu mteli meşvelape <i>$2</i>
 paktʼiş doloxe ren (detayepe şeni $1's o3ʼkʼedi).
 Na qʼvi meşvelaşa başka makʼaturepeşkʼelen pʼatʼi mutxanepe ixvenen varna xemoşletinerot do uoçodinurot başka svapeşa niçinen, aya kʼabuli qʼvi varna am sitʼe şeni mutu mo ikip!<br />
 Edo amuş metʼi, ak mxuciş meçamu ginonna, meşvelape ti-skani kʼala oçʼaruşi re, varna ofi3ialurişa gon3ʼkʼimeri na ren ar kʼaynağişen (odudeşen) varna başka oxoşkveri kʼaynağepeşen (odudepeşen) na ezdi kʼabuli oxvenuşi re.<br />
-'''<center>DOXMELİ HAKʼEPETE NA İŞİNAXENAN XANDAPE AK MO UKʼATEPT!</center>'''",
-'templatesused'                    => 'Am butʼkʼas na ixmarinen {{PLURAL:$1|şabloni|şablonepe}}:',
-'templatesusedpreview'             => 'Am "Evvelişen i3ʼkʼedi" fonkʼsionis na ixmarinen {{PLURAL:$1|şabloni|şablonepe}}:',
-'template-protected'               => '(oçvu)',
-'template-semiprotected'           => '(gverd-oçvu)',
-'hiddencategories'                 => 'Am butʼkʼa {{PLURAL:$1|1 şinaxeri kʼatʼegori|$1 şinaxeri kʼatʼegori}}şi ren:',
+'''DOXMELİ HAKʼEPETE NA İŞİNAXENAN XANDAPE AK MO UKʼATEPT!'''",
+'templatesused' => 'Am butʼkʼas na ixmarinen {{PLURAL:$1|şabloni|şablonepe}}:',
+'templatesusedpreview' => 'Am "Evvelişen i3ʼkʼedi" fonkʼsionis na ixmarinen {{PLURAL:$1|şabloni|şablonepe}}:',
+'template-protected' => '(oçvu)',
+'template-semiprotected' => '(gverd-oçvu)',
+'hiddencategories' => 'Am butʼkʼa {{PLURAL:$1|1 şinaxeri kʼatʼegori|$1 şinaxeri kʼatʼegori}}şi ren:',
 'permissionserrorstext-withaction' => 'Tude na çʼars {{PLURAL:$1|sebebi|sebebepe}} na rtʼu şeni $2 yetʼkʼi var giğun:',
 
 # History pages
-'viewpagelogs'           => 'Am butʼkʼa şeni kʼayitʼepe ko3ʼiri',
-'currentrev-asof'        => '$1 itibariten butʼkʼaşi a3ʼineri xali.',
-'revisionasof'           => 'Butʼkʼaşi $1 tarixis xali muşi',
-'previousrevision'       => '← Mcveşi xali muşi',
-'nextrevision'           => 'Ağani xali-muşi →',
-'currentrevisionlink'    => 'İrişen ağne xali-muşi ko3ʼiri',
-'cur'                    => 'farkʼi',
-'last'                   => 'çodina',
-'histlegend'             => 'Farkʼiş 3xuna: o3xunu şeni na ginon 2 versiyoniş na go3ʼadgin dairepeşa gebaz*gi, do ukvule entʼerişa gebaz*gi varna butʼkʼaşi tude na dgin tʼuşişa gebaz*gi.<br />
+'viewpagelogs' => 'Am butʼkʼa şeni kʼayitʼepe ko3ʼiri',
+'currentrev-asof' => '$1 itibariten butʼkʼaşi a3ʼineri xali.',
+'revisionasof' => 'Butʼkʼaşi $1 tarixis xali muşi',
+'previousrevision' => '← Mcveşi xali muşi',
+'nextrevision' => 'Ağani xali-muşi →',
+'currentrevisionlink' => 'İrişen ağne xali-muşi ko3ʼiri',
+'cur' => 'farkʼi',
+'last' => 'çodina',
+'histlegend' => 'Farkʼiş 3xuna: o3xunu şeni na ginon 2 versiyoniş na go3ʼadgin dairepeşa gebaz*gi, do ukvule entʼerişa gebaz*gi varna butʼkʼaşi tude na dgin tʼuşişa gebaz*gi.<br />
 Oxo3ʼonapape: (a3ʼineri) = a3ʼineri versiyoni kʼala na ren farkʼi,
 (iptineri) = iptineri versiyoni kʼala na ren farkʼi, Çʼ = çʼitʼa oktiroba.',
 'history-fieldset-title' => 'Golaxteris o3ʼkʼedi',
-'histfirst'              => 'irişen mcveşi',
-'histlast'               => 'irişen ağani',
+'histfirst' => 'irişen mcveşi',
+'histlast' => 'irişen ağani',
 
 # Revision deletion
-'rev-delundel'          => 'ko3ʼiri/doşinaxi',
-'revdelete-radio-set'   => 'Ho',
+'rev-delundel' => 'ko3ʼiri/doşinaxi',
+'revdelete-radio-set' => 'Ho',
 'revdelete-radio-unset' => 'Var',
-'revdel-restore'        => 'Ozʼiramuşi doktiri',
+'revdel-restore' => 'Ozʼiramuşi doktiri',
 
 # Merge log
 'revertmerge' => 'Artikʼartişen okʼo3ʼkʼi',
 
 # Diffs
-'history-title'           => '"$1" butʼkʼaşi tarixi',
-'difference'              => '(Versiyonepeşi farkʼepe)',
-'lineno'                  => '$1. satʼiri:',
+'history-title' => '"$1" butʼkʼaşi tarixi',
+'lineno' => '$1. satʼiri:',
 'compareselectedversions' => 'Na goşiğen versiyonepe okʼo3ʼiri',
-'editundo'                => 'ukʼuni',
+'editundo' => 'ukʼuni',
 
 # Search results
-'searchresults'             => 'Ogoru sonucepe',
-'searchresults-title'       => '"$1" şeni ogoru sonucepe',
-'searchresulttext'          => '{{SITENAME}}-iş doloxe ogoru temas, mutxanepe oguru şeni [[{{MediaWiki:Helppage}}|{{int:help}}]] coxoni butʼkʼas o3ʼkʼedit.',
-'searchsubtitle'            => 'Si \'\'\'[[:$1]]\'\'\' şeni gori. ([[Special:Prefixindex/$1|"$1" kʼala na gyoçʼkʼaps mtel butʼkʼape]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"\' butʼkʼa muşişa kʼontʼaktʼi na ikips mtel butʼkʼape]])',
-'searchsubtitleinvalid'     => "'''$1''' şeni mgori",
-'notitlematches'            => 'Çkar svas var iz*irinu',
-'notextmatches'             => 'Çkar butʼkʼa var iz*irinu',
-'prevn'                     => 'ukʼuni {{PLURAL:$1|$1}}',
-'nextn'                     => 'mendi {{PLURAL:$1|$1}}',
-'viewprevnext'              => '($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 tkvala|$2 tkvala}})',
-'search-redirect'           => '(redirektʼi $1)',
-'search-section'            => '(burme $1)',
-'search-suggest'            => 'Aya çʼari-i: $1',
-'search-interwiki-caption'  => 'Cuma projepe',
-'search-interwiki-default'  => '$1 sonucepe:',
-'search-interwiki-more'     => '(çkva)',
-'search-mwsuggest-enabled'  => 'okʼvandupete',
+'searchresults' => 'Ogoru sonucepe',
+'searchresults-title' => '"$1" şeni ogoru sonucepe',
+'searchresulttext' => '{{SITENAME}}-iş doloxe ogoru temas, mutxanepe oguru şeni [[{{MediaWiki:Helppage}}|{{int:help}}]] coxoni butʼkʼas o3ʼkʼedit.',
+'searchsubtitle' => 'Si \'\'\'[[:$1]]\'\'\' şeni gori. ([[Special:Prefixindex/$1|"$1" kʼala na gyoçʼkʼaps mtel butʼkʼape]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"\' butʼkʼa muşişa kʼontʼaktʼi na ikips mtel butʼkʼape]])',
+'searchsubtitleinvalid' => "'''$1''' şeni mgori",
+'notitlematches' => 'Çkar svas var iz*irinu',
+'notextmatches' => 'Çkar butʼkʼa var iz*irinu',
+'prevn' => 'ukʼuni {{PLURAL:$1|$1}}',
+'nextn' => 'mendi {{PLURAL:$1|$1}}',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)',
+'search-result-size' => '$1 ({{PLURAL:$2|1 tkvala|$2 tkvala}})',
+'search-redirect' => '(redirektʼi $1)',
+'search-section' => '(burme $1)',
+'search-suggest' => 'Aya çʼari-i: $1',
+'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',
-'nonefound'                 => "'''Notʼi''': Xvala, namtini svacoxope maartani oqʼopinot igoren.
+'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.",
-'powersearch'               => 'Mordineri ogoru',
-'powersearch-legend'        => 'Mordineri ogoru',
-'powersearch-ns'            => 'Svacoxo-s mgori:',
-'powersearch-redir'         => 'Redirektʼepe ilistʼeli',
-'powersearch-field'         => 'Mgori:',
+'powersearch' => 'Mordineri ogoru',
+'powersearch-legend' => 'Mordineri ogoru',
+'powersearch-ns' => 'Svacoxo-s mgori:',
+'powersearch-redir' => 'Redirektʼepe ilistʼeli',
+'powersearch-field' => 'Mgori:',
 
 # Preferences page
-'preferences'               => 'Tercihepe',
-'mypreferences'             => 'Çkimi tercihepe',
-'searchresultshead'         => 'Mgori',
-'timezoneregion-africa'     => "Afrik'a",
+'preferences' => 'Tercihepe',
+'mypreferences' => 'Çkimi tercihepe',
+'searchresultshead' => 'Mgori',
+'timezoneregion-africa' => "Afrik'a",
 'timezoneregion-antarctica' => "Antartik'a",
-'timezoneregion-asia'       => 'Asya',
-'timezoneregion-europe'     => "Avrop'a",
-'youremail'                 => 'E-maili:',
-'yourrealname'              => 'Coxo skani:',
-'yourlanguage'              => 'Nena skani:',
-'gender-male'               => "Biç'i",
-'gender-female'             => "Bozo (K'ulani)",
-'email'                     => 'E-maili',
+'timezoneregion-asia' => 'Asya',
+'timezoneregion-europe' => "Avrop'a",
+'youremail' => 'E-maili:',
+'yourrealname' => 'Coxo skani:',
+'yourlanguage' => 'Nena skani:',
+'gender-male' => "Biç'i",
+'gender-female' => "Bozo (K'ulani)",
+'email' => 'E-maili',
 
 # Groups
-'group'       => 'Grubi:',
+'group' => 'Grubi:',
 'group-sysop' => 'Adminepe',
 
 'grouppage-sysop' => '{{ns:project}}:Adminepe',
@@ -360,99 +360,99 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 'right-delete' => 'Am sayfape jili',
 
 # User rights log
-'rightslog'  => 'Maxmareş hakʼişi kʼayitʼepe',
+'rightslog' => 'Maxmareş hakʼişi kʼayitʼepe',
 'rightsnone' => '(Va ren)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read'   => "am sayfa ik'itxi",
-'action-edit'   => 'am butʼkʼa oktiruşa',
+'action-read' => "am sayfa ik'itxi",
+'action-edit' => 'am butʼkʼa oktiruşa',
 'action-delete' => 'am sayfa dokosi',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|oktiroba|oktiroba}}',
-'recentchanges'                  => 'Çodinaşi oktirobape',
-'recentchanges-legend'           => 'Çodinaşi oktirobape tercihepe',
+'nchanges' => '$1 {{PLURAL:$1|oktiroba|oktiroba}}',
+'recentchanges' => 'Çodinaşi oktirobape',
+'recentchanges-legend' => 'Çodinaşi oktirobape tercihepe',
 'recentchanges-feed-description' => 'Am feedis vikiʼs na ixvenu irişen sonni oktirobape gatxozi.',
-'rcnote'                         => "$4 tarixi do saatʼi $5 şakis, çodinaşi {{PLURAL:$2|1 ndğas|'''$2''' ndğas}} na ixvenu, {{PLURAL:$1|'''1''' oktiroba|'''$1''' oktiroba}}, tude ren.",
-'rclistfrom'                     => '$1 tarixişen doni na ixvenu oktirobape ko3ʼiri',
-'rcshowhideminor'                => 'çʼitʼa oktirobape $1',
-'rcshowhidebots'                 => 'botʼepe $1',
-'rcshowhideliu'                  => 'meçʼareri maxmarepe $1',
-'rcshowhideanons'                => 'anonimuri maxmarepe $1',
-'rcshowhidemine'                 => 'çkimi oktirobape $1',
-'rclinks'                        => 'Çodinaşi $2 ndğas na ixvenu çodinaşi $1 oktiroba ko3ʼiri;<br /> $3',
-'diff'                           => 'farkʼi',
-'hist'                           => 'tarixi',
-'hide'                           => 'Doşinaxi',
-'show'                           => 'Ko3ʼiri',
-'minoreditletter'                => 'çʼ',
-'newpageletter'                  => 'A',
-'boteditletter'                  => 'b',
-'rc_categories_any'              => 'Çkar',
-'rc-enhanced-expand'             => 'Detayepe ko3ʼiri (JavaScript-i unon)',
-'rc-enhanced-hide'               => 'Detayepe doşinaxi',
+'rcnote' => "$4 tarixi do saatʼi $5 şakis, çodinaşi {{PLURAL:$2|1 ndğas|'''$2''' ndğas}} na ixvenu, {{PLURAL:$1|'''1''' oktiroba|'''$1''' oktiroba}}, tude ren.",
+'rclistfrom' => '$1 tarixişen doni na ixvenu oktirobape ko3ʼiri',
+'rcshowhideminor' => 'çʼitʼa oktirobape $1',
+'rcshowhidebots' => 'botʼepe $1',
+'rcshowhideliu' => 'meçʼareri maxmarepe $1',
+'rcshowhideanons' => 'anonimuri maxmarepe $1',
+'rcshowhidemine' => 'çkimi oktirobape $1',
+'rclinks' => 'Çodinaşi $2 ndğas na ixvenu çodinaşi $1 oktiroba ko3ʼiri;<br /> $3',
+'diff' => 'farkʼi',
+'hist' => 'tarixi',
+'hide' => 'Doşinaxi',
+'show' => 'Ko3ʼiri',
+'minoreditletter' => 'çʼ',
+'newpageletter' => 'A',
+'boteditletter' => 'b',
+'rc_categories_any' => 'Çkar',
+'rc-enhanced-expand' => 'Detayepe ko3ʼiri (JavaScript-i unon)',
+'rc-enhanced-hide' => 'Detayepe doşinaxi',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Alakʼali na renan oktirobape',
-'recentchangeslinked-title'   => '"$1" kʼala alakʼali na renan oktirobape',
+'recentchangeslinked' => 'Alakʼali na renan oktirobape',
+'recentchangeslinked-title' => '"$1" kʼala alakʼali na renan oktirobape',
 'recentchangeslinked-summary' => "Tude na çʼars listʼe, kʼiti na noğiru butʼkʼaşa (varna kʼiti na noğiru kʼatʼegorişi makʼaturepeşa) kʼontʼaktʼi na ikips butʼkʼapes na ixvenu çodinaşi oktirobapeşi listʼe ren.
 [[Special:Watchlist|Gotxozu na ginon butʼkʼapeşi listʼes]] na renan butʼkʼape '''mçxu''' nçʼaraten niçʼaru.",
-'recentchangeslinked-page'    => 'Butʼkʼaşi coxo:',
-'recentchangeslinked-to'      => 'Na niçinen butʼkʼa yeine na niçinen butʼkʼaşa kʼontʼaktʼi meçameri na renan butʼkʼape ko3ʼiri',
+'recentchangeslinked-page' => 'Butʼkʼaşi coxo:',
+'recentchangeslinked-to' => 'Na niçinen butʼkʼa yeine na niçinen butʼkʼaşa kʼontʼaktʼi meçameri na renan butʼkʼape ko3ʼiri',
 
 # Upload
-'upload'        => 'Dosya doloxe kamaxvi',
+'upload' => 'Dosya doloxe kamaxvi',
 'uploadlogpage' => 'Dosya oncğonu kʼayitʼepe',
 'uploadedimage' => 'Siteşa na incğonen resimi: "[[$1]]"',
 
 # File description page
-'filehist'                  => 'Dosyaşi tarixi',
-'filehist-help'             => 'Dosyaşi tarixi oz*iru şeni Ndğa/Ora burme-muşis na renan tarixepes o3ʼkʼedi.',
-'filehist-deleteall'        => 'mteli jili',
-'filehist-deleteone'        => 'jili',
-'filehist-current'          => 'A3ʼineri',
-'filehist-datetime'         => 'Dğa/Ora',
-'filehist-thumb'            => 'Mçʼitʼa sureti',
-'filehist-thumbtext'        => '$1 tarixis na iz*iren versiyonişi mçʼitʼa na ren xali',
-'filehist-user'             => 'Maxmare',
-'filehist-dimensions'       => 'Ebatʼepe',
-'filehist-comment'          => 'Kʼommentʼi',
-'imagelinks'                => 'Dosyaşi kʼontaktʼepe',
-'linkstoimage'              => 'Am oz*ira-dosyaşa kʼontʼaktʼi na ikips {{PLURAL:$1|butʼkʼa|$1 butʼkʼa}}:',
-'sharedupload'              => 'Am dosya $1-şen moxtu do belkim majurani pʼrojepesti ixmarinen.',
+'filehist' => 'Dosyaşi tarixi',
+'filehist-help' => 'Dosyaşi tarixi oz*iru şeni Ndğa/Ora burme-muşis na renan tarixepes o3ʼkʼedi.',
+'filehist-deleteall' => 'mteli jili',
+'filehist-deleteone' => 'jili',
+'filehist-current' => 'A3ʼineri',
+'filehist-datetime' => 'Dğa/Ora',
+'filehist-thumb' => 'Mçʼitʼa sureti',
+'filehist-thumbtext' => '$1 tarixis na iz*iren versiyonişi mçʼitʼa na ren xali',
+'filehist-user' => 'Maxmare',
+'filehist-dimensions' => 'Ebatʼepe',
+'filehist-comment' => 'Kʼommentʼi',
+'imagelinks' => 'Dosyaşi kʼontaktʼepe',
+'linkstoimage' => 'Am oz*ira-dosyaşa kʼontʼaktʼi na ikips {{PLURAL:$1|butʼkʼa|$1 butʼkʼa}}:',
+'sharedupload' => 'Am dosya $1-şen moxtu do belkim majurani pʼrojepesti ixmarinen.',
 'uploadnewversion-linktext' => 'Dosyaşi ağani versiyoni doloxe kamaxvi',
 
 # Statistics
 'statistics' => 'İstatistʼiğepe',
 
-'brokenredirects-edit'   => 'doktiri',
+'brokenredirects-edit' => 'doktiri',
 'brokenredirects-delete' => 'jili',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|byte|byte}}',
-'nmembers'      => '{{PLURAL:$1|makʼature|makʼaturepe}}',
-'prefixindex'   => 'Pʼrefiksi kʼala mteli butʼkʼape',
-'newpages'      => 'Ağani butʼkʼape',
-'move'          => 'Komendiği',
-'movethispage'  => 'Butʼkʼa zdi',
+'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
+'nmembers' => '{{PLURAL:$1|makʼature|makʼaturepe}}',
+'prefixindex' => 'Pʼrefiksi kʼala mteli butʼkʼape',
+'newpages' => 'Ağani butʼkʼape',
+'move' => 'Komendiği',
+'movethispage' => 'Butʼkʼa zdi',
 'pager-newer-n' => '{{PLURAL:$1|çkva ağani 1|çkva ağani $1}}',
 'pager-older-n' => '{{PLURAL:$1|çkva mcveşi 1|çkva mcveşi $1}}',
 
 # Book sources
-'booksources'               => 'Odude svarape',
+'booksources' => 'Odude svarape',
 'booksources-search-legend' => 'Svaraş odudepe mgori',
-'booksources-go'            => 'İgzali',
+'booksources-go' => 'İgzali',
 
 # Special:Log
 'log' => 'Kʼayitʼepe',
 
 # Special:AllPages
-'allpages'       => 'Mteli butʼkʼape',
+'allpages' => 'Mteli butʼkʼape',
 'alphaindexline' => '$1 butʼkʼa muşişen $2 butʼkʼa muşişa',
-'prevpage'       => 'İptineri butʼkʼa ($1)',
-'allpagesfrom'   => 'Olistʼeluşa na geiçʼkʼasen harfepe:',
-'allpagesto'     => 'Amu kʼala na içodu butʼkʼape ko3ʼiri:',
-'allarticles'    => 'Mteli butʼkʼape',
+'prevpage' => 'İptineri butʼkʼa ($1)',
+'allpagesfrom' => 'Olistʼeluşa na geiçʼkʼasen harfepe:',
+'allpagesto' => 'Amu kʼala na içodu butʼkʼape ko3ʼiri:',
+'allarticles' => 'Mteli butʼkʼape',
 'allpagessubmit' => 'İgzali',
 
 # Special:LinkSearch
@@ -468,122 +468,122 @@ Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (o
 'emailuser' => 'Maxmares e-maili oncğoni',
 
 # Watchlist
-'watchlist'         => 'çkimi gotxozu listʼe',
-'mywatchlist'       => 'Çkimi gotxozu listʼe',
-'addedwatchtext'    => '"<nowiki>[[:$1]]</nowiki>" coxoni butʼkʼa [[Special:Watchlist|gotxozu listʼes]] ikʼayitʼinu.
+'watchlist' => 'çkimi gotxozu listʼe',
+'mywatchlist' => 'Çkimi gotxozu listʼe',
+'addedwatchtext' => '"<nowiki>[[:$1]]</nowiki>" coxoni butʼkʼa [[Special:Watchlist|gotxozu listʼes]] ikʼayitʼinu.
 
 Na moxtasen oras, am butʼkʼaşa do am butʼkʼa kʼala alakʼali na ren oğarğaluşi butʼkʼaşa na ixvenasen oktirobape ak ilistʼelinasen.
 
 Dido kʼai o3xunu şeni doloxe muşis [[Special:RecentChanges|çodinaşi oktirobapeşi listʼe]] stʼatʼias dolom3ʼkʼupineri harfepete ilistʼelinasenan.
 
 Butʼkʼai gotxozu listʼeşen ojilu şeni "gotxozu naşkʼvi" linkʼişa gebaz*git.',
-'removedwatchtext'  => '"[[:$1]]" but\'k\'a, [[Special:Watchlist|skani gotxozu list\'eşen]] nijilu.',
-'watch'             => 'Amus gatxozi',
-'watchthispage'     => 'Butʼkʼa gatxozi',
-'unwatch'           => 'Gotxozu naşkʼvi',
+'removedwatchtext' => '"[[:$1]]" but\'k\'a, [[Special:Watchlist|skani gotxozu list\'eşen]] nijilu.',
+'watch' => 'Amus gatxozi',
+'watchthispage' => 'Butʼkʼa gatxozi',
+'unwatch' => 'Gotxozu naşkʼvi',
 'watchlist-details' => '{{PLURAL:$1|$1 butʼkʼa|$1 butʼkʼa}}, skani gotxozu listʼes ren, ama oğarğaluşi butʼkʼapes va ren',
-'wlshowlast'        => 'Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri $3',
+'wlshowlast' => 'Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri $3',
 'watchlist-options' => 'Gotxozu listʼeşi tercihepe',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'i3ʼkʼedinen...',
+'watching' => 'i3ʼkʼedinen...',
 'unwatching' => 'var i3ʼkʼedinen...',
 
 # Delete
-'deletepage'            => 'Butʼkʼa jili',
-'confirmdeletetext'     => 'Aşoten am butʼkʼa varna dosya, mteli golaxteri kʼayitʼepe kʼala datʼabeizişen nijilen.
+'deletepage' => 'Butʼkʼa jili',
+'confirmdeletetext' => 'Aşoten am butʼkʼa varna dosya, mteli golaxteri kʼayitʼepe kʼala datʼabeizişen nijilen.
 Am dulyaşen na yeçkindasen zararepe giçkinna do am dulya [[{{MediaWiki:Policy-url}}|Ojiluşi kʼaidepe]] şeni mtini renya isimadep na, am dulya doqʼvi.',
-'actioncomplete'        => 'Aksiyoni içodinu.',
-'deletedtext'           => '"$1" nijilu.
+'actioncomplete' => 'Aksiyoni içodinu.',
+'deletedtext' => '"$1" nijilu.
 Xolosi oras jileri na renanpe oz*iru şeni: $2.',
-'dellogpage'            => 'Ojiluşi kʼayitʼepe',
-'deletecomment'         => 'Muşen:',
-'deleteotherreason'     => 'Majurani/ilave sebebi:',
+'dellogpage' => 'Ojiluşi kʼayitʼepe',
+'deletecomment' => 'Muşen:',
+'deleteotherreason' => 'Majurani/ilave sebebi:',
 'deletereasonotherlist' => 'Majurani sebebepe',
 
 # Rollback
 'rollbacklink' => 'mcveşi xali muşişa igzali',
 
 # Protect
-'protectlogpage'              => 'Oçvaluşi kʼayitʼepe',
-'protectedarticle'            => '"[[$1]]" içven a3ʼi',
-'modifiedarticleprotection'   => '"[[$1]]" şeni oçvaluşi derece iktirinu',
-'protectcomment'              => 'Sebebi:',
-'protectexpiry'               => 'Am tarixis içoden:',
-'protect_expiry_invalid'      => 'Am tarixis var içoden, mtini va ren.',
-'protect_expiry_old'          => 'Golaxteris soni oxmaruşi ora.',
-'protect-text'                => "'''$1''' butʼkʼaşi oçvaluşi sinori akolen gazʼiren do gaktirinen.",
-'protect-locked-access'       => "Butʼkʼaşi oçvalu sinorepe oktiru şeni maxmare-hesabi skanis yetʼkʼi var uğun.
+'protectlogpage' => 'Oçvaluşi kʼayitʼepe',
+'protectedarticle' => '"[[$1]]" içven a3ʼi',
+'modifiedarticleprotection' => '"[[$1]]" şeni oçvaluşi derece iktirinu',
+'protectcomment' => 'Sebebi:',
+'protectexpiry' => 'Am tarixis içoden:',
+'protect_expiry_invalid' => 'Am tarixis var içoden, mtini va ren.',
+'protect_expiry_old' => 'Golaxteris soni oxmaruşi ora.',
+'protect-text' => "'''$1''' butʼkʼaşi oçvaluşi sinori akolen gazʼiren do gaktirinen.",
+'protect-locked-access' => "Butʼkʼaşi oçvalu sinorepe oktiru şeni maxmare-hesabi skanis yetʼkʼi var uğun.
 '''$1''' butʼkʼaşi maartani tercihepe antepe renan:",
-'protect-cascadeon'           => 'Am butʼkʼa, "kʼademoni oçvuşi sistemi" aktʼifi na ixvenu do tude na ren {{PLURAL:$1|$1 butʼkʼas|$1 butʼkʼas}} na ixmarinetʼu şeni a3ʼi içven.
+'protect-cascadeon' => 'Am butʼkʼa, "kʼademoni oçvuşi sistemi" aktʼifi na ixvenu do tude na ren {{PLURAL:$1|$1 butʼkʼas|$1 butʼkʼas}} na ixmarinetʼu şeni a3ʼi içven.
 Am butʼkʼaşi oçvuşi sinori gaktirinen; ama am oktiroba, kʼademoni oçvaluşa mutu va ikips.',
-'protect-default'             => 'Mteli maxmarepes izni komeçi',
-'protect-fallback'            => '"$1" izni unon',
+'protect-default' => 'Mteli maxmarepes izni komeçi',
+'protect-fallback' => '"$1" izni unon',
 'protect-level-autoconfirmed' => 'Ağani do kʼayitʼoni na va renan kʼoçepes bloği qʼvi',
-'protect-level-sysop'         => 'Xvala, Adminepe şeni',
-'protect-summary-cascade'     => 'kʼademoni',
-'protect-expiring'            => 'çodinaşi tarixi $1 (UTC)',
-'protect-cascade'             => 'Am butʼkʼas na ixmarinen mteli butʼkʼape içvi (kʼademoni oçvalu)',
-'protect-cantedit'            => 'Am butʼkʼaşi oçvaluşi sinori va gaktirinen, çunki yetkʼi var giğun.',
-'restriction-type'            => 'İzini:',
-'restriction-level'           => 'Om3ikanuşi sinori:',
+'protect-level-sysop' => 'Xvala, Adminepe şeni',
+'protect-summary-cascade' => 'kʼademoni',
+'protect-expiring' => 'çodinaşi tarixi $1 (UTC)',
+'protect-cascade' => 'Am butʼkʼas na ixmarinen mteli butʼkʼape içvi (kʼademoni oçvalu)',
+'protect-cantedit' => 'Am butʼkʼaşi oçvaluşi sinori va gaktirinen, çunki yetkʼi var giğun.',
+'restriction-type' => 'İzini:',
+'restriction-level' => 'Om3ikanuşi sinori:',
 
 # Undelete
-'undeletelink'              => 'i3ʼkʼedi/komoiği',
-'undelete-search-submit'    => 'Mgori',
+'undeletelink' => 'i3ʼkʼedi/komoiği',
+'undelete-search-submit' => 'Mgori',
 'undelete-show-file-submit' => 'Ho',
 
 # Namespace form on various pages
-'namespace'      => 'Svacoxo:',
-'invert'         => '3xuneri na var renanpe ko3ʼiri',
+'namespace' => 'Svacoxo:',
+'invert' => '3xuneri na var renanpe ko3ʼiri',
 'blanknamespace' => '(Dudi)',
 
 # Contributions
-'contributions'       => 'Maxmareşi meşvelape',
+'contributions' => 'Maxmareşi meşvelape',
 'contributions-title' => '$1 şeni maxmareş meşvelape',
-'mycontris'           => 'Çkimi meşvelape',
-'contribsub2'         => '$1 ($2)',
-'uctop'               => '(dudi)',
-'month'               => 'Tuta:',
-'year'                => '3ʼana:',
+'mycontris' => 'Çkimi meşvelape',
+'contribsub2' => '$1 ($2)',
+'uctop' => '(dudi)',
+'month' => 'Tuta:',
+'year' => '3ʼana:',
 
-'sp-contributions-newbies'  => 'Xvala ağani maxmarepeşi meşvelape ko3ʼiri',
+'sp-contributions-newbies' => 'Xvala ağani maxmarepeşi meşvelape ko3ʼiri',
 'sp-contributions-blocklog' => 'Bloğiş kʼayitʼi',
-'sp-contributions-search'   => 'Meşvelape mgori',
+'sp-contributions-search' => 'Meşvelape mgori',
 'sp-contributions-username' => 'IP varna maxmare:',
-'sp-contributions-submit'   => 'Mgori',
+'sp-contributions-submit' => 'Mgori',
 
 # What links here
-'whatlinkshere'            => 'Butʼkʼaşa na ixvenu kʼontʼaktʼepe',
-'whatlinkshere-title'      => '"$1" maddeşa kʼontʼaktʼi na ikips butʼkʼape',
-'whatlinkshere-page'       => 'Butʼkʼa:',
-'linkshere'                => "'''[[:$1]]''' butʼkʼaşa kʼontʼaktʼi na ikips butʼkʼape:",
-'isredirect'               => 'redirektʼiş butʼkʼa',
-'istemplate'               => 'okʼatu',
-'isimage'                  => 'dosyaşi kʼontʼaktʼi',
-'whatlinkshere-prev'       => '{{PLURAL:$1|ukʼuni|ukʼuni $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|mendi|mendi $1}}',
-'whatlinkshere-links'      => '← kʼontaktʼepe',
+'whatlinkshere' => 'Butʼkʼaşa na ixvenu kʼontʼaktʼepe',
+'whatlinkshere-title' => '"$1" maddeşa kʼontʼaktʼi na ikips butʼkʼape',
+'whatlinkshere-page' => 'Butʼkʼa:',
+'linkshere' => "'''[[:$1]]''' butʼkʼaşa kʼontʼaktʼi na ikips butʼkʼape:",
+'isredirect' => 'redirektʼiş butʼkʼa',
+'istemplate' => 'okʼatu',
+'isimage' => 'dosyaşi kʼontʼaktʼi',
+'whatlinkshere-prev' => '{{PLURAL:$1|ukʼuni|ukʼuni $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|mendi|mendi $1}}',
+'whatlinkshere-links' => '← kʼontaktʼepe',
 'whatlinkshere-hideredirs' => 'redirektʼepe $1',
-'whatlinkshere-hidetrans'  => 'Çʼapʼrazi mem3xverepe $1',
-'whatlinkshere-hidelinks'  => 'kʼontʼaktʼepe $1',
-'whatlinkshere-filters'    => 'Filitʼrepe',
+'whatlinkshere-hidetrans' => 'Çʼapʼrazi mem3xverepe $1',
+'whatlinkshere-hidelinks' => 'kʼontʼaktʼepe $1',
+'whatlinkshere-filters' => 'Filitʼrepe',
 
 # 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',
-'blocklink'                => 'bloği qʼvi',
-'unblocklink'              => 'bloği kezdi',
-'change-blocklink'         => 'bloği doktiri',
-'contribslink'             => 'Meşvelape',
-'blocklogpage'             => 'Bloğiş kʼayitʼepe',
-'blocklogentry'            => ', [[$1]] maxmare kododginu, dodginuşi ora: $2 $3',
-'unblocklogentry'          => '$1 maxmareşi bloği kaizdinu',
+'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',
+'blocklink' => 'bloği qʼvi',
+'unblocklink' => 'bloği kezdi',
+'change-blocklink' => 'bloği doktiri',
+'contribslink' => 'Meşvelape',
+'blocklogpage' => 'Bloğiş kʼayitʼepe',
+'blocklogentry' => ', [[$1]] maxmare kododginu, dodginuşi ora: $2 $3',
+'unblocklogentry' => '$1 maxmareşi bloği kaizdinu',
 'block-log-flags-nocreate' => 'hesabi okʼidu geinkʼilu',
 
 # Move page
-'movepagetext'     => "Tude na ren formi oxmarute butʼkʼaşi coxo iktirinen. Edo xolo mteli golaxteri kʼayitʼepeti ağani coxos itiren.
+'movepagetext' => "Tude na ren formi oxmarute butʼkʼaşi coxo iktirinen. Edo xolo mteli golaxteri kʼayitʼepeti ağani coxos itiren.
 Mcveşi coxo, ağani coxoşa redirektʼi xali aqʼven.
 Otomatikurot mcveşi stʼatʼiaşa na ixvenen redirektʼepe gaktirinen.
 Am dulya otomatikurot oxvenu va ginonna [[Special:DoubleRedirects|tʼkʼubi]] varna [[Special:BrokenRedirects|tʼaxeri]] na renan redirektʼepe ti-skani kʼala oktiruşi re. Na qʼvare am oktirobate mteli kʼontʼaktʼepe dido kʼai oçalişu ren, amuşen si sorumli re.
@@ -598,20 +598,20 @@ Am ktira, populeri na ren a butʼkʼa şeni pʼatʼi mutxanepe axvenen; mu iqʼv
 *Tude na ren çʼitʼa boksi va ixmarit na.
 
 Am situa3yonepes, butʼkʼa skanişkʼelen otiruşi ren.",
-'movearticle'      => 'Mcveşi coxo:',
-'newtitle'         => 'Ağani coxo:',
-'move-watch'       => 'Am butʼkʼa gatxozi',
-'movepagebtn'      => 'Coxo-muşi doktiri',
-'pagemovedsub'     => 'Coxo iktirinu.',
-'movepage-moved'   => '\'\'\'"$1",  "$2" butʼkʼa muşişa itirinu\'\'\'',
-'articleexists'    => 'Am coxos ar butʼkʼa koren varna na çʼari coxo mtini va ren.
+'movearticle' => 'Mcveşi coxo:',
+'newtitle' => 'Ağani coxo:',
+'move-watch' => 'Am butʼkʼa gatxozi',
+'movepagebtn' => 'Coxo-muşi doktiri',
+'pagemovedsub' => 'Coxo iktirinu.',
+'movepage-moved' => '\'\'\'"$1",  "$2" butʼkʼa muşişa itirinu\'\'\'',
+'articleexists' => 'Am coxos ar butʼkʼa koren varna na çʼari coxo mtini va ren.
 Mu iqʼven başka coxo doçʼari.',
-'talkexists'       => "'''Butʼkʼa dido kʼai itirinu, mara oğarğaluşi butʼkʼa var itirinu çunki na itirinasen coxos zate ar butʼkʼa rtʼu. Mu iqʼven butʼkʼaşi doloçʼareli nç'arape majurani butʼkʼaşa ti-skani kʼala itirini.'''",
-'movedto'          => 'itirinu:',
-'movetalk'         => 'Korenna, "oğarğaluşi" butʼkʼa muşiti mendiği.',
-'movelogpage'      => 'Coxo oktirobaşi kʼayitʼepe',
-'movereason'       => 'Muşen:',
-'revertmove'       => 'komoiği',
+'talkexists' => "'''Butʼkʼa dido kʼai itirinu, mara oğarğaluşi butʼkʼa var itirinu çunki na itirinasen coxos zate ar butʼkʼa rtʼu. Mu iqʼven butʼkʼaşi doloçʼareli nç'arape majurani butʼkʼaşa ti-skani kʼala itirini.'''",
+'movedto' => 'itirinu:',
+'movetalk' => 'Korenna, "oğarğaluşi" butʼkʼa muşiti mendiği.',
+'movelogpage' => 'Coxo oktirobaşi kʼayitʼepe',
+'movereason' => 'Muşen:',
+'revertmove' => 'komoiği',
 
 # Export
 'export' => 'Butʼkʼa ikʼayitʼi',
@@ -620,68 +620,68 @@ Mu iqʼven başka coxo doçʼari.',
 'thumbnail-more' => 'Didi qʼvi',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Skani butʼkʼa',
-'tooltip-pt-mytalk'               => 'Mesajiş butʼkʼa',
-'tooltip-pt-preferences'          => 'Skani tercixepe',
-'tooltip-pt-watchlist'            => 'Gotxozu na minon butʼkʼape',
-'tooltip-pt-mycontris'            => 'Skani meşvelapeşi listʼe',
-'tooltip-pt-login'                => 'Ginon na sitʼeşa amaxti, mecburi va re',
-'tooltip-pt-logout'               => 'Siteşen Kogamaxti',
-'tooltip-ca-talk'                 => 'Butʼkʼaş doloxe na içʼaren çʼarape şeni mutxanepe mi3ʼvit',
-'tooltip-ca-edit'                 => 'Am butʼkʼa kodogaktiren. Mu iqʼven! ipti "Evvelişen i3ʼkʼedi" tʼuşi ixmari do na çʼari çʼara ikʼontʼroli, ukʼule ikʼayitʼi.',
-'tooltip-ca-addsection'           => 'Ağani burme dokʼidi.',
-'tooltip-ca-viewsource'           => 'Am butʼkʼa içven. Xvala odudeş kʼodi gaz*iren. Doloxe muşi va gaktirinen.',
-'tooltip-ca-history'              => 'Am butʼkʼaşi golaxteri versiyonepe',
-'tooltip-ca-protect'              => 'Am butʼkʼa içvi',
-'tooltip-ca-delete'               => 'Am sayfa jili',
-'tooltip-ca-move'                 => 'Butʼkʼaşi coxo doktiri',
-'tooltip-ca-watch'                => 'Am butʼkʼas gatxozi.',
-'tooltip-ca-unwatch'              => 'Skani gotxozu listʼeşen jili am butʼkʼa',
-'tooltip-search'                  => '{{SITENAME}}-iş doloxe mgori',
-'tooltip-search-go'               => 'Eger korenna, am coxos na uğun ar butʼkʼaşa idi',
-'tooltip-search-fulltext'         => 'Am nçʼara şeni butʼkʼape mgori',
-'tooltip-n-mainpage'              => 'Dudi butʼkʼaşa idi',
-'tooltip-n-mainpage-description'  => 'Dudi butʼkʼaşa idi',
-'tooltip-n-portal'                => 'Proje şeni, şeyepe so gaz*iren, mu gaxvenen',
-'tooltip-n-currentevents'         => 'Ağani oğodape şeni çodinaşi çkinape',
-'tooltip-n-recentchanges'         => 'Vikʼis na ixvenu sonni oktirobapeşi listʼe.',
-'tooltip-n-randompage'            => 'Na var giçkin a butʼkʼaşa idi.',
-'tooltip-n-help'                  => 'Meşvelaş yezdimu şeni',
-'tooltip-t-whatlinkshere'         => 'Am butʼkʼaşa kʼontʼaktʼi na ikips majurani vikʼiş butʼkʼapeşi listʼe',
-'tooltip-t-recentchangeslinked'   => 'Am butʼkʼaşa kʼontʼaktʼi na ikips butʼkʼapes, çodinaşi oktirobape',
-'tooltip-feed-rss'                => 'Am butʼkʼa şeni RSS-iş feedi',
-'tooltip-feed-atom'               => 'Am butʼkʼa şeni atʼom-iş feedi',
-'tooltip-t-contributions'         => 'Maxmareşi meşvela listʼe kozʼiri',
-'tooltip-t-emailuser'             => 'Maxmareşa e-maili oncğoni',
-'tooltip-t-upload'                => 'Dosyape doloxe kamaxvi',
-'tooltip-t-specialpages'          => 'Mteli doxmeli butʼkʼapeşi listʼe ko3ʼiri',
-'tooltip-t-print'                 => 'Am butʼkʼaşi kartʼalişa çʼareli na ren versiyoni',
-'tooltip-t-permalink'             => 'Am butʼkʼaşi am versiyoni muşis kʼarta ora kʼontʼaktʼi iqʼvi.',
-'tooltip-ca-nstab-main'           => 'Butʼkʼa ko3ʼiri',
-'tooltip-ca-nstab-user'           => 'Maxmareşi butʼkʼa ko3ʼiri',
-'tooltip-ca-nstab-special'        => 'Aya doxmeli butʼkʼa ren, emuşeni ak mutu va gaktirinen.',
-'tooltip-ca-nstab-project'        => 'Pʼrojeşi butʼkʼa ko3ʼiri',
-'tooltip-ca-nstab-image'          => 'Dosyaşi butʼkʼa ko3ʼiri',
-'tooltip-ca-nstab-template'       => 'Şabloni ko3ʼiri',
-'tooltip-ca-nstab-category'       => 'Kʼatʼegorişi butʼkʼa ko3ʼiri',
-'tooltip-minoredit'               => 'Aşoten "Çʼitʼa oktiroba" gaxvenen',
-'tooltip-save'                    => 'Oktirobape ikʼayitʼi',
-'tooltip-preview'                 => 'Evvelişen i3ʼkʼedi; ipti am fonkʼsioni ixmari, oktirobape kʼontʼroli qʼvi do ukʼule ikʼayitʼi!',
-'tooltip-diff'                    => 'Tekstʼişa na qʼvi oktirobape o3ʼiraps.',
+'tooltip-pt-userpage' => 'Skani butʼkʼa',
+'tooltip-pt-mytalk' => 'Mesajiş butʼkʼa',
+'tooltip-pt-preferences' => 'Skani tercixepe',
+'tooltip-pt-watchlist' => 'Gotxozu na minon butʼkʼape',
+'tooltip-pt-mycontris' => 'Skani meşvelapeşi listʼe',
+'tooltip-pt-login' => 'Ginon na sitʼeşa amaxti, mecburi va re',
+'tooltip-pt-logout' => 'Siteşen Kogamaxti',
+'tooltip-ca-talk' => 'Butʼkʼaş doloxe na içʼaren çʼarape şeni mutxanepe mi3ʼvit',
+'tooltip-ca-edit' => 'Am butʼkʼa kodogaktiren. Mu iqʼven! ipti "Evvelişen i3ʼkʼedi" tʼuşi ixmari do na çʼari çʼara ikʼontʼroli, ukʼule ikʼayitʼi.',
+'tooltip-ca-addsection' => 'Ağani burme dokʼidi.',
+'tooltip-ca-viewsource' => 'Am butʼkʼa içven. Xvala odudeş kʼodi gaz*iren. Doloxe muşi va gaktirinen.',
+'tooltip-ca-history' => 'Am butʼkʼaşi golaxteri versiyonepe',
+'tooltip-ca-protect' => 'Am butʼkʼa içvi',
+'tooltip-ca-delete' => 'Am sayfa jili',
+'tooltip-ca-move' => 'Butʼkʼaşi coxo doktiri',
+'tooltip-ca-watch' => 'Am butʼkʼas gatxozi.',
+'tooltip-ca-unwatch' => 'Skani gotxozu listʼeşen jili am butʼkʼa',
+'tooltip-search' => '{{SITENAME}}-iş doloxe mgori',
+'tooltip-search-go' => 'Eger korenna, am coxos na uğun ar butʼkʼaşa idi',
+'tooltip-search-fulltext' => 'Am nçʼara şeni butʼkʼape mgori',
+'tooltip-n-mainpage' => 'Dudi butʼkʼaşa idi',
+'tooltip-n-mainpage-description' => 'Dudi butʼkʼaşa idi',
+'tooltip-n-portal' => 'Proje şeni, şeyepe so gaz*iren, mu gaxvenen',
+'tooltip-n-currentevents' => 'Ağani oğodape şeni çodinaşi çkinape',
+'tooltip-n-recentchanges' => 'Vikʼis na ixvenu sonni oktirobapeşi listʼe.',
+'tooltip-n-randompage' => 'Na var giçkin a butʼkʼaşa idi.',
+'tooltip-n-help' => 'Meşvelaş yezdimu şeni',
+'tooltip-t-whatlinkshere' => 'Am butʼkʼaşa kʼontʼaktʼi na ikips majurani vikʼiş butʼkʼapeşi listʼe',
+'tooltip-t-recentchangeslinked' => 'Am butʼkʼaşa kʼontʼaktʼi na ikips butʼkʼapes, çodinaşi oktirobape',
+'tooltip-feed-rss' => 'Am butʼkʼa şeni RSS-iş feedi',
+'tooltip-feed-atom' => 'Am butʼkʼa şeni atʼom-iş feedi',
+'tooltip-t-contributions' => 'Maxmareşi meşvela listʼe kozʼiri',
+'tooltip-t-emailuser' => 'Maxmareşa e-maili oncğoni',
+'tooltip-t-upload' => 'Dosyape doloxe kamaxvi',
+'tooltip-t-specialpages' => 'Mteli doxmeli butʼkʼapeşi listʼe ko3ʼiri',
+'tooltip-t-print' => 'Am butʼkʼaşi kartʼalişa çʼareli na ren versiyoni',
+'tooltip-t-permalink' => 'Am butʼkʼaşi am versiyoni muşis kʼarta ora kʼontʼaktʼi iqʼvi.',
+'tooltip-ca-nstab-main' => 'Butʼkʼa ko3ʼiri',
+'tooltip-ca-nstab-user' => 'Maxmareşi butʼkʼa ko3ʼiri',
+'tooltip-ca-nstab-special' => 'Aya doxmeli butʼkʼa ren, emuşeni ak mutu va gaktirinen.',
+'tooltip-ca-nstab-project' => 'Pʼrojeşi butʼkʼa ko3ʼiri',
+'tooltip-ca-nstab-image' => 'Dosyaşi butʼkʼa ko3ʼiri',
+'tooltip-ca-nstab-template' => 'Şabloni ko3ʼiri',
+'tooltip-ca-nstab-category' => 'Kʼatʼegorişi butʼkʼa ko3ʼiri',
+'tooltip-minoredit' => 'Aşoten "Çʼitʼa oktiroba" gaxvenen',
+'tooltip-save' => 'Oktirobape ikʼayitʼi',
+'tooltip-preview' => 'Evvelişen i3ʼkʼedi; ipti am fonkʼsioni ixmari, oktirobape kʼontʼroli qʼvi do ukʼule ikʼayitʼi!',
+'tooltip-diff' => 'Tekstʼişa na qʼvi oktirobape o3ʼiraps.',
 'tooltip-compareselectedversions' => '3xuneri na ren jur versiyonişi oşkendas na renan farkʼepe ko3ʼiri.',
-'tooltip-watch'                   => 'Am butʼkʼa gatxozi',
-'tooltip-rollback'                => '"Ukʼuni" fonkʼsionik, ar gebaz*gute, am butʼkʼas na nuşvelu maxmareşi oktirobape ipʼtʼali ikips',
-'tooltip-undo'                    => '"Ukʼuni" am fonkʼsionik, oktirobape ipʼtʼali ikips do aşoten oktirobaşi formi, "Evvelişen i3ʼkʼedi" modis guin3ʼkʼen.
+'tooltip-watch' => 'Am butʼkʼa gatxozi',
+'tooltip-rollback' => '"Ukʼuni" fonkʼsionik, ar gebaz*gute, am butʼkʼas na nuşvelu maxmareşi oktirobape ipʼtʼali ikips',
+'tooltip-undo' => '"Ukʼuni" am fonkʼsionik, oktirobape ipʼtʼali ikips do aşoten oktirobaşi formi, "Evvelişen i3ʼkʼedi" modis guin3ʼkʼen.
 "Mkʼule nçʼarate" fonkʼsioni şeni ar sebebi okʼum3xus izni meçaps',
 
 # Browsing diffs
 'previousdiff' => '← İptineri versiyoni kʼala na ren farkʼi',
-'nextdiff'     => 'Ukʼaçxineri versiyoni kʼala na ren farkʼi →',
+'nextdiff' => 'Ukʼaçxineri versiyoni kʼala na ren farkʼi →',
 
 # Media information
 'file-info-size' => '$1 × $2 pikseli, dosyaşi didinoba: $3, MIME type: $4',
-'file-nohires'   => 'Çkva kʼai ozʼiramuşis na uğun versiyoni va ren.',
-'svg-long-desc'  => 'SVG dosya, coxoten $1 × $2 pʼikʼseli, dosyaşi didinoba: $3',
+'file-nohires' => 'Çkva kʼai ozʼiramuşis na uğun versiyoni va ren.',
+'svg-long-desc' => 'SVG dosya, coxoten $1 × $2 pʼikʼseli, dosyaşi didinoba: $3',
 'show-big-image' => 'Tam ozʼiramuşi',
 
 # Bad image list
@@ -692,11 +692,11 @@ Satʼirişi maartani kʼontʼaktʼi, pʼatʼi dosyaşa na ulun ar kʼontʼaktʼi
 Ukʼaçxe na mulunan kʼontʼaktʼepe istʼisna oqʼopinot kʼabuli ixvenen. Mesela: dosya, butʼkʼas, satʼiriş doloxe iz*iren.',
 
 # Metadata
-'metadata'          => 'Metadata',
-'metadata-help'     => 'Am dosyas, suretişi mangana varna mao3xoneşkʼelen kʼatineri na ren okʼum3vale çkinape koren. Eger dosyaşi originali xalişa modifiye na iqʼu na, namtini çkinape, ağani oktiroba şeni mcveşi doskideri iqʼopen.',
-'metadata-expand'   => 'Detayepe ko3ʼiri',
+'metadata' => 'Metadata',
+'metadata-help' => 'Am dosyas, suretişi mangana varna mao3xoneşkʼelen kʼatineri na ren okʼum3vale çkinape koren. Eger dosyaşi originali xalişa modifiye na iqʼu na, namtini çkinape, ağani oktiroba şeni mcveşi doskideri iqʼopen.',
+'metadata-expand' => 'Detayepe ko3ʼiri',
 'metadata-collapse' => 'Detayepe doşinaxi',
-'metadata-fields'   => 'Am butʼkʼas na ilistʼelinen EXIF metadataş burmepe, resimi ozʼiramuşi butʼkʼapes metadata tʼablo na ğuru oras ixmarinen. Majuranepeti maartani oqʼopinot işinaxasen.
+'metadata-fields' => 'Am butʼkʼas na ilistʼelinen EXIF metadataş burmepe, resimi ozʼiramuşi butʼkʼapes metadata tʼablo na ğuru oras ixmarinen. Majuranepeti maartani oqʼopinot işinaxasen.
 * make
 * model
 * datetimeoriginal
@@ -712,18 +712,18 @@ Ukʼaçxe na mulunan kʼontʼaktʼepe istʼisna oqʼopinot kʼabuli ixvenen. Mes
 * gpsaltitude',
 
 # External editor support
-'edit-externally'      => 'Dosyas, kʼompʼuteris na renan pʼrogramepe kʼala oktirobape doqʼvi.',
+'edit-externally' => 'Dosyas, kʼompʼuteris na renan pʼrogramepe kʼala oktirobape doqʼvi.',
 'edit-externally-help' => '(Dido çkina şeni metʼas na renan [//www.mediawiki.org/wiki/Manual:External_editors galeni xvenaş tercihepe] (İngilisuri) butʼkʼa muşis o3ʼkʼedit)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'mteli',
 'namespacesall' => 'mteli',
-'monthsall'     => 'mteli',
+'monthsall' => 'mteli',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Am tema kʼala alakʼali na renan oktirobape ko3ʼiri',
 'watchlisttools-edit' => 'Gotxozu listʼe koz*iri do doktiri',
-'watchlisttools-raw'  => 'Kʼobo gotxozu listʼe doktiri',
+'watchlisttools-raw' => 'Kʼobo gotxozu listʼe doktiri',
 
 # Special:SpecialPages
 'specialpages' => 'Doxmeli butʼkʼape',
index c357bbf..f4abaed 100644 (file)
@@ -967,7 +967,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 
 # Diffs
 'history-title' => '"$1" क संशोधन इतिहास',
-'difference' => '(नव संशोधन सभक बीच अन्तर)',
 'difference-multipage' => '(पन्ना सभक बीचमे अन्तर)',
 'lineno' => 'पंक्त्ति $1:',
 'compareselectedversions' => 'चयन कएल संशोधन सभक तुलना करू',
index 858a052..435b6e4 100644 (file)
@@ -836,7 +836,6 @@ Gatèkna, angger nganggo pranala navigasi kuwe bakalan nge-reset kolom kiye.',
 
 # Diffs
 'history-title' => 'Sajarah revisi sekang "$1"',
-'difference' => '(Prabédan antarrevisi)',
 'difference-multipage' => '(Prabedan antarkaca)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Bandingna revisi kapilih',
index dc64723..a72dd64 100644 (file)
@@ -889,7 +889,6 @@ $3 макссь туфталсь - ''$2''",
 
 # Diffs
 'history-title' => '"$1"-нь верзиетнень историясна',
-'difference' => '(Явомась верзиетнень ёткова)',
 'difference-multipage' => 'Явомась лопаланготнень ёткова',
 'lineno' => 'Кикссь $1:',
 'compareselectedversions' => 'Путомс кочкаф верзиетнень ваксс',
index ca44e58..7ea25a6 100644 (file)
@@ -1149,7 +1149,6 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 
 # Diffs
 'history-title' => "Tantara ny endrik'i « $1 »",
-'difference' => "(Fahasamihafan'ny pejy)",
 'difference-multipage' => "(Fahasamihafan'ny pejy)",
 'lineno' => 'Andalana $1:',
 'compareselectedversions' => 'Ampitahao ireo version voafidy',
@@ -3170,6 +3169,8 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'htmlform-selectorother-other' => 'Hafa',
 
 # New logging system
+'logentry-delete-delete' => "nofafan'i $1 ny pejy $3",
+'logentry-suppress-delete' => "nofafan'i $1 ny pejy $3",
 'revdelete-restricted' => "nametraka fanerena ho an'ny mpandrindra",
 'revdelete-unrestricted' => "fanerena nesorina tamin'ny mpandrindra",
 'newuserlog-byemail' => 'tenimiafina nalefa imailaka',
index 0b40d7a..a4f0ea0 100644 (file)
@@ -483,7 +483,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '$1лан тӱрлык эртымгорно',
-'difference' => '(Тӱрлык-влакын ойыртемышт)',
 'lineno' => '$1 корно:',
 'compareselectedversions' => 'Ойырымо версий-влакым таҥастараш',
 'editundo' => 'чараш',
index ffbfdef..20a65ac 100644 (file)
@@ -771,7 +771,6 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 
 # Diffs
 'history-title' => 'Riwayat revisi dari "$1"',
-'difference' => '(Parbedaan antaro revisi)',
 'lineno' => 'Barih $1:',
 'compareselectedversions' => 'Bandingkan revisi pilihan',
 'editundo' => 'batalkan',
index 9acbc1b..adbe6af 100644 (file)
@@ -691,7 +691,8 @@ $1',
 Можеби некој друг веќе ја избришал.',
 'cannotdelete-title' => 'Не можам да ја избришам страницата „$1“',
 'badtitle' => 'Лош наслов',
-'badtitletext' => 'Бараниот наслов е грешен, празен или погрешно поврзан меѓујазичен или интер-вики наслов. Може да содржи еден или повеќе знаци што не можат да се користат во наслови.',
+'badtitletext' => 'Бараниот наслов е грешен, празен или неисправно поврзан меѓујазичен или меѓувики наслов. 
+Може да содржи недопуштени знаци.',
 'perfcached' => 'Следните податоци се кеширани и може да не се тековни. Во кешот {{PLURAL:$1|е достапен највеќе еден резултат|се достапни највеќе $1 резултати}}.',
 'perfcachedts' => 'Следните податоци се кеширани, последен пат подновени на $1. Во кешот {{PLURAL:$4|е достапен највеќе еден резултат|се достапни највеќе $4 резултати}}.',
 'querypage-no-updates' => 'Подновите на оваа страница моментално се оневозможени.
@@ -723,6 +724,8 @@ $2',
 'filereadonlyerror' => "Не можам да ја изменам податотеката „$1“ бидејќи складиштето „$2“ е во незаписен режим.
        
 Администраторот што ја заклучи го понуди следново образложение: „''$3''“.",
+'invalidtitle-knownnamespace' => 'Неважечки наслов со именски простор „$2“ и текст „$3“',
+'invalidtitle-unknownnamespace' => 'Неважечки наслов со именски простор бр. $1 и текст „$2“',
 
 # Virus scanner
 'virus-badscanner' => "Лоша поставка: непознат проверувач на вируси: ''$1''",
@@ -1122,8 +1125,14 @@ $2
 Таквите аргументи ќе бидат изземени при парсирањето.",
 'post-expand-template-argument-category' => 'Страници кои содржат изземени аргументи на шаблони',
 'parser-template-loop-warning' => 'Пронајдена е јамка во шаблонот: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Ограничувањето на рекурзивната длабочина надмината во шаблонот ($1)',
-'language-converter-depth-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)',
 
 # "Undo" feature
 'undo-success' => 'Уредувањето може да се откаже.
@@ -1298,7 +1307,8 @@ $1",
 
 # Diffs
 'history-title' => 'Историја на измените на „$1“',
-'difference' => '(Разлика меѓу ревизија)',
+'difference-title' => 'Разлика помеѓу ревизиите на „$1“',
+'difference-title-multipage' => 'Разлика помеѓу страниците „$1“ и „$2“',
 'difference-multipage' => '(Разлики помеѓу страници)',
 'lineno' => 'Ред $1:',
 'compareselectedversions' => 'Спореди избрани ревизии',
@@ -1942,6 +1952,7 @@ $1',
 'http-curl-error' => 'Грешка при добивањето на URL: $1',
 'http-host-unreachable' => 'Не можев да пристапам до URL-адресата',
 'http-bad-status' => 'Се појави проблем во текот на обработката на HTTP-барањето: $1 $2',
+'http-truncated-body' => 'Содржината на барањето не е примена во целост.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Не може да се пристапи до URL-то',
@@ -2114,7 +2125,7 @@ $1',
 'brokenredirects-edit' => 'уреди',
 'brokenredirects-delete' => 'избриши',
 
-'withoutinterwiki' => 'СÑ\82Ñ\80аниÑ\86и Ð±ÐµÐ· Ð¸Ð½Ñ\82еÑ\80вики (Ñ\98азиÑ\87ни) врски',
+'withoutinterwiki' => 'СÑ\82Ñ\80аниÑ\86и Ð±ÐµÐ· Ð¼ÐµÑ\93Ñ\83Ñ\98азиÑ\87ни врски',
 'withoutinterwiki-summary' => 'Следните страници немаат врски до други јазични верзии.',
 'withoutinterwiki-legend' => 'Префикс',
 'withoutinterwiki-submit' => 'Прикажи',
@@ -2222,7 +2233,7 @@ $1',
 'allpagesnext' => 'Следна',
 'allpagessubmit' => 'Оди',
 'allpagesprefix' => 'Прикажи страници со префикс:',
-'allpagesbadtitle' => 'Ð\94адениоÑ\82 Ð½Ð°Ñ\81лов Ðµ Ð½ÐµÐ²Ð°Ð¶ÐµÑ\87ки Ð¸Ð»Ð¸ Ð¸Ð¼Ð° Ð¼ÐµÑ\93Ñ\83Ñ\98азиÑ\87ен Ð¸Ð»Ð¸ Ð¸Ð½Ñ\82еÑ\80вики префикс. Може да содржи повеќе знаци кои не смеат да се користат во наслови.',
+'allpagesbadtitle' => 'Ð\94адениоÑ\82 Ð½Ð°Ñ\81лов Ðµ Ð½ÐµÐ²Ð°Ð¶ÐµÑ\87ки Ð¸Ð»Ð¸ Ð¸Ð¼Ð° Ð¼ÐµÑ\93Ñ\83Ñ\98азиÑ\87ен Ð¸Ð»Ð¸ Ð¼ÐµÑ\93Ñ\83вики префикс. Може да содржи повеќе знаци кои не смеат да се користат во наслови.',
 'allpages-bad-ns' => 'Википедија не содржи именски простор „$1“.',
 'allpages-hide-redirects' => 'Скриј пренасочувања',
 
@@ -2866,7 +2877,7 @@ $1',
 не може да се премести страница во самата себе.',
 'immobile-source-namespace' => 'Не може да се преместуваат страници во именскиот простор „$1“',
 'immobile-target-namespace' => 'Не може да се преместуваат страници во именскиот простор „$1“',
-'immobile-target-namespace-iw' => 'Ð\98нÑ\82еÑ\80вики Ð²Ñ\80Ñ\81ка Ð½Ðµ Ðµ Ð²Ð°Ð¶ÐµÑ\87ка Ñ\86ел Ð·Ð° Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\9aе Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а.',
+'immobile-target-namespace-iw' => 'Ð\9cеÑ\93Ñ\83вики-вÑ\80Ñ\81ка Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð° Ð¿Ñ\80еименÑ\83ваÑ\9aе Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и.',
 'immobile-source-page' => 'Оваа страница не може да се преместува.',
 'immobile-target-page' => 'Не може да се премести под бараниот наслов.',
 'imagenocrossnamespace' => 'Не може да се премести податотека во неподатотечен именски простор',
@@ -2959,7 +2970,7 @@ $1',
 'importfailed' => 'Неуспешно внесување: $1',
 'importunknownsource' => 'Непознат тип за внесување',
 'importcantopen' => 'Не може да се отвори увезената податотека',
-'importbadinterwiki' => 'Ð\9bоÑ\88а Ð¸Ð½Ñ\82еÑ\80вики врска',
+'importbadinterwiki' => 'Ð\9bоÑ\88а Ð¼ÐµÑ\93Ñ\83вики-врска',
 'importnotext' => 'Празно или без текст',
 'importsuccess' => 'Увезувањето е завршено!',
 'importhistoryconflict' => 'Постои конфликтна историја на верзиите (можно е страницата веќе да била внесена)',
index 6a988b5..98ee711 100644 (file)
@@ -682,7 +682,7 @@ $1',
 'badtitle' => 'അസാധുവായ തലക്കെട്ട്',
 'badtitletext' => 'താങ്കൾ ആവശ്യപ്പെട്ട തലക്കെട്ടുള്ള ഒരു താൾ നിലവിലില്ല. ഇതു തെറ്റായി അന്തർഭാഷാ/അന്തർവിക്കി കണ്ണി ചെയ്യപ്പെട്ടതു മൂലമോ, തലക്കെട്ടിൽ ഉപയോഗിക്കരുതാത്ത അക്ഷരരൂപങ്ങൾ ഉപയോഗിച്ചതു മൂലമോ സംഭവിച്ചതായിരിക്കാം.',
 'perfcached' => 'താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.',
-'perfcachedts' => 'താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്. സാധാരണ ഗതിയിൽ $4 ആയിരമായിരിക്കും.',
+'perfcachedts' => 'താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.',
 'querypage-no-updates' => 'ഈ താളിന്റെ പുതുക്കൽ തൽക്കാലം നടക്കുന്നില്ല. ഇവിടുള്ള വിവരങ്ങൾ ഏറ്റവും പുതിയതാവണമെന്നില്ല.',
 'wrong_wfQuery_params' => 'wfQuery()എന്നതിലേക്ക് തെറ്റായ പരാമീറ്ററുകൾ<br />
 നിർദ്ദേശം: $1<br />
@@ -708,6 +708,8 @@ $2',
 'filereadonlyerror' => 'പ്രമാണ ശേഖരണി "$2" ഇപ്പോൾ "കാണൽ-മാത്രം" വിധത്തിൽ ക്രമീകരിച്ചിരിക്കുന്നതിനാൽ "$1" എന്ന പ്രമാണത്തിൽ മാറ്റം വരുത്താനാകില്ല.
 
 ബന്ധിച്ച കാര്യ‌നിർവാഹക(ൻ) നൽകിയിരിക്കുന്ന കാരണം "\'\'$3\'\'" എന്നാണ്.',
+'invalidtitle-knownnamespace' => 'നാമമേഖല "$2", എഴുത്ത് "$3" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
+'invalidtitle-unknownnamespace' => 'അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് "$2" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
 
 # Virus scanner
 'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി :  ''$1''",
@@ -746,7 +748,7 @@ $2',
 'userlogin-resetlink' => 'താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?',
 'createaccountmail' => 'ഇമെയിൽ വഴി',
 'createaccountreason' => 'കാരണം:',
-'badretype' => 'താà´\99àµ\8dà´\95ൾ à´\9fàµ\88à´ªàµ\8dà´ªàµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\81à´\95ൾ à´¤à´®àµ\8dമിൽ à´¯àµ\8bà´\9cà´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനില്ല.',
+'badretype' => 'താà´\99àµ\8dà´\95ൾ à´¨àµ½à´\95à´¿à´¯ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\81à´\95ൾ à´¸à´®à´®ല്ല.',
 'userexists' => 'നൽകിയ ഉപയോക്തൃനാമം മുമ്പേ നിലവിലുണ്ട്.
 ദയവായി മറ്റൊരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക.',
 'loginerror' => 'പ്രവേശനം സാധിച്ചില്ല',
@@ -812,6 +814,7 @@ $2',
 # Change password dialog
 'resetpass' => 'രഹസ്യവാക്ക് മാറ്റുക',
 'resetpass_announce' => 'താങ്കൾക്ക് ഇമെയിൽ ആയി കിട്ടിയ താൽക്കാലിക കോഡ് ഉപയോഗിച്ചാണ്‌ ഇപ്പോൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതു്‌. ലോഗിൻ പ്രക്രിയ പൂർത്തിയാകുവാൻ പുതിയൊരു രഹസ്യവാക്ക് ഇവിടെ കൊടുക്കുക:',
+'resetpass_text' => '<!-- എഴുത്ത് ഇവിടെ ചേർക്കുക -->',
 'resetpass_header' => 'അംഗത്വത്തിന്റെ രഹസ്യവാക്ക് മാറ്റുക',
 'oldpassword' => 'പഴയ രഹസ്യവാക്ക്:',
 'newpassword' => 'പുതിയ രഹസ്യവാക്ക്:',
@@ -822,8 +825,8 @@ $2',
 'resetpass-no-info' => 'ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.',
 'resetpass-submit-loggedin' => 'രഹസ്യവാക്ക് മാറ്റുക',
 'resetpass-submit-cancel' => 'റദ്ദാക്കുക',
-'resetpass-wrong-oldpass' => 'സാധàµ\81തയിലàµ\8dലാതàµ\8dà´¤ à´¤à´¾à´¤àµ\8dà´\95ാലിà´\95 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dà´³ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95്.
-നിലവിൽ à´¤à´¾à´\99àµ\8dà´\95ൾ à´µà´¿à´\9cà´¯à´\95രമായി à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´®à´¾à´±àµ\8dറിയിà´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fàµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\92à´°àµ\81 à´ªàµ\81തിയ à´¤à´¾à´¤àµ\8dà´\95ാലിà´\95 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95à´¿à´¨àµ\8d à´\86വശàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.',
+'resetpass-wrong-oldpass' => 'താതàµ\8dà´\95ാലിà´\95മായി à´²à´­à´¿à´\9aàµ\8dà´\9a à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dളതായി à´¨àµ½à´\95à´¿à´¯ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\85സാധàµ\81വാണ്.
+താà´\99àµ\8dà´\95ൾ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´µà´¿à´\9cà´¯à´\95രമായി à´®à´¾à´±àµ\8dറിയിà´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fà´¾à´\95à´¾à´\82 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´ªàµ\81തിയ à´¤à´¾à´¤àµ\8dà´\95ാലിà´\95 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\85à´­àµ\8dയർതàµ\8dഥിà´\9aàµ\8dà´\9aà´¿à´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fà´¾à´\95à´¾à´\82.',
 'resetpass-temp-password' => 'താത്കാലിക രഹസ്യവാക്ക്:',
 
 # Special:PasswordReset
@@ -861,7 +864,7 @@ $2
 # Special:ChangeEmail
 'changeemail' => 'ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക',
 'changeemail-header' => 'അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക',
-'changeemail-text' => 'താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്താൻ ഈ ഫോം പൂരിപ്പിച്ചു നൽകുക. മാറ്റം സ്ഥിരീകരിക്കാനായി താങ്കളുടെ രഹസ്യവാക്ക് നൽകേണ്ടതാണ്.',
+'changeemail-text' => 'താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87à´®àµ\86യിൽ à´µà´¿à´²à´¾à´¸à´¤àµ\8dതിൽ à´®à´¾à´±àµ\8dà´±à´\82വരàµ\81à´¤àµ\8dതാൻ à´\88 à´«àµ\8bà´\82 à´ªàµ\82à´°à´¿à´ªàµ\8dപിà´\9aàµ\8dà´\9aàµ\81 à´¨àµ½à´\95àµ\81à´\95. à´®à´¾à´±àµ\8dà´±à´\82 à´¸àµ\8dഥിരàµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാനായി à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\95àµ\82à´\9fàµ\86 à´¨àµ½à´\95àµ\87à´£àµ\8dà´\9fതാണàµ\8d.',
 'changeemail-no-info' => 'ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.',
 'changeemail-oldemail' => 'ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:',
 'changeemail-newemail' => 'പുതിയ ഇമെയിൽ വിലാസം:',
@@ -1069,6 +1072,10 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'parser-template-loop-warning' => 'ഫലകക്കുരുക്ക് കണ്ടെത്തിയിരിക്കുന്നു: [[$1]]',
 'parser-template-recursion-depth-warning' => 'ഫലകത്തിന്റെ പുനരാവർത്തന ആഴത്തിന്റെ പരിധി കഴിഞ്ഞിരിക്കുന്നു ($1)',
 'language-converter-depth-warning' => 'ഭാഷ മാറ്റൽ ഉപകരണത്തിന്റെ ആഴത്തിന്റെ പരിധി കവിഞ്ഞിരിക്കുന്നു ($1)',
+'node-count-exceeded-category' => 'നോഡ്-എണ്ണം അധികരിച്ച താളുകൾ',
+'node-count-exceeded-warning' => 'താൾ നോഡ്-എണ്ണം അധികരിച്ചിരിക്കുന്നു',
+'expansion-depth-exceeded-category' => 'വികസന ആഴം അധികരിച്ച താളുകൾ',
+'expansion-depth-exceeded-warning' => 'താളിന്റെ വികസന ആഴം അധികരിച്ചിരിക്കുന്നു',
 
 # "Undo" feature
 'undo-success' => 'ഈ തിരുത്തൽ താങ്കൾക്ക് തിരസ്ക്കരിക്കാവുന്നതാണ്‌. താഴെ കൊടുത്തിരിക്കുന്ന പതിപ്പുകൾ തമ്മിലുള്ള താരതമ്യം ഒന്നുകൂടി പരിശോധിച്ച് ഈ പ്രവൃത്തി ചെയ്യണോ എന്ന് ഒന്നുകൂടി ഉറപ്പാക്കുക. ഉറപ്പാണെങ്കിൽ തിരുത്തൽ തിരസ്ക്കരിക്കുവാൻ താൾ സേവ് ചെയ്യുക.',
@@ -1249,7 +1256,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" എന്ന താളിന്റെ നാൾവഴി',
-'difference' => '(തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം)',
 'difference-multipage' => '(താളുകൾ തമ്മിലുള്ള വ്യത്യാസം)',
 'lineno' => 'വരി $1:',
 'compareselectedversions' => 'തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം കാണുക',
@@ -1274,7 +1280,7 @@ $1",
 'prevn-title' => 'മുൻപത്തെ {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}}',
 'nextn-title' => 'അടുത്ത {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}}',
 'shown-title' => '{{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} വീതം താളിൽ കാണിക്കുക',
-'viewprevnext' => '($1 {{int:pipe-separator}} $2 {{int:pipe-separator}} $3 മാറ്റങ്ങൾ കാണുക)',
+'viewprevnext' => '$1 {{int:pipe-separator}} $2 എണ്ണം കാണുക ($3)',
 'searchmenu-legend' => 'തിരച്ചിൽ ഉപാധികൾ',
 'searchmenu-exists' => "'''\"[[:\$1]]\" എന്ന തലക്കെട്ടിൽ ഒരു താൾ ഈ വിക്കിയിൽ നിലവിലുണ്ട്'''",
 'searchmenu-new' => "'''ഈ വിക്കിയിൽ \"[[:\$1]]\" താൾ നിർമ്മിക്കുക!'''",
@@ -1924,6 +1930,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'shared-repo-from' => '$1 സംരംഭത്തിൽ നിന്ന്',
 'shared-repo' => 'ഒരു പങ്കുവെക്കപ്പെട്ട സംഭരണി',
 'shared-repo-name-wikimediacommons' => 'വിക്കിമീഡിയ കോമൺസ്',
+'filepage.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. പ്രമാണ വിവരണ താളുകളിൽ ഉൾപ്പെടുത്തപ്പെടുന്നതായിരിക്കും, ബാഹ്യ ക്ലൈന്റ് വിക്കികളിലും അത് ലഭ്യമായിരിക്കും */',
 
 # File reversion
 'filerevert' => '$1 തിരസ്ക്കരിക്കുക',
@@ -2003,7 +2010,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'statistics-users-active-desc' => 'കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങൾക്കുള്ളിൽ}} പ്രവർത്തിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ',
 'statistics-mostpopular' => 'ഏറ്റവുമധികം സന്ദർശിക്കപ്പെട്ട താളുകൾ',
 
-'disambiguations' => 'വിവക്ഷിത താളുകളിലേയ്ക്ക് കണ്ണിചേർക്കുന്ന താളുകൾ',
+'disambiguations' => 'വിവà´\95àµ\8dà´·à´¿à´¤ à´¤à´¾à´³àµ\81à´\95ളിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´\95à´£àµ\8dണിà´\9aàµ\87ർതàµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ',
 'disambiguationspage' => 'Template:വിവക്ഷകൾ',
 'disambiguations-text' => 'താഴെ കൊടുത്തിരിക്കുന്ന താളുകൾ വിവക്ഷിതങ്ങൾ താളിലേക്കു കണ്ണി ചേർക്കപ്പെട്ടിരിക്കുന്നു. അതിനു പകരം അവ ലേഖനതാളുകളിലേക്കു കണ്ണി ചേക്കേണ്ടതാണ്‌. <br /> ഒരു താളിനെ വിവക്ഷിത താൾ ആയി പരിഗണിക്കണമെങ്കിൽ അതു  [[MediaWiki:Disambiguationspage]] എന്ന താളിൽ നിന്നു കണ്ണി ചേർക്കപ്പെട്ട ഒരു ഫലകം ഉപയോഗിക്കണം.',
 
@@ -2963,12 +2970,28 @@ $1',
 
 # Stylesheets
 'common.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */',
+'standard.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. സാർവത്രികം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'nostalgia.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ഗൃഹാതുരത്വം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'monobook.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'myskin.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എന്റിഷ്ടം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'chick.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. സുന്ദരി ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'modern.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. നവീനം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'vector.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/',
+'noscript.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്., ജാവാസ്ക്രിപ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലാത്ത ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */',
+'group-autoconfirmed.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. യാന്ത്രികമായി സ്ഥിരീകരിച്ച ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */',
+'group-bot.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */',
+'group-sysop.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. കാര്യനിർവാഹകർക്ക് ബാധകമായിരിക്കും */',
+'group-bureaucrat.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബ്യൂറോക്രാറ്റുകൾക്ക് ബാധകമായിരിക്കും */',
 
 # Scripts
 'common.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */',
+'monobook.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'modern.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് നവീനം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'vector.js' => '/*ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് വെക്റ്റർ ദൃശ്യരൂപം ഉപയോഗിക്കുന്ന ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും*/',
+'group-autoconfirmed.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */',
+'group-bot.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */',
+'group-sysop.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് കാര്യനിർവാഹകർക്ക് ബാധകമായിരിക്കും */',
+'group-bureaucrat.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് ബ്യൂറോക്രാറ്റുകൾക്ക് ബാധകമായിരിക്കും */',
 
 # Metadata
 'notacceptable' => 'താങ്കളുടെ ക്ലയന്റിനു മനസ്സിലാക്കാൻ പാകത്തിലുള്ള തരത്തിൽ വിവരങ്ങൾ നൽകാൻ വിക്കി സെർവറിനു ശേഷിയില്ല.',
@@ -3082,6 +3105,10 @@ $1',
 'sp-newimages-showfrom' => '$2, $1 നു ശേഷം അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങൾ പ്രദർശിപ്പിക്കുക',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'seconds-abbrev' => '$1സെ',
+'minutes-abbrev' => '$1മി',
+'hours-abbrev' => '$1മ',
+'days-abbrev' => '$1ദി',
 'seconds' => '{{PLURAL:$1|ഒരു സെക്കന്റ്|$1 സെക്കന്റ്}}',
 'minutes' => '{{PLURAL:$1|ഒരു മിനിറ്റ്|$1 മിനിറ്റ്}}',
 'hours' => '{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}',
index 3244c60..c28e985 100644 (file)
@@ -979,7 +979,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1"-н засварын түүх',
-'difference' => '(Засварууд хоорондын ялгаа)',
 'difference-multipage' => '(Хуудсууд хоорондын ялгаа)',
 'lineno' => '$1-р мөр:',
 'compareselectedversions' => 'Сонгосон хувилбаруудыг харьцуулах',
index b3e341d..708877c 100644 (file)
@@ -340,7 +340,7 @@ $messages = array(
 'tog-previewontop' => 'झलक संपादन खिडकीच्या आधी दाखवा',
 'tog-previewonfirst' => 'पहिल्या संपादनानंतर झलक दाखवा',
 'tog-nocache' => 'न्याहाळकाची पान सय (कॅशिंग) अक्षम (निकमी) करा',
-'tog-enotifwatchlistpages' => 'माà¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\80ल (नितà¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयात à¤\85सलà¥\87लà¥\80 à¤¸à¥\82à¤\9aà¥\80) à¤ªà¤¾à¤¨ à¤¬à¤¦à¤²à¤²à¥\8dयास à¤®à¤²à¤¾ à¤\88-मà¥\87ल à¤ªà¤¾à¤ à¤µà¤¾',
+'tog-enotifwatchlistpages' => 'माà¤\9dà¥\8dया à¤¨à¤¿à¤¤à¥\8dय à¤ªà¤¾à¤¹à¤¾à¤£à¥\8dयात à¤\85सलà¥\87लà¥\80 à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 à¤\85सलà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤®à¤§à¥\8dयà¥\87 à¤¬à¤¦à¤² à¤\9dालà¥\8dयास à¤®à¤²à¤¾ à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मà¥\87ल) à¤ªà¤¾à¤ à¤µà¤¾.',
 'tog-enotifusertalkpages' => 'माझ्या चर्चा पानावर बदल झाल्यास मला विरोप (ई-मेल) पाठवा',
 'tog-enotifminoredits' => 'मला छोट्या बदलांकरीता सुद्धा विरोप पाठवा',
 'tog-enotifrevealaddr' => 'सूचना विरोपात माझा विरोपाचा (ई-मेल ) पत्ता दाखवा',
@@ -1217,7 +1217,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" चा संपादन इतिहास',
-'difference' => '(आवर्तनांमधील फरक)',
 'difference-multipage' => '(पानांमधील फरक)',
 'lineno' => 'ओळ $1:',
 'compareselectedversions' => 'निवडलेल्या आवृत्त्यांमधील बदल पहा',
index 3fb2ad6..d1b99aa 100644 (file)
@@ -46,125 +46,125 @@ $namespaceGenderAliases = array();
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Ажедмӓшвлӓм ыдыралаш',
-'tog-justify'                 => 'Текстӹм ӹлӹштӓш кымдык тӧрлӓш',
-'tog-hideminor'               => 'Изи тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
-'tog-hidepatrolled'           => 'Патрулируйымы тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
-'tog-newpageshidepatrolled'   => 'Патрулирыйымы ӹлӹшташвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
-'tog-extendwatchlist'         => 'Вангӹмашӹн (анжымашын) кымда списокшы, кышты остатка веле агыл, а цилӓ вашталтымашым пыртымы',
-'tog-usenewrc'                => 'У вашталтымашвлӓн яжорак списокым кычылтман (JavaScript келеш)',
-'tog-numberheadings'          => 'Артикль лӹмвлӓм автоматически нумеруяш',
-'tog-showtoolbar'             => 'Текстӹм тӧрлӹмӹ годым кӱшӹл панельӹм анжыкташ (JavaScript)',
-'tog-editondblclick'          => 'Ӹлӹшташвлӓм кок гӓнӓ темдӓл, тӧрлӓш (JavaScript)',
-'tog-editsection'             => '«Тӧрлӓш» ажедмӓшӹм м цилӓ секцилӓнок анжыкташ',
+'tog-underline' => 'Ажедмӓшвлӓм ыдыралаш',
+'tog-justify' => 'Текстӹм ӹлӹштӓш кымдык тӧрлӓш',
+'tog-hideminor' => 'Изи тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
+'tog-hidepatrolled' => 'Патрулируйымы тӧрлӹмӓшвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
+'tog-newpageshidepatrolled' => 'Патрулирыйымы ӹлӹшташвлӓм у вашталтымашвлӓ лошты шӹлташ, анжыкташ агыл',
+'tog-extendwatchlist' => 'Вангӹмашӹн (анжымашын) кымда списокшы, кышты остатка веле агыл, а цилӓ вашталтымашым пыртымы',
+'tog-usenewrc' => 'У вашталтымашвлӓн яжорак списокым кычылтман (JavaScript келеш)',
+'tog-numberheadings' => 'Артикль лӹмвлӓм автоматически нумеруяш',
+'tog-showtoolbar' => 'Текстӹм тӧрлӹмӹ годым кӱшӹл панельӹм анжыкташ (JavaScript)',
+'tog-editondblclick' => 'Ӹлӹшташвлӓм кок гӓнӓ темдӓл, тӧрлӓш (JavaScript)',
+'tog-editsection' => '«Тӧрлӓш» ажедмӓшӹм м цилӓ секцилӓнок анжыкташ',
 'tog-editsectiononrightclick' => 'Секцим тӧрлӹмӹ годым артикль лӹмӹм каля доно вургымлашты темдӓлӓш (JavaScript)',
-'tog-showtoc'                 => 'Кӧргӹштӹш лӹмвлӓм анжыкташ (3 гӹц шукырак артикль лӹмӓн ӹлӹштӓшвлӓштӹ)',
-'tog-rememberpassword'        => 'Мӹньӹн шотыш нӓлмӹ сирмӓшем ти компьютерӹштӹ ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
-'tog-watchcreations'          => 'Мӹньӹн ӹштӹмӹ ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
-'tog-watchdefault'            => 'Мӹньӹн вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
-'tog-watchmoves'              => 'Мӹньӹн лӹмӹм вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
-'tog-watchdeletion'           => 'Мӹньӹн карангдымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
-'tog-minordefault'            => 'Пäлдӹртӹмӹ агыл тöрлӹмäшвлäм когонжок керäлеш шотлаш агыл',
-'tog-previewontop'            => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӹмӹ окня анзыкы шӹндӓш',
-'tog-previewonfirst'          => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӓш тӹнгӓлмӹ анзыц анжыкташ',
-'tog-nocache'                 => 'Ӹлӹштӓшвлӓн кешированим цӓрӓш',
-'tog-enotifwatchlistpages'    => 'Мам вӓнгӹмӹ списокын ӹлӹштӓшӹштӹ вашталтымы, тӹдӹм эл. почта доно увертӓрӓш',
-'tog-enotifusertalkpages'     => 'Мам персональный ӹлӹштӓшӹштӹ дискуссилӓн пачмы, тӹ вашталтмашым эл. почта доно увертӓрӓш',
-'tog-enotifminoredits'        => 'Изи вашталтымашвлӓ гишӓнӓт эл. почта доно увертӓрӓш',
-'tog-enotifrevealaddr'        => 'Мӹньӹн эл. адресем увертӓрӹмвлӓштӹ анжыкташ',
-'tog-shownumberswatching'     => 'Манярын ӹлӹштӓшӹм вӓнгӹмӹ списокышкышты пыртенӹт, анжыкташ',
-'tog-oldsig'                  => 'Ылшы сирӹмӹ подписьӹм анзыцок анжен лӓктӓш',
-'tog-fancysig'                => 'Вики-пӓлӹкӹн ӹшке подписьшӹ (автоматический ажедмӓш гӹц пасна)',
-'tog-externaleditor'          => 'Тӱнӹш тӧрлӹшӹм кычылташ (компьютерӹн йори настройкыжы келеш)',
-'tog-externaldiff'            => 'Вариантвлӓн тӓнгӓштӓрӹмӹ годым тӱнӹш программым кычылташ (компьютерӹн йори настройкыжы келеш)',
-'tog-showjumplinks'           => '«ванжаш» палшышы ажедмӓшвлӓм чӱктӓш',
-'tog-uselivepreview'          => 'Текстӹм пӹсӹн анзыц анжен лӓкмӹм кычылташ (эксперимент семӹнь JavaScript)',
-'tog-forceeditsummary'        => 'Мам тӧрлӹмӹ тӹ «нырын» охыр ылмыжы гишӓн пӓлдӹртӓш',
-'tog-watchlisthideown'        => 'Мам тӧрленӓм, тӹдӹм вӓнгӹмӹ спискышты шӹлтӓш, анжыкташ агыл',
-'tog-watchlisthidebots'       => 'Ботвлӓм тӧрлӹмӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
-'tog-watchlisthideminor'      => 'Изи тӧрлӹмӓшвлӓм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
-'tog-watchlisthideliu'        => 'Лӹмӹштӹм анжыктышывлӓн тӧрлӹмӹштӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
-'tog-watchlisthideanons'      => 'Кӱ лӹмжӹм анжыктыде, тӹдӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
-'tog-watchlisthidepatrolled'  => 'Патрулируйымы тӧрлӹмӓшвлӓм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
-'tog-ccmeonemails'            => 'Кӱлӓн сирмӓшӹм сирем, тӹдӹн копижӹм мӹлӓм колташ',
-'tog-diffonly'                => 'Кок верси доно тӓнгӓштӓрен ӹлӹштӓшӹн текстшӹм колташ агыл',
-'tog-showhiddencats'          => 'Шӹлтӹмӹ категоривлӓм анжыкташ',
-'tog-norollbackdiff'          => 'Лишӹц колтымын вариантвлӓн айыртемӹштӹм анжыкташ агыл',
-
-'underline-always'  => 'Соок',
-'underline-never'   => 'Нигнамат',
+'tog-showtoc' => 'Кӧргӹштӹш лӹмвлӓм анжыкташ (3 гӹц шукырак артикль лӹмӓн ӹлӹштӓшвлӓштӹ)',
+'tog-rememberpassword' => 'Мӹньӹн шотыш нӓлмӹ сирмӓшем ти компьютерӹштӹ ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
+'tog-watchcreations' => 'Мӹньӹн ӹштӹмӹ ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
+'tog-watchdefault' => 'Мӹньӹн вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
+'tog-watchmoves' => 'Мӹньӹн лӹмӹм вашталтымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
+'tog-watchdeletion' => 'Мӹньӹн карангдымы ӹлӹштӓшвлӓэм вӓнгӹмӹ списокыш пырташ',
+'tog-minordefault' => 'Пäлдӹртӹмӹ агыл тöрлӹмäшвлäм когонжок керäлеш шотлаш агыл',
+'tog-previewontop' => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӹмӹ окня анзыкы шӹндӓш',
+'tog-previewonfirst' => 'Текстӹм анзыц анжен лӓкмӹм тӧрлӓш тӹнгӓлмӹ анзыц анжыкташ',
+'tog-nocache' => 'Ӹлӹштӓшвлӓн кешированим цӓрӓш',
+'tog-enotifwatchlistpages' => 'Мам вӓнгӹмӹ списокын ӹлӹштӓшӹштӹ вашталтымы, тӹдӹм эл. почта доно увертӓрӓш',
+'tog-enotifusertalkpages' => 'Мам персональный ӹлӹштӓшӹштӹ дискуссилӓн пачмы, тӹ вашталтмашым эл. почта доно увертӓрӓш',
+'tog-enotifminoredits' => 'Изи вашталтымашвлӓ гишӓнӓт эл. почта доно увертӓрӓш',
+'tog-enotifrevealaddr' => 'Мӹньӹн эл. адресем увертӓрӹмвлӓштӹ анжыкташ',
+'tog-shownumberswatching' => 'Манярын ӹлӹштӓшӹм вӓнгӹмӹ списокышкышты пыртенӹт, анжыкташ',
+'tog-oldsig' => 'Ылшы сирӹмӹ подписьӹм анзыцок анжен лӓктӓш',
+'tog-fancysig' => 'Вики-пӓлӹкӹн ӹшке подписьшӹ (автоматический ажедмӓш гӹц пасна)',
+'tog-externaleditor' => 'Тӱнӹш тӧрлӹшӹм кычылташ (компьютерӹн йори настройкыжы келеш)',
+'tog-externaldiff' => 'Вариантвлӓн тӓнгӓштӓрӹмӹ годым тӱнӹш программым кычылташ (компьютерӹн йори настройкыжы келеш)',
+'tog-showjumplinks' => '«ванжаш» палшышы ажедмӓшвлӓм чӱктӓш',
+'tog-uselivepreview' => 'Текстӹм пӹсӹн анзыц анжен лӓкмӹм кычылташ (эксперимент семӹнь JavaScript)',
+'tog-forceeditsummary' => 'Мам тӧрлӹмӹ тӹ «нырын» охыр ылмыжы гишӓн пӓлдӹртӓш',
+'tog-watchlisthideown' => 'Мам тӧрленӓм, тӹдӹм вӓнгӹмӹ спискышты шӹлтӓш, анжыкташ агыл',
+'tog-watchlisthidebots' => 'Ботвлӓм тӧрлӹмӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
+'tog-watchlisthideminor' => 'Изи тӧрлӹмӓшвлӓм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
+'tog-watchlisthideliu' => 'Лӹмӹштӹм анжыктышывлӓн тӧрлӹмӹштӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
+'tog-watchlisthideanons' => 'Кӱ лӹмжӹм анжыктыде, тӹдӹм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
+'tog-watchlisthidepatrolled' => 'Патрулируйымы тӧрлӹмӓшвлӓм вӓнгӹмӹ списокышты шӹлтӓш, анжыкташ агыл',
+'tog-ccmeonemails' => 'Кӱлӓн сирмӓшӹм сирем, тӹдӹн копижӹм мӹлӓм колташ',
+'tog-diffonly' => 'Кок верси доно тӓнгӓштӓрен ӹлӹштӓшӹн текстшӹм колташ агыл',
+'tog-showhiddencats' => 'Шӹлтӹмӹ категоривлӓм анжыкташ',
+'tog-norollbackdiff' => 'Лишӹц колтымын вариантвлӓн айыртемӹштӹм анжыкташ агыл',
+
+'underline-always' => 'Соок',
+'underline-never' => 'Нигнамат',
 'underline-default' => 'Браузерӹн настройкыжым кычылташ',
 
 # Font style option in Special:Preferences
-'editfont-style'     => 'Тӧрлӹмӓштӹ шрифтӹн типшӹ',
-'editfont-default'   => 'Браузерӹн настройкывлӓн шрифтӹштӹ',
+'editfont-style' => 'Тӧрлӹмӓштӹ шрифтӹн типшӹ',
+'editfont-default' => 'Браузерӹн настройкывлӓн шрифтӹштӹ',
 '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'         => '{{PLURAL:$1|Категори|Категоривлӓ}}',
-'category_header'        => 'Категори «$1» ӹлӹштӓшвлӓ',
-'subcategories'          => 'Лӹвӓл категоривлӓ',
-'hidden-categories'      => '{{PLURAL:$1|Шӹлтӹмӹ категори| Шӹлтӹмӹ категоривлӓ}}',
-'category-subcat-count'  => '{{PLURAL:$2|Ти категориштӹ лач ти лӹвӓл категори веле.|{{PLURAL:$1|Лӹвӓл категорим $1 анжыктымы|Лӹвӓл категоривлӓм $1 анжыктымы|Лӹвӓл категорим $1}} анжыктымы $2.}}',
+'pagecategories' => '{{PLURAL:$1|Категори|Категоривлӓ}}',
+'category_header' => 'Категори «$1» ӹлӹштӓшвлӓ',
+'subcategories' => 'Лӹвӓл категоривлӓ',
+'hidden-categories' => '{{PLURAL:$1|Шӹлтӹмӹ категори| Шӹлтӹмӹ категоривлӓ}}',
+'category-subcat-count' => '{{PLURAL:$2|Ти категориштӹ лач ти лӹвӓл категори веле.|{{PLURAL:$1|Лӹвӓл категорим $1 анжыктымы|Лӹвӓл категоривлӓм $1 анжыктымы|Лӹвӓл категорим $1}} анжыктымы $2.}}',
 'category-article-count' => '{{PLURAL:$2|Ти категориштӹ ик ӹлыштӓш веле. |{{PLURAL:$1|Анжыктымы$1 ӹлӹшташ|Анжыктымы$1 ӹлӹштӓшӹм|Анжыктымы$1 ӹлыштӓшвлӓм}}ти категори гӹц$2.}}',
 'listingcontinuesabbrev' => '(пакыла)',
 
-'newwindow'  => '(у окняшты)',
-'cancel'     => 'Вашталташ',
-'mytalk'     => 'Мӹньӹн кӓнгӓшӹмӹ ӹлӹштӓшем',
+'newwindow' => '(у окняшты)',
+'cancel' => 'Вашталташ',
+'mytalk' => 'Мӹньӹн кӓнгӓшӹмӹ ӹлӹштӓшем',
 'navigation' => 'Навигаци',
 
 # Cologne Blue skin
@@ -172,217 +172,216 @@ $messages = array(
 'qbedit' => 'Торлӓш',
 
 # Vector skin
-'vector-action-delete'   => 'Карангдаш',
-'vector-action-move'     => 'Лӹмӹм вашталташ',
-'vector-action-protect'  => 'Ӹшӹклӓш',
-'vector-view-create'     => 'Ӹштӓш',
-'vector-view-edit'       => 'Тӧрлӹмӓш',
-'vector-view-history'    => 'Историм анжымаш',
-'vector-view-view'       => 'Лыдмаш',
+'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'   => 'Самынь',
-'returnto'         => 'Мӹнгеш ӹлӹштӓшӹш $1.',
-'tagline'          => 'гӹц материал {{grammar:genitive|{{SITENAME}}}}',
-'help'             => 'Палшык',
-'search'           => 'Кӹчӓлӓш',
-'searchbutton'     => 'Моаш',
-'searcharticle'    => 'Ванжаш',
-'history'          => 'Истори',
-'history_short'    => 'Истори',
+'errorpagetitle' => 'Самынь',
+'returnto' => 'Мӹнгеш ӹлӹштӓшӹш $1.',
+'tagline' => 'гӹц материал {{grammar:genitive|{{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'            => 'Тидӹ гишӓн сирӹмӓш {{grammar:genitive|{{SITENAME}}}}',
-'aboutpage'            => 'Project:Сирӹмӓш',
-'copyright'            => 'Тидӹ, тидӹ семӹнь ылеш $1.',
-'copyrightpage'        => '{{ns:project}}:Авторын праважы',
-'disclaimers'          => 'Вӓшештӹмӹ шая (ответственность) гӹц карангмаш',
-'disclaimerpage'       => 'Project:Вӓшештӹмӓш (ответственность) гӹц карангмаш',
-'edithelp'             => 'Тӧрлӓш манын палшык',
-'edithelppage'         => 'Help:Тӧрлӓш манын палшык',
-'helppage'             => 'Help:Палшык',
-'mainpage'             => 'Тӹнг ӹлӹштӓш',
+'aboutsite' => 'Тидӹ гишӓн сирӹмӓш {{grammar:genitive|{{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»',
-'youhavenewmessages'  => 'Тӓ нӓлӹндӓ $1 ($2).',
-'newmessageslink'     => 'у увервлӓ',
+'retrievedfrom' => 'Кышец нӓлмӹ «$1»',
+'youhavenewmessages' => 'Тӓ нӓлӹндӓ $1 ($2).',
+'newmessageslink' => 'у увервлӓ',
 'newmessagesdifflink' => 'пӹтӓртӹш вашталтымаш',
-'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 (техень ӹлӹштӓш уке)',
+'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' => 'Категори',
 
 # General errors
-'missing-article'    => 'Информаци базышты ядмы текст уке, кыдым моаш лиэш ылын «$1» $2.
+'missing-article' => 'Информаци базышты ядмы текст уке, кыдым моаш лиэш ылын «$1» $2.
 
 Тенге ӹлӹштӓшӹн вашталтымашвлӓштӹ тошты ажедмӓшвлӓм анжыктымы
 годым лиӓлтеш.
 Ядмаш тиштӹ агыл гӹнь , лин кердеш, тӹнӓм тӓ программышты тамахань самыньым монда. Пуры лидӓ, тидӹ гишӓн увертӓрӹдӓ [[Special:ListUsers/sysop|администратор]], анжыктен URL.',
 'missingarticle-rev' => '(верси № $1)',
-'badtitletext'       => 'Ядмы ӹлӹштӓшдӓн лӹмжӹ самынь, охыр, лин кердеш тӧр агыл лӹмӹм ӓль интервикым анжыктендӓ,  ӓнят лӹмӹштӹ кычылташ лидӹмӹ символым сирендӓ.',
-'viewsource'         => 'Анжен лӓктӓш',
+'badtitletext' => 'Ядмы ӹлӹштӓшдӓн лӹмжӹ самынь, охыр, лин кердеш тӧр агыл лӹмӹм ӓль интервикым анжыктендӓ,  ӓнят лӹмӹштӹ кычылташ лидӹмӹ символым сирендӓ.',
+'viewsource' => 'Анжен лӓктӓш',
 
 # Login and logout pages
-'yourname'                => 'Сирӹшӹн лӹмжӹ:',
-'yourpassword'            => 'Пароль:',
-'remembermypassword'      => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
-'login'                   => 'Системыш сирӓлтдӓ',
+'yourname' => 'Сирӹшӹн лӹмжӹ:',
+'yourpassword' => 'Пароль:',
+'remembermypassword' => 'Ти компьютерӹштӹ мӹньӹн учетный сирмӓшем ӓштӓш (максимум $1 {{PLURAL:$1|кечы|кечы}})',
+'login' => 'Системыш сирӓлтдӓ',
 'nav-login-createaccount' => 'Коргӹшкӹ сирӓлтдӓ/регистрируялтда',
-'userlogin'               => 'Кӧргӹшкӹ сирӓлтдӓ ӓль регистрируялтда',
-'logout'                  => 'Сеансым пӹтӓрӓш',
-'userlogout'              => 'Сеансым кашарташ',
-'nologinlink'             => 'Учётный сирмӓшӹм ӹштӹдӓ',
-'mailmypassword'          => 'У парольым колташ',
+'userlogin' => 'Кӧргӹшкӹ сирӓлтдӓ ӓль регистрируялтда',
+'logout' => 'Сеансым пӹтӓрӓш',
+'userlogout' => 'Сеансым кашарташ',
+'nologinlink' => 'Учётный сирмӓшӹм ӹштӹдӓ',
+'mailmypassword' => 'У парольым колташ',
 
 # 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'                  => "'''ӓштӹдӓ''':  Тӓ кӧргӹш сирӓлтделда. Системылан ӹшке донда пӓлӹмӹм ӹштӹделда.  Тӓмдӓн IP-адресдӓ ти ӹлыштӓшӹн вашталтымашвлӓн историэшӹжӹ кодеш.",
-'summary-preview'                  => 'Сирӹмӹ лиэш:',
-'newarticle'                       => '(У)',
-'newarticletext'                   => "Ажедмӹ доно тӓ эче ӹштӹмӹ агыл ӹлӹшташӹш вӓрештӹндӓ. Тӹдӹм ӹштӓш манын,  ӱлнӹрӓк ылшы окняэш лӹмӹм сирӓлтӹдӓ. (шукыракым пӓлен нӓлаш, анжал. [[{{MediaWiki:Helppage}}|палшыкын ӹлӹштӓшӹм]])
+'summary' => 'Мам вашталтымы:',
+'subject' => 'Тема/вуй лӹм:',
+'minoredit' => 'Изи тӧрлӹмӓш',
+'watchthis' => 'Ти ӹлыштӓшӹм вӓнгӓш манын списокыш пырташ',
+'savearticle' => 'Ӹлӹштӓшӹм темӓш',
+'preview' => 'Анзыц анжен лӓктӓш',
+'showpreview' => 'Анзыц анжен лӓкмӓш',
+'showdiff' => 'Пыртымы вашталтымашвлӓ',
+'anoneditwarning' => "'''ӓштӹдӓ''':  Тӓ кӧргӹш сирӓлтделда. Системылан ӹшке донда пӓлӹмӹм ӹштӹделда.  Тӓмдӓн IP-адресдӓ ти ӹлыштӓшӹн вашталтымашвлӓн историэшӹжӹ кодеш.",
+'summary-preview' => 'Сирӹмӹ лиэш:',
+'newarticle' => '(У)',
+'newarticletext' => "Ажедмӹ доно тӓ эче ӹштӹмӹ агыл ӹлӹшташӹш вӓрештӹндӓ. Тӹдӹм ӹштӓш манын,  ӱлнӹрӓк ылшы окняэш лӹмӹм сирӓлтӹдӓ. (шукыракым пӓлен нӓлаш, анжал. [[{{MediaWiki:Helppage}}|палшыкын ӹлӹштӓшӹм]])
 Самынь тишкӹ вӓрештӹндӓ гӹнь лач браузердӓн '''мӹнгеш''' кнопкыжым веле темдӓлдӓ.",
-'noarticletext'                    => "Кӹзӹт ти ӹлӹштӓшӹштӹ текст уке. Ти лӹмӹм [[Special:Search/{{PAGENAME}}|тӓ вес лӹм доно вес ӹлӹштӓшвлӓштӹ мон кердӹдӓ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тӓ вес лӹм доно вес ӹлӹштӓшвлӓштӹ мон кердӹда -]] журналвлӓн вес сирмӓшвлӓштӓт моаш лиэш], ӓль
+'noarticletext' => "Кӹзӹт ти ӹлӹштӓшӹштӹ текст уке. Ти лӹмӹм [[Special:Search/{{PAGENAME}}|тӓ вес лӹм доно вес ӹлӹштӓшвлӓштӹ мон кердӹдӓ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тӓ вес лӹм доно вес ӹлӹштӓшвлӓштӹ мон кердӹда -]] журналвлӓн вес сирмӓшвлӓштӓт моаш лиэш], ӓль
 '''[{{fullurl:{{FULLPAGENAME}}|action=edit}}  техень лӹм доно ӹлӹштӓшӹм пачаш лиэш]'''</span>.",
-'previewnote'                      => "'''Тидӹ анзыц анжымаш веле, текстӹм эче сирӹмӹ агыл!'''",
-'editing'                          => 'Редактируйымаш: $1',
-'editingsection'                   => 'Тӧрлӹмаш  $1 (пӧлкӓ)',
-'copyrightwarning'                 => 'Пуры лидӓ, ӓшӹшкӹдӓ пиштӹда! Цилӓ мам тӧрлӹмӹ, ушештӹмӹ дӓ вашталтымы, $2 (см. $1) негӹцеш ӹштӹмы семӹнь анжымы лиэш. Мам сиредӓ, тӹдӹм кычылтмы  дӓ тӧрлӹмӹ ваштареш ылыда гӹнь пуры лидӓ, тишӓк идӓ сирӹ.<br /> Тенгеок мам сиредӓ  тӹдӹн авторжы ылыда дӓ мам копируедӓ, тидӹ ирӹкӓн кычылтмашты лишӓшлык<br />.
+'previewnote' => "'''Тидӹ анзыц анжымаш веле, текстӹм эче сирӹмӹ агыл!'''",
+'editing' => 'Редактируйымаш: $1',
+'editingsection' => 'Тӧрлӹмаш  $1 (пӧлкӓ)',
+'copyrightwarning' => 'Пуры лидӓ, ӓшӹшкӹдӓ пиштӹда! Цилӓ мам тӧрлӹмӹ, ушештӹмӹ дӓ вашталтымы, $2 (см. $1) негӹцеш ӹштӹмы семӹнь анжымы лиэш. Мам сиредӓ, тӹдӹм кычылтмы  дӓ тӧрлӹмӹ ваштареш ылыда гӹнь пуры лидӓ, тишӓк идӓ сирӹ.<br /> Тенгеок мам сиредӓ  тӹдӹн авторжы ылыда дӓ мам копируедӓ, тидӹ ирӹкӓн кычылтмашты лишӓшлык<br />.
 
 Автор пӓшӓлӓнжӹ публикаяш разрешеним пуде гӹнь, тишӓк идӓ сирӹ!!!',
-'templatesused'                    => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ}} ӹлӹштӓшӹн ти версиштӹжӹ:',
-'templatesusedpreview'             => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ }} анзыц анжымы ӹлӹштӓшӹштӹ:',
-'template-protected'               => '(ӹшӹклӓлтеш, перегӓлтеш)',
-'template-semiprotected'           => '(лаштыкын-лыштыкын ӹшӹклӓлтеш)',
-'hiddencategories'                 => 'Ти ӹлӹштӓш $1 {{PLURAL:$1|шӹлтӹмӹ категориш|шӹлтӹмӹ  категоривлӓш|шӹлтӹмӹ категориш пыра}}:',
+'templatesused' => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ}} ӹлӹштӓшӹн ти версиштӹжӹ:',
+'templatesusedpreview' => '{{PLURAL:$1|Кычылтмы шаблон|Кычылтмы шаблонвлӓ }} анзыц анжымы ӹлӹштӓшӹштӹ:',
+'template-protected' => '(ӹшӹклӓлтеш, перегӓлтеш)',
+'template-semiprotected' => '(лаштыкын-лыштыкын ӹшӹклӓлтеш)',
+'hiddencategories' => 'Ти ӹлӹштӓш $1 {{PLURAL:$1|шӹлтӹмӹ категориш|шӹлтӹмӹ  категоривлӓш|шӹлтӹмӹ категориш пыра}}:',
 'permissionserrorstext-withaction' => "Тидӹм (действим) ӹштӓш манын  тӓмдӓн разрешенидӓ уке«'''$2'''» семеш {{PLURAL:$1|ти ӓмӓл|ӓмӓлвлӓ доно}}:",
 
 # History pages
-'viewpagelogs'           => 'Ти ӹлӹштӓшлӓн журналвлӓм анжыкташ',
-'currentrev-asof'        => 'Кӹзӹтшӹ верси $1-штӹ',
-'revisionasof'           => 'Верси $1',
-'previousrevision'       => '← Тошты/первирӓкшӹ верси',
-'nextrevision'           => 'Весӹ→',
-'currentrevisionlink'    => 'Ти ылшы верси',
-'cur'                    => 'кӹзӹтшӹ',
-'last'                   => 'анзыц ылшы',
-'histlegend'             => "Ынгылдарымашвлӓ: (кӹзӹтшӹ) —кӹзӹтшӹ верси гӹц айыртемӓлтеш ; (анзыл.) — анзылныш верси гӹц айыртемӓлтеш; '''и''' — изи вашталтымаш",
+'viewpagelogs' => 'Ти ӹлӹштӓшлӓн журналвлӓм анжыкташ',
+'currentrev-asof' => 'Кӹзӹтшӹ верси $1-штӹ',
+'revisionasof' => 'Верси $1',
+'previousrevision' => '← Тошты/первирӓкшӹ верси',
+'nextrevision' => 'Весӹ→',
+'currentrevisionlink' => 'Ти ылшы верси',
+'cur' => 'кӹзӹтшӹ',
+'last' => 'анзыц ылшы',
+'histlegend' => "Ынгылдарымашвлӓ: (кӹзӹтшӹ) —кӹзӹтшӹ верси гӹц айыртемӓлтеш ; (анзыл.) — анзылныш верси гӹц айыртемӓлтеш; '''и''' — изи вашталтымаш",
 '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'          => 'Ӹлӹштӓшӹшты шукырак информацим нӓлӓш манын [[{{MediaWiki:Helppage}}| палшыкым анжал]]',
-'searchsubtitle'            => 'Кӹчӓлмӹ годым«[[:$1]]» ([[Special:Prefixindex/$1|кыды, ти лӹм доно тӹнгӓлӓлтеш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|кыдывлӓ ти лӹмӹм анжыктенӹт]])',
-'searchsubtitleinvalid'     => 'Ядмы семӹнь «$1»',
-'notitlematches'            => 'Ӹлӹштӓшвлӓн лӹм икань агыл',
-'notextmatches'             => 'Ӹлӹштӓшӹн текствлӓ доно икань агыл',
-'prevn'                     => '{{PLURAL:$1|анзылнышы $1|анзылнышывлӓ $1|анзылнышывлӓ $1}}',
-'nextn'                     => '{{PLURAL:$1|паштек кешӹ $1|паштек кешӹвлӓ $1|паштек кешӹвлӓ $1}}',
-'viewprevnext'              => 'Анжен лӓктӓш ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|$2 шамак|$2 шамаквлӓ|$2 шамак}})',
-'search-redirect'           => '(вес вӓрӹш ажед колташ $1)',
-'search-section'            => '(кӹдеж $1)',
-'search-suggest'            => 'Анят тӓ $1 шанендӓ:',
-'search-interwiki-caption'  => 'Техеньок проектвлӓ',
-'search-interwiki-default'  => '$1 результ.:',
-'search-interwiki-more'     => '(эче)',
-'search-mwsuggest-enabled'  => 'согоньвлӓ доно',
+'searchresults' => 'Кӹчӓлмӓшӹн результатшы',
+'searchresults-title' => 'Кӹчӓлӓш «$1»',
+'searchresulttext' => 'Ӹлӹштӓшӹшты шукырак информацим нӓлӓш манын [[{{MediaWiki:Helppage}}| палшыкым анжал]]',
+'searchsubtitle' => 'Кӹчӓлмӹ годым«[[:$1]]» ([[Special:Prefixindex/$1|кыды, ти лӹм доно тӹнгӓлӓлтеш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|кыдывлӓ ти лӹмӹм анжыктенӹт]])',
+'searchsubtitleinvalid' => 'Ядмы семӹнь «$1»',
+'notitlematches' => 'Ӹлӹштӓшвлӓн лӹм икань агыл',
+'notextmatches' => 'Ӹлӹштӓшӹн текствлӓ доно икань агыл',
+'prevn' => '{{PLURAL:$1|анзылнышы $1|анзылнышывлӓ $1|анзылнышывлӓ $1}}',
+'nextn' => '{{PLURAL:$1|паштек кешӹ $1|паштек кешӹвлӓ $1|паштек кешӹвлӓ $1}}',
+'viewprevnext' => 'Анжен лӓктӓш ($1 {{int:pipe-separator}} $2) ($3)',
+'search-result-size' => '$1 ({{PLURAL:$2|$2 шамак|$2 шамаквлӓ|$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'                 => "'''Шотыш нӓлдӓ.''' Нимат ак лиӓлт гӹнь, керӓл шамакым цилӓ вӓреок кӹчӓлӓш ак тӹнгӓл. Кӹчӓлжӹ манын,   ''all:'' префиксӹм кычылтда.  Тенге тӓ лӹмвлӓм мода (кӱ тишкӹ сирӓ, нӹнӹн Кӓнгӓшӹмӓшвлӓштӹмӓт, шаблонвлӓмӓт дӓ молымат), уке гӹнь, шукырак лӹмӹм анжыктыда",
-'powersearch'               => 'Кымдан кӹчӓлмӓш',
-'powersearch-legend'        => 'Кымдан кӹчӓлмӓш',
-'powersearch-ns'            => 'Кымдецвлӓштӹ лӹмвлӓм кӹчӓлмӓш:',
-'powersearch-redir'         => 'Ажедмӓшвлӓм анжыкташ',
-'powersearch-field'         => 'Кӹчӓлӓш',
+'nonefound' => "'''Шотыш нӓлдӓ.''' Нимат ак лиӓлт гӹнь, керӓл шамакым цилӓ вӓреок кӹчӓлӓш ак тӹнгӓл. Кӹчӓлжӹ манын,   ''all:'' префиксӹм кычылтда.  Тенге тӓ лӹмвлӓм мода (кӱ тишкӹ сирӓ, нӹнӹн Кӓнгӓшӹмӓшвлӓштӹмӓт, шаблонвлӓмӓт дӓ молымат), уке гӹнь, шукырак лӹмӹм анжыктыда",
+'powersearch' => 'Кымдан кӹчӓлмӓш',
+'powersearch-legend' => 'Кымдан кӹчӓлмӓш',
+'powersearch-ns' => 'Кымдецвлӓштӹ лӹмвлӓм кӹчӓлмӓш:',
+'powersearch-redir' => 'Ажедмӓшвлӓм анжыкташ',
+'powersearch-field' => 'Кӹчӓлӓш',
 
 # Preferences page
-'preferences'   => 'Настройкывлӓ',
+'preferences' => 'Настройкывлӓ',
 'mypreferences' => 'Настройкывлӓ',
 
 # Groups
@@ -397,54 +396,54 @@ $messages = array(
 'action-edit' => 'ти ӹлӹштӓшӹм тӧрлӹмӓш',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|вашталтымаш|вашталтымашвлӓ|вашталтымаш}}',
-'recentchanges'                  => 'У тӧрлӹмӓшвлӓ',
-'recentchanges-legend'           => 'У тӧрлӹмашвлӓн настройкышты',
+'nchanges' => '$1 {{PLURAL:$1|вашталтымаш|вашталтымашвлӓ|вашталтымаш}}',
+'recentchanges' => 'У тӧрлӹмӓшвлӓ',
+'recentchanges-legend' => 'У тӧрлӹмашвлӓн настройкышты',
 'recentchanges-feed-description' => 'Ти лиништӹ Викиштӹш вашталтмашвлӓм анжалаш.',
-'rcnote'                         => "{{PLURAL:$1|Пӹтӓртӹш вашталтымаш'''$1''' вашталтымаш|Пӹтӓртыш '''$1''' вашталтымашвлӓ|Пӹтӓртӹш '''$1''' вашталтымашвлӓ}}  '''$2''' {{PLURAL:$2|кечӹштӹ|кечӹштӹ|кечӹвлӓштӹ}}, ти моментеш $5 $4.",
-'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'               => 'Цилӓ анжыкташ агыл',
+'rcnote' => "{{PLURAL:$1|Пӹтӓртӹш вашталтымаш'''$1''' вашталтымаш|Пӹтӓртыш '''$1''' вашталтымашвлӓ|Пӹтӓртӹш '''$1''' вашталтымашвлӓ}}  '''$2''' {{PLURAL:$2|кечӹштӹ|кечӹштӹ|кечӹвлӓштӹ}}, ти моментеш $5 $4.",
+'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-title'   => 'Кӹлдӓлтшӹ торлӹмӓшвлӓ $1 доно',
+'recentchangeslinked' => 'Кӹлдӓлтшӹ тӧрлӹмӓшвлӓ',
+'recentchangeslinked-feed' => 'Кӹлдӓлтшӹ тӧрлӹмшвлӓ',
+'recentchangeslinked-title' => 'Кӹлдӓлтшӹ торлӹмӓшвлӓ $1 доно',
 'recentchangeslinked-summary' => "Тиштӹ шукердӹ агыл ӹштӹмӹ вашталтмашвлӓ анжыкталтыт, кышты ти ӹлыштӓш ажедеш (ӓль ти категоришкӹ пырышывлӓ). Ӹлӹштӓшвлӓ, кыдывлӓ пырат [[Special:Watchlist|тӓмдӓн вангӹмӹ списокда]] графаш,  '''айырымы ылыт'''.",
-'recentchangeslinked-page'    => 'Ӹлӹштӓшӹн лӹмжӹ:',
-'recentchangeslinked-to'      => 'Анешлӓ, тӹ ӹлыштӓшвлӓштӹш вашталтымашвлӓм анжыкташ, кыдывлӓ ти ӹлӹштӓшӹшкӹ ажедӹт',
+'recentchangeslinked-page' => 'Ӹлӹштӓшӹн лӹмжӹ:',
+'recentchangeslinked-to' => 'Анешлӓ, тӹ ӹлыштӓшвлӓштӹш вашталтымашвлӓм анжыкташ, кыдывлӓ ти ӹлӹштӓшӹшкӹ ажедӹт',
 
 # Upload
-'upload'        => 'Файлым темӓш',
+'upload' => 'Файлым темӓш',
 'uploadlogpage' => 'Оптымашвлӓн журналышты',
 'uploadedimage' => 'оптымы «[[$1]]»',
 
 # File description page
-'filehist'                  => 'Файлын историжӹ',
-'filehist-help'             => 'Файл тӹнӓм махань ылын, тидӹм ужаш манын датым темдӓлдӓ.',
-'filehist-current'          => 'кӹзӹтшӹ',
-'filehist-datetime'         => 'Дата/жеп',
-'filehist-thumb'            => 'Миниатюра',
-'filehist-thumbtext'        => '$1 гӹц версилӓн миниатюра вариантжы',
-'filehist-user'             => 'Сирӹшӹ',
-'filehist-dimensions'       => 'Объектӹн размержӹ',
-'filehist-comment'          => 'Пӓлӹквлӓ',
-'imagelinks'                => 'Файлышкы ажедмӓшвлӓ',
-'linkstoimage'              => '{{PLURAL:$1|Паштек $1 вес ӹлӹштӓш ажедеш| $1 вес ӹлӹштӓшвлӓ ажедӹт|Вес  $1 ӹлӹштӓшвлӓ ти файлыш}} ажедӹт:',
-'sharedupload'              => 'Ти $1 файлым вес проектвлӓштӹ кычылташ лиэш',
+'filehist' => 'Файлын историжӹ',
+'filehist-help' => 'Файл тӹнӓм махань ылын, тидӹм ужаш манын датым темдӓлдӓ.',
+'filehist-current' => 'кӹзӹтшӹ',
+'filehist-datetime' => 'Дата/жеп',
+'filehist-thumb' => 'Миниатюра',
+'filehist-thumbtext' => '$1 гӹц версилӓн миниатюра вариантжы',
+'filehist-user' => 'Сирӹшӹ',
+'filehist-dimensions' => 'Объектӹн размержӹ',
+'filehist-comment' => 'Пӓлӹквлӓ',
+'imagelinks' => 'Файлышкы ажедмӓшвлӓ',
+'linkstoimage' => '{{PLURAL:$1|Паштек $1 вес ӹлӹштӓш ажедеш| $1 вес ӹлӹштӓшвлӓ ажедӹт|Вес  $1 ӹлӹштӓшвлӓ ти файлыш}} ажедӹт:',
+'sharedupload' => 'Ти $1 файлым вес проектвлӓштӹ кычылташ лиэш',
 'uploadnewversion-linktext' => 'Файлын у версижӹм темӓш',
 
 # Random page
@@ -454,30 +453,30 @@ $messages = array(
 'statistics' => 'Статистика',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|байт|байтан|байтвлӓ}}',
-'nmembers'      => '$1 {{PLURAL:$1|объект|объектӹн|объект}}',
-'prefixindex'   => 'Ӹлыштӓшвлӓн лӹмӹштӹн тӹнгӓлтӹш доно анжыктымы',
-'newpages'      => 'У ӹлӹштӓшвлӓ',
-'move'          => 'Вес лӹмӹм пуаш',
-'movethispage'  => 'Ти ӹлыштӓшӹн лӹмжӹм вашталташ',
+'nbytes' => '$1 {{PLURAL:$1|байт|байтан|байтвлӓ}}',
+'nmembers' => '$1 {{PLURAL:$1|объект|объектӹн|объект}}',
+'prefixindex' => 'Ӹлыштӓшвлӓн лӹмӹштӹн тӹнгӓлтӹш доно анжыктымы',
+'newpages' => 'У ӹлӹштӓшвлӓ',
+'move' => 'Вес лӹмӹм пуаш',
+'movethispage' => 'Ти ӹлыштӓшӹн лӹмжӹм вашталташ',
 'pager-newer-n' => '{{PLURAL:$1|урак|ураквлӓ|ураквлӓ гӹц}} $1',
 'pager-older-n' => '{{PLURAL:$1|тоштырак|тоштыраквлӓ|тоштыраквлӓ гӹц}} $1',
 
 # Book sources
-'booksources'               => 'Книгӓн кӹлвлӓжӹ (источник)',
+'booksources' => 'Книгӓн кӹлвлӓжӹ (источник)',
 'booksources-search-legend' => 'Книгӓ гишӓн информацим кӹчӓлмӓш',
-'booksources-go'            => 'Моаш',
+'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
@@ -493,111 +492,111 @@ $messages = array(
 'emailuser' => 'Сирӹшӹлӓн сирмӓш',
 
 # Watchlist
-'watchlist'         => 'Вӓнгӹмӹ список',
-'mywatchlist'       => 'Вӓнгӹмӹ сирмӓш, список',
-'addedwatchtext'    => 'Ӹлӹштӓшӹм«[[:$1]]» тӓмдӓн вӓнгӹмӹ [[Special:Watchlist|ӹлӹштӓшӹшкӹдӓ пыртымы]]. Тидӹ паштек ӹштӹмӹ ӹлӹштӓшӹн вашталтымашвлӓ  ти списокышты анжыктымы дӓ тенгеок кӹжгӹ буквавлӓ доно у вашталтымашвлӓн списокышты пӓлдӹртӹмӹ лиэш[[Special:RecentChanges| пӓлдӹртӹмӹ лит]] нӹнӹм  айыраш куштылгырак лижӹ манын.',
-'removedwatchtext'  => 'Ӹлӹштӓш «[[:$1]]» тӓмдӓн вӓнгӹмӹ ӹлӹштӓшдӓ гӹц [[Special:Watchlist|карангдымы]].',
-'watch'             => 'Вӓнгӓш',
-'watchthispage'     => 'Ти ӹлӹштӓшӹм вӓнгӓш',
-'unwatch'           => 'Вӓнгӓш агыл',
+'watchlist' => 'Вӓнгӹмӹ список',
+'mywatchlist' => 'Вӓнгӹмӹ сирмӓш, список',
+'addedwatchtext' => 'Ӹлӹштӓшӹм«[[:$1]]» тӓмдӓн вӓнгӹмӹ [[Special:Watchlist|ӹлӹштӓшӹшкӹдӓ пыртымы]]. Тидӹ паштек ӹштӹмӹ ӹлӹштӓшӹн вашталтымашвлӓ  ти списокышты анжыктымы дӓ тенгеок кӹжгӹ буквавлӓ доно у вашталтымашвлӓн списокышты пӓлдӹртӹмӹ лиэш[[Special:RecentChanges| пӓлдӹртӹмӹ лит]] нӹнӹм  айыраш куштылгырак лижӹ манын.',
+'removedwatchtext' => 'Ӹлӹштӓш «[[:$1]]» тӓмдӓн вӓнгӹмӹ ӹлӹштӓшдӓ гӹц [[Special:Watchlist|карангдымы]].',
+'watch' => 'Вӓнгӓш',
+'watchthispage' => 'Ти ӹлӹштӓшӹм вӓнгӓш',
+'unwatch' => 'Вӓнгӓш агыл',
 'watchlist-details' => 'Тӓмдӓн вӓнгӹмӹ списокыштыда $1 {{PLURAL:$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
-'watching'   => 'Вӓнгӹмӹ списокыш пырташ...',
+'watching' => 'Вӓнгӹмӹ списокыш пырташ...',
 'unwatching' => 'Вӓнгӹмӹ список гӹц карангдаш...',
 
 # Delete
-'deletepage'            => 'Ӹлӹштӓшӹм карангдаш',
-'confirmdeletetext'     => 'Тӓ ӹлӹштӓшӹн (изображенин) цилӓ информацижӹм  дӓ базышты ылшы вашталтымашвлӓн историм ӹштӹл шуаш ядыда. Пуры лидӓ, дӓ лачокат ма тенге ӹштӹнедӓ, шаналтыда. Махань последствивлӓ тидӹ паштек вычат, ынгылышашлык ылыда дӓ тидӹм  ти кӹдешӹтӹ анжыктымы правилывлӓштӹ анжалда [[{{MediaWiki:Policy-url}}]].',
-'actioncomplete'        => 'Лачокат ӹштӹмӹ',
-'deletedtext'           => '«$1» карангдымы.
+'deletepage' => 'Ӹлӹштӓшӹм карангдаш',
+'confirmdeletetext' => 'Тӓ ӹлӹштӓшӹн (изображенин) цилӓ информацижӹм  дӓ базышты ылшы вашталтымашвлӓн историм ӹштӹл шуаш ядыда. Пуры лидӓ, дӓ лачокат ма тенге ӹштӹнедӓ, шаналтыда. Махань последствивлӓ тидӹ паштек вычат, ынгылышашлык ылыда дӓ тидӹм  ти кӹдешӹтӹ анжыктымы правилывлӓштӹ анжалда [[{{MediaWiki:Policy-url}}]].',
+'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'       => "Тӓмдӓн учетный карточкыдан ӹшӹклӹмӓш кӱкшӹцӹм вашталташ манын ситӓлык праважы уке. Ти ӹлӹштӓшӹм шӹндӹдӓ'''$1''':",
-'protect-cascadeon'           => 'Ти ӹлӹштӓшӹм {{PLURAL:$1|-шкы пыртымат, ӹшӹклӓлтеш, кыды ӱлнӹрӓк ылшы ӹлӹштӓшӹш|ӹлӹштӓшвлӓшкӹ ажедеш, кышкы }} каскадан ӹшӹклӹмашӹм шӹндӹмӹ. Тӓ ти ӹлӹштӓшӹн ӹшӹклӹмӹ кӱкшӹцшӹм вашталтен кердӹдӓ, но тидӹ каскадан ӹшӹклӹмашӹм ак тӹкӓл лиэш.',
-'protect-default'             => 'Ӹшӹклӹмӹ агыл',
-'protect-fallback'            => 'Разрешени келеш «$1»',
+'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-default' => 'Ӹшӹклӹмӹ агыл',
+'protect-fallback' => 'Разрешени келеш «$1»',
 'protect-level-autoconfirmed' => 'У дӓ регистрируялтшы агыл сирӹшӹвла гӹц ӹшӹклӓш',
-'protect-level-sysop'         => 'Администраторвлӓ веле',
-'protect-summary-cascade'     => 'каскадан',
-'protect-expiring'            => 'жепшӹ пӹтӓ $1 (UTC)',
-'protect-cascade'             => 'Ти ӹлӹштӓшӹшкӹ пыртымы ӹлӹштӓшвлӓм ӹшӹклӓш (каскадан ӹшӹклӹмӓш)',
-'protect-cantedit'            => 'Ти текстӹм тӧрлӓш правада укеӓт, тӓ ти ӹлӹштӓшӹн ӹшӹклӹмӹ кӱкшӹцшӹм вашталтен ада керд.',
-'restriction-type'            => 'Прававлӓ:',
-'restriction-level'           => 'Пыраш лимӹ кӱкшӹц:',
+'protect-level-sysop' => 'Администраторвлӓ веле',
+'protect-summary-cascade' => 'каскадан',
+'protect-expiring' => 'жепшӹ пӹтӓ $1 (UTC)',
+'protect-cascade' => 'Ти ӹлӹштӓшӹшкӹ пыртымы ӹлӹштӓшвлӓм ӹшӹклӓш (каскадан ӹшӹклӹмӓш)',
+'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)',
-'uctop'               => '(пӹтӓртӹш)',
-'month'               => 'Тӹлзӹ гӹц (ирӹрӓкӓт):',
-'year'                => 'Ти и гӹц (ирӹрӓкӓт):',
+'mycontris' => 'Мӹньын лӓктӹшем',
+'contribsub2' => 'Лӓктӹш $1 ($2)',
+'uctop' => '(пӹтӓртӹш)',
+'month' => 'Тӹлзӹ гӹц (ирӹрӓкӓт):',
+'year' => 'Ти и гӹц (ирӹрӓкӓт):',
 
-'sp-contributions-newbies'  => 'Лач тӹ лӓктӹшвлӓм веле анжыкташ, кыдывлӓм у сирӹмӓшвлӓштӹ шотыш нӓлмӹ',
+'sp-contributions-newbies' => 'Лач тӹ лӓктӹшвлӓм веле анжыкташ, кыдывлӓм у сирӹмӓшвлӓштӹ шотыш нӓлмӹ',
 'sp-contributions-blocklog' => 'блокировкывлӓ',
-'sp-contributions-search'   => 'Лӓктӹшӹм кӹчӓлмӓш',
+'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',
-'ipblocklist'              => 'Блокируйымы IP-адресвлӓ дон шотыш нӓлмӹ сирӹмӓшвлӓ',
-'blocklink'                => 'блокируяш',
-'unblocklink'              => 'блокировкым пачаш',
-'change-blocklink'         => 'блокировкым вашталташ',
-'contribslink'             => 'лӓктӹш, мам ӹштендӓ тӹдӹ',
-'blocklogpage'             => 'Блокировкывлӓн журналышты',
-'blocklogentry'            => 'периодеш [[$1]] блокируйымы$2 $3',
-'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',
+'ipblocklist' => 'Блокируйымы IP-адресвлӓ дон шотыш нӓлмӹ сирӹмӓшвлӓ',
+'blocklink' => 'блокируяш',
+'unblocklink' => 'блокировкым пачаш',
+'change-blocklink' => 'блокировкым вашталташ',
+'contribslink' => 'лӓктӹш, мам ӹштендӓ тӹдӹ',
+'blocklogpage' => 'Блокировкывлӓн журналышты',
+'blocklogentry' => 'периодеш [[$1]] блокируйымы$2 $3',
+'unblocklogentry' => 'блокировкым пачмы $1',
 'block-log-flags-nocreate' => 'учётный сирмӓшвлӓн регистрацим запрещӓйӹмӹ',
 
 # Move page
-'movepagetext'     => 'Ӱлнӹш формым кычылт, тӓ ӹлӹштӓшлӓн у лӹмӹм пуэдӓ дӓ тӹ годымок вашталтымашвлӓн журналышты у вӓрӹш шӹндедӓ. Тошты лӹм у лӹмӹн  вес вӓрӹшкӹ колтышы семӹнь лиэш. Тошты лӹмӹшкӹ пыртымы вес вӓрӹшкӹ колтымашвлӓм автоматически уэмден кердӹдӓ. Тидӹм ада ӹштӹ гӹнь, пуры лидӓ, контролируен лӓкдӓ [[Special:DoubleRedirects|коктым]] дон [[Special:BrokenRedirects|кӹрмӹ вес вӓре ажедмӓшвлӓм]]. Кышкы ажедмӓшвлӓ анжыктышашлык ылыт, тӓ тидӹ верц вӓшештедӓ. Шотыш нӓлдӓ, у лӹм доно ӹлӹштӓш улы гӹнь, тӹдӹн лӹмжӹ «ак вашталт»;  вес вӓрӹшкӹ колтымаш ӓль охыр дӓ тӧрлӹмӓшвлӓн историштӹ уке ылмы гӹц пасна.
+'movepagetext' => 'Ӱлнӹш формым кычылт, тӓ ӹлӹштӓшлӓн у лӹмӹм пуэдӓ дӓ тӹ годымок вашталтымашвлӓн журналышты у вӓрӹш шӹндедӓ. Тошты лӹм у лӹмӹн  вес вӓрӹшкӹ колтышы семӹнь лиэш. Тошты лӹмӹшкӹ пыртымы вес вӓрӹшкӹ колтымашвлӓм автоматически уэмден кердӹдӓ. Тидӹм ада ӹштӹ гӹнь, пуры лидӓ, контролируен лӓкдӓ [[Special:DoubleRedirects|коктым]] дон [[Special:BrokenRedirects|кӹрмӹ вес вӓре ажедмӓшвлӓм]]. Кышкы ажедмӓшвлӓ анжыктышашлык ылыт, тӓ тидӹ верц вӓшештедӓ. Шотыш нӓлдӓ, у лӹм доно ӹлӹштӓш улы гӹнь, тӹдӹн лӹмжӹ «ак вашталт»;  вес вӓрӹшкӹ колтымаш ӓль охыр дӓ тӧрлӹмӓшвлӓн историштӹ уке ылмы гӹц пасна.
 Тидӹ теве мам анжыкта, самынь у лӹмӹм пуэндӓ гӹнь, изиш анзыцырак ӹлӹштӓшӹн махань лӹмжӹ ылын, тӹ лӹмӹшкок вашталтен кердӹдӓ,  но ти улы ылшы ӹлӹштӓшӹм тӓ ӹштӹл шуэн ада керд.
 «ӒШТӸДӒ!»
 У лӹмӹм пумаш  «популярный» ӹлӹштӓшвлӓлӓн пиш кого вычыдымашвлӓм канден кердеш.
@@ -606,19 +605,19 @@ $messages = array(
 *Техень лӹмӓн кӓнгӓшӹмӓш ӹлӹштӓш тӹтежӓт улы ӓль
 *ӱлнӹрӓк ылшы  ныреш кагырикӹм ыдыралделда.
 Техень годым, келеш гӹнь, тӓ ти ӹлыштӓшӹм вес вӓрӹшкӹ кид доно шӹндӹшӓшлык ӓль ушештӹшӓшлык ылыда.',
-'movearticle'      => 'Ӹлӹштӓш лӹмӹм вашталташ',
-'newtitle'         => 'У лӹм:',
-'move-watch'       => 'Ти ӹлыштӓшӹм вӓнгӹмӓшӹн списокыш пыртымыла',
-'movepagebtn'      => 'Ӹлӹштӓшӹн лӹмжӹм вашталташ',
-'pagemovedsub'     => 'Ӹлӹштӓшӹн лӹмжӹм вашталтымы',
-'movepage-moved'   => "'''Ӹлӹштӓшӹн  «$1» лӹмжӹ ӹнде«$2»'''",
-'articleexists'    => 'Техень лӹмӓн ӹлӹштӓш тӹтежӓт улы. Пуры лидӓ, вес лӹмӹм айырыда.',
-'talkexists'       => "'''Ӹлӹштӓш лӹм вашталтымы, но техень лӹмӓн ӹлӹштӓш тӹтежӓт улы, кӓнгӓшӹмӓш ӹлӹштӓшӹн лӹмжӹм вашталташ ак ли. Пуры лидӓ, кид доно нӹнӹм ушыда.'''",
-'movedto'          => 'техеньӹш вашталтымы',
-'movetalk'         => 'Ти кӓнгӓшӹмӓш ӹлӹштӓшӹн лӹмжӹм вашталташ',
-'movelogpage'      => 'Лӹмвлӓм вашталтымы журнал',
-'movereason'       => 'Ӓмӓлжӹ:',
-'revertmove'       => 'лишӹц колтымаш',
+'movearticle' => 'Ӹлӹштӓш лӹмӹм вашталташ',
+'newtitle' => 'У лӹм:',
+'move-watch' => 'Ти ӹлыштӓшӹм вӓнгӹмӓшӹн списокыш пыртымыла',
+'movepagebtn' => 'Ӹлӹштӓшӹн лӹмжӹм вашталташ',
+'pagemovedsub' => 'Ӹлӹштӓшӹн лӹмжӹм вашталтымы',
+'movepage-moved' => "'''Ӹлӹштӓшӹн  «$1» лӹмжӹ ӹнде«$2»'''",
+'articleexists' => 'Техень лӹмӓн ӹлӹштӓш тӹтежӓт улы. Пуры лидӓ, вес лӹмӹм айырыда.',
+'talkexists' => "'''Ӹлӹштӓш лӹм вашталтымы, но техень лӹмӓн ӹлӹштӓш тӹтежӓт улы, кӓнгӓшӹмӓш ӹлӹштӓшӹн лӹмжӹм вашталташ ак ли. Пуры лидӓ, кид доно нӹнӹм ушыда.'''",
+'movedto' => 'техеньӹш вашталтымы',
+'movetalk' => 'Ти кӓнгӓшӹмӓш ӹлӹштӓшӹн лӹмжӹм вашталташ',
+'movelogpage' => 'Лӹмвлӓм вашталтымы журнал',
+'movereason' => 'Ӓмӓлжӹ:',
+'revertmove' => 'лишӹц колтымаш',
 
 # Export
 'export' => 'Артикльвлӓм экспортируйымаш',
@@ -627,67 +626,67 @@ $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-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'                  => '«{{SITENAME}}» проект доно справочник',
-'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-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' => '«{{SITENAME}}» проект доно справочник',
+'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-undo'                    => 'Тӧрлӹмӹм ӹштӹл шуаш, анзыц анжалмым  дӓ  лиэш гӹнь вашталтымашын  ӓмӓлжӹм анжыкташ',
+'tooltip-watch' => 'Ти ӹлӹштӓшӹм вӓнгӹмӹ списокыш пырташ',
+'tooltip-rollback' => 'Мам анзыцда тӧрлӹшӹ ӹштен, тӹдым ик гӓнӓ темдӓлок ӹштӹл шуаш',
+'tooltip-undo' => 'Тӧрлӹмӹм ӹштӹл шуаш, анзыц анжалмым  дӓ  лиэш гӹнь вашталтымашын  ӓмӓлжӹм анжыкташ',
 
 # Browsing diffs
 'previousdiff' => '← Анзыл тӧрлӹмӓш',
-'nextdiff'     => 'Вес тӧрлӹмӓш →',
+'nextdiff' => 'Вес тӧрлӹмӓш →',
 
 # 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
@@ -698,11 +697,11 @@ $messages = array(
 Тидӹ паштек ажедмӓшвлӓ, кыдывлӓм ти корнышты анжыктымы, исключени семӹнь анжымы лит дӓ тӹшкӹ ти изображеним шӹндӓш лиэш.',
 
 # Metadata
-'metadata'          => 'Метадата',
-'metadata-help'     => 'Дигитальный камеры  дӓ сканер доно шӹндӹмӹ файлыштыш дополнительный информаци. Ӹштӹмӹ паштек файлым редактируйымы гӹнь, тӹнӓм кыды-тидӹ параметржӹ анжыктымы изображенилан ак вӓшештӹ.',
-'metadata-expand'   => 'Дополнительный информацим анжыкташ',
+'metadata' => 'Метадата',
+'metadata-help' => 'Дигитальный камеры  дӓ сканер доно шӹндӹмӹ файлыштыш дополнительный информаци. Ӹштӹмӹ паштек файлым редактируйымы гӹнь, тӹнӓм кыды-тидӹ параметржӹ анжыктымы изображенилан ак вӓшештӹ.',
+'metadata-expand' => 'Дополнительный информацим анжыкташ',
 'metadata-collapse' => 'Дополнительный информацим шӹлтӓш',
-'metadata-fields'   => 'Ти списокышты ылшы метадатывлӓн нырыштым изображенин ӹлӹштӓшӹштӹ анжыктымы лиэш, весӹвлӓжӹ шӹлтӹмӹ лит.
+'metadata-fields' => 'Ти списокышты ылшы метадатывлӓн нырыштым изображенин ӹлӹштӓшӹштӹ анжыктымы лиэш, весӹвлӓжӹ шӹлтӹмӹ лит.
 * make
 * model
 * datetimeoriginal
@@ -718,18 +717,18 @@ $messages = array(
 * gpsaltitude',
 
 # 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 9035749..62a6fbb 100644 (file)
@@ -583,6 +583,8 @@ Pertanyaan: $2',
 'filereadonlyerror' => 'Fail "$1" tidak dapat diubah suai kerana repositori fail "$2" berada dalam ragam baca sahaja.
 
 Pentadbir yang menguncinya memberikan penjelasan yang berikut: "$3".',
+'invalidtitle-knownnamespace' => 'Tajuk tidak sah dengan ruang nama "$2" dan teks "$3"',
+'invalidtitle-unknownnamespace' => 'Tajuk tidak sah dengan nombor ruang nama tidak dikenali $1 dan teks "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Konfigurasi rosak: pengimbas virus yang tidak diketahui: ''$1''",
@@ -953,6 +955,12 @@ Argumen-argumen ini telah ditinggalkan.',
 'parser-template-loop-warning' => 'Gelung templat dikesan: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Had pengulangan templat dilebihi ($1)',
 'language-converter-depth-warning' => 'Had kedalaman penukar bahasa dilepasi ($1)',
+'node-count-exceeded-category' => 'Laman yang melebihi had kiraan nod',
+'node-count-exceeded-warning' => 'Laman terlebih kiraan nod',
+'expansion-depth-exceeded-category' => 'Laman yang melebihi had kedalaman peluasan',
+'expansion-depth-exceeded-warning' => 'Laman terlebih dalam peluasan',
+'parser-unstrip-loop-warning' => 'Gelung unstrip dikesan',
+'parser-unstrip-recursion-limit' => 'Had rekursi unstrip dilampaui ($1)',
 
 # "Undo" feature
 'undo-success' => 'Suntingan ini boleh dibatalkan. Sila semak perbandingan di bawah untuk mengesahkan bahawa anda betul-betul mahu melakukan tindakan ini, kemudian simpan perubahan tersebut.',
@@ -1132,7 +1140,8 @@ Sila pastikan bahawa perubahan ini akan mengekalkan kesinambungan sejarah laman.
 
 # Diffs
 'history-title' => 'Sejarah semakan bagi "$1"',
-'difference' => '(Perbezaan antara semakan)',
+'difference-title' => 'Perbezaan antara semakan-semakan "$1"',
+'difference-title-multipage' => 'Perbezaan antara laman "$1" dan "$2"',
 'difference-multipage' => '(Perbezaan antara laman)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Bandingkan versi-versi yang dipilih',
@@ -1760,6 +1769,7 @@ Untuk keselamatan optimum, img_auth.php telah dilumpuhkan.',
 'http-curl-error' => 'Ralat mendapatkan URL: $1',
 'http-host-unreachable' => 'URL tidak dapat dicapai.',
 'http-bad-status' => 'Berlaku masalah ketika permintaan HTTP: $1 $2',
+'http-truncated-body' => 'Jasad permohonan diterima separa-separa sahaja.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL tidak dapat dicapai',
index 68a112a..90e43ba 100644 (file)
@@ -1201,7 +1201,6 @@ Nota li l-użu tal-links tan-navigazzjoni jagħmel reset tal-kolonna.",
 
 # Diffs
 'history-title' => 'Kronoloġija tal-modifiki ta\' "$1"',
-'difference' => '(Differenzi bejn ir-reviżjonijiet)',
 'difference-multipage' => '(Differenzi bejn il-paġni)',
 'lineno' => 'Linja $1:',
 'compareselectedversions' => 'Qabbel il-verżjonijiet magħżula',
index 990892b..8047db0 100644 (file)
@@ -480,7 +480,8 @@ Tu puodes [[Special:Search/{{PAGENAME}}|percurar pul títalo desta páigina]] no
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} percurar ls registros que téngan a ber],
 ó [{{fullurl:{{FULLPAGENAME}}|action=edit}} eiditar esta páigina]</span>.',
 'note' => "'''Abiso:'''",
-'previewnote' => "'''Esto ye solo ua amostra; las altaraçones inda nun fúrun grabadas!'''",
+'previewnote' => "'''Lhembra-te qu'esto ye solo ua amostra.'''
+Las altaraçones inda nun fúrun grabadas!",
 'editing' => 'A eiditar $1',
 'editingsection' => 'A eiditar $1 (cacho)',
 'yourtext' => 'L tou testo',
@@ -538,7 +539,6 @@ Legenda: (atu) = defrénças de la berson atual,
 
 # Diffs
 'history-title' => 'Stórico de eidiçones de "$1"',
-'difference' => '(Defréncias antre rebisones)',
 'lineno' => 'Lhinha $1:',
 'compareselectedversions' => 'Cumparar las bersones marcadas',
 'showhideselectedversions' => 'Amostrar/ocultar bersones selecionadas',
index 07dd16a..b257836 100644 (file)
@@ -643,7 +643,6 @@ Legend: '''({{int:cur}})''' = နောက်ဆုံးမူနှင့် 
 
 # Diffs
 'history-title' => '"$1" ၏ တည်းဖြတ်မူ ရာဇဝင်များ',
-'difference' => 'တည်းဖြတ်မူများ အကြား ကွဲပြားမှုများ',
 'difference-multipage' => '(စာမျက်နှာများကြားမှ ကွဲပြားချက်များ)',
 'lineno' => 'စာကြောင်း $1 -',
 'compareselectedversions' => 'ရွေးချယ်ထားသော မူများကို နှိုင်းယှဉ်ရန်',
index 4b54083..75c4ace 100644 (file)
@@ -813,7 +813,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 
 # Diffs
 'history-title' => 'Историясь ламо вановксонть "$1"',
-'difference' => '(Явовкс ванокснень юткова)',
 'lineno' => 'Киксэсь $1:',
 'compareselectedversions' => 'Кочказь версиятнень аравтомс карадо-каршо',
 'editundo' => 'Велявтомс мекев мезе витнинь-петнинь',
index b798ebc..bc64598 100644 (file)
@@ -10,6 +10,7 @@
  * @author Ali1986
  * @author Ebraminio
  * @author Firuz
+ * @author Mehdi
  * @author Mjbmr
  * @author Parthava (on mzn.wikipedia.org)
  * @author Spacebirdy
@@ -243,7 +244,10 @@ $messages = array(
 'category-empty' => 'ای رج ره ده‌له ئه‌سا هیچی دأنیه',
 'hidden-categories' => '{{PLURAL:$1|خف رج|خف رجون}}',
 'hidden-category-category' => 'خف رجون',
+'category-subcat-count' => '{{PLURAL:$2|اینتا رج همینتا زیر رج ره داینه.|{{PLURAL:$1|اینتا زیررج|اینتا $1 زیررج}} اینتا رج ره {{PLURAL:$1|داینه|دایننه}}؛ اینتا رج در کل حاوی $2 زیررج هسه.}}',
+'category-subcat-count-limited' => 'اینتا رج {{PLURAL:$1|اتا زیر رج|$1 زبررج}} ره شامل بونه.',
 'category-article-count' => '{{PLURAL:$2|این رج همینتا صفحه ره دانّه.|ای  {{PLURAL:$1صفحه|صفحه|$1 ئون}}، $2 جه اینجه دَرنه.}}',
+'category-article-count-limited' => '{{PLURAL:$1|صفحهٔ|$1 صفحهٔ}} که این بن درنه اینتا رج دله قرار هایتنه.',
 'listingcontinuesabbrev' => '(دمباله)',
 'index-category' => 'صفحه‌ئون نمایه بَیی',
 'noindex-category' => 'صفحه‌ئون نمایه نَیی',
index 37fa51c..27db5eb 100644 (file)
@@ -586,7 +586,6 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 
 # Diffs
 'history-title' => '"$1" ītlachiyaliz tlahcuilōlloh',
-'difference' => '(Ahneneuhquiliztli tlapatlaliznepantlah)',
 '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}})',
index af4bff8..a510c60 100644 (file)
@@ -25,10 +25,7 @@ $dateFormats = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Liân-kiat oē té-sûn:',
-'tog-justify' => 'pâi-chê  tōaⁿ-lo̍h',
 'tog-hideminor' => 'Am chòe-kīn ê sió kái-piàn',
-'tog-hidepatrolled' => 'Am chòe-kīn sûn koè--ê  kái-piàn',
-'tog-newpageshidepatrolled' => 'Sin-ia̍h ê chheng-toaⁿ am sûn koè--ê',
 'tog-extendwatchlist' => 'Tián-khui kàm-sī-toaⁿ khoàⁿ só͘-ū ê kái-piàn, m̄-chí sī choè-kīn--ê',
 'tog-usenewrc' => 'Ēng ka-kiông pán khoàⁿ chòe-kīn ê kái-piàn (su-iàu JavaScript)',
 'tog-numberheadings' => 'Phiau-tê chū-tōng pian-hō',
@@ -46,37 +43,22 @@ $messages = array(
 'tog-previewontop' => 'Sûn-khoàⁿ ê lōe-iông tī pian-chi̍p keh-á thâu-chêng',
 'tog-previewonfirst' => 'Thâu-pái pian-chi̍p seng khoàⁿ-māi',
 'tog-nocache' => 'Koaiⁿ-tiāu ia̍h ê cache',
-'tog-enotifwatchlistpages' => 'Kam-sī-tuann ū ē bûn-tsiunn nā ū kái-piàn, kià tiān-tsú-phue hōo guá.',
-'tog-enotifusertalkpages' => 'Guá ê thó-lūn ia̍h  nā ū lâng kái,  kià tiān-tsú-phue hōo guá.',
-'tog-enotifminoredits' => 'Sió pian-chi̍p mā kià tiān-tsú-phue hōo guá.',
-'tog-enotifrevealaddr' => 'Hō͘ pat-lâng khoàⁿ ê tio̍h oá ê tiān-chú-phoe tē-chí',
-'tog-shownumberswatching' => 'Hián-sī tng leh khoàⁿ ê iōng-chiá sò͘-bo̍k',
-'tog-oldsig' => 'Chit-má ê chhiam-miâ:',
 'tog-fancysig' => 'Chhiam-miâ mài chò liân-kiat',
 'tog-externaleditor' => 'Iōng gōa-pō· pian-chi̍p-khì (kan-na hō͘ ko-chhiú, he ài tī lí ê tiān-náu koh siat-tēng. [//www.mediawiki.org/wiki/Manual:External_editors Siông-chêng.])',
 'tog-externaldiff' => 'Iōng gōa-pō· diff (kan-na hō͘ ko-chhiú, he ài tī lí ê tiān-noá koh siat-tēng. [//www.mediawiki.org/wiki/Manual:External_editors Siông-chêng.])',
-'tog-showjumplinks' => 'Hō͘ "thiàu khì" chit ê liân-chiap ē-sái',
-'tog-uselivepreview' => 'Ēng sui khoàⁿ-māi (ài ū JavaScript) (chhì-giām--ê)',
 'tog-forceeditsummary' => 'Pian-chi̍p khài-iàu bô thiⁿ ê sî-chūn, kā goá thê-chhéⁿ',
 'tog-watchlisthideown' => 'Kàm-sī-toaⁿ bián hián-sī goá ê pian-chi̍p',
 'tog-watchlisthidebots' => 'Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p',
 'tog-watchlisthideminor' => 'Kàm-sī-toaⁿ bián hián-sī sió siu-kái',
-'tog-watchlisthideliu' => 'Kàm-sī-toaⁿ bián hián-sī iōng-chiá ū teng-ji̍p ê pian-chi̍p',
-'tog-watchlisthideanons' => 'Kàm-sī-toaⁿ bián hián-sī bû-bêng-sī ê pian-chi̍p',
-'tog-watchlisthidepatrolled' => 'Kàm-sī-toaⁿ bián hián-sī khoàⁿ-koè--ê pian-chi̍p',
 'tog-ccmeonemails' => 'Kià hō͘ pa̍t-lâng ê email sūn-soà kià copy hō͘ goá',
 'tog-diffonly' => 'Diff ē-pêng bián hián-sī ia̍h ê loē-iông',
-'tog-showhiddencats' => 'Hián-sī chhàng khí--lâi ê lūi-pia̍t',
-'tog-norollbackdiff' => 'ká tńg-khí liáu bián-koán cheng-chha goā-chē',
 
 'underline-always' => 'Tiāⁿ-tio̍h',
 'underline-never' => 'Tiāⁿ-tio̍h mài',
 'underline-default' => 'Tòe liû-lám-khì ê default',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Pian-chi̍p sî ēng ê jī-thé hêng-sek:',
 'editfont-default' => 'Tòe liû-lám-khì ê default',
-'editfont-monospace' => 'Monospaced jī-thé',
 'editfont-sansserif' => 'Sans-serif jī-thé',
 'editfont-serif' => 'Serif jī-thé',
 
@@ -155,7 +137,6 @@ $messages = array(
 'article' => 'Loē-iông ia̍h',
 'newwindow' => '(ē khui sin thang-á hián-sī)',
 'cancel' => 'Chhú-siau',
-'moredotdotdot' => 'Iáu-ū',
 'mypage' => 'Góa ê ia̍h',
 'mytalk' => 'Góa ê thó-lūn',
 'anontalk' => 'Chit ê IP ê thó-lūn-ia̍h',
@@ -344,11 +325,6 @@ Téng chi̍t ê cha-sûn sī :
 <blockquote><tt>$1</tt></blockquote>
 tī hâm-sò͘  "<tt>$2</tt>".
 Chu-liāu-khò͘ thoân hoê ê chhò-ngō͘ "<tt>$3: $4</tt>".',
-'dberrortextcl' => '發生一个查詢資料庫語法錯誤,頂一个欲查詢資料庫是:
-"$1"
-佇"$2"
-資料庫送回一个錯誤"$3: $4"',
-'laggedslavemode' => "'''提醒你:'''這頁可能無包括最近改的。",
 'readonly' => 'Chu-liāu-khò· só tiâu leh',
 'enterlockreason' => 'Phah beh hong-só ê lí-iû, pau-koah ko͘-kè siáⁿ-mi̍h sî-chūn ē kái-tû hong-só.',
 'readonlytext' => 'Chu-liāu-khò· hiān-chú-sî só tiâu leh, bô khai-hòng hō· lâng siu-kái. Che tāi-khài sī in-ūi teh pān î-siu khang-khòe, oân-sêng liáu-āu èng-tong tō ē hôe-ho̍k chèng-siông. Hū-chek ê hêng-chèng jîn-oân lâu chit-ê soat-bêng: $1',
@@ -357,9 +333,6 @@ Chu-liāu-khò͘ thoân hoê ê chhò-ngō͘ "<tt>$3: $4</tt>".',
 Che it-poaⁿ sī in-ūi koè-sî ê cheng-chha ia̍h sī le̍k-sú liân-kiat ê ia̍h í-keng hông thâi tiàu.
 
 Nā m̄-sī hit chióng chêng-hêng, lí khó-lêng tú tio̍h nńg-thé ê chhò-ngō͘. Chhiáⁿ pò hō͘ chi̍t ūi [[Special:ListUsers/sysop|koán-lí-goân]], ūi liân-kiat hiâ khì lâu thong-ti .',
-'missingarticle-rev' => '(修訂本#: $1)',
-'missingarticle-diff' => '(精差:$1, $2)',
-'readonly_lag' => '資料庫已經自動鎖牢咧,從屬資料庫伺服器當咧更新綴到主伺服器',
 'internalerror' => 'Loē-pō͘ ê chhò-ngō͘',
 'internalerror_info' => 'Loē-pō͘ ê chhò-ngō͘: $1',
 'fileappenderrorread' => 'Ka-ji̍p(append) ê sî bô-hoat-tō͘ thak "$1".',
@@ -374,7 +347,6 @@ Nā m̄-sī hit chióng chêng-hêng, lí khó-lêng tú tio̍h nńg-thé ê chh
 'formerror' => 'Chhò-gō·: bô-hoat-tō· kā pió sàng chhut khì.',
 'badarticleerror' => 'Bē-tàng tiàm chit ia̍h chip-hêng chit ê tōng-chok.',
 'cannotdelete' => 'Bô-hoat-tō· kā  "$1" hit ê ia̍h a̍h-sī iáⁿ-siōng thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)',
-'cannotdelete-title' => '無法度共"$1"這頁刣掉',
 'badtitle' => 'M̄-chiâⁿ piau-tê',
 'badtitletext' => 'Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.',
 'perfcached' => 'Ē-kha ê chu-liāu ùi khoài-chhú(cache) lâi--ê, só·-í khó-lêng m̄-sī siōng sin ê. Khoài-chhú lāi-té siōng chē khǹg {{PLURAL:$1| chi̍t tiâu|$1 tiâu}}.',
@@ -385,31 +357,21 @@ Chia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.',
 Hâm-sò͘: $1<br />
 Cha-sûn: $2',
 'viewsource' => 'Khoàⁿ goân-sú lōe-iông',
-'viewsource-title' => '看$1的內容',
 'actionthrottled' => 'Tōng-chok hông tóng leh.',
 'actionthrottledtext' => 'Ūi-tio̍h thê-hông lah-sap ê chhú-tì,  lí ū hông hān-chè tī té sî-kan lāi chò siuⁿ chē pái chit ê tōng-chok,  taⁿ lí í-keng chhiau-koè hān-chè.
 Chhiáⁿ tī kúi hun-cheng hāu chiah koh chhì.',
 'protectedpagetext' => 'Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit.',
 'viewsourcetext' => 'Lí ē-sái khoàⁿ ia̍h khó͘-pih chit ia̍h ê goân-sú loē-iông:',
-'viewyourtext' => "你會使共'''你的編輯'''的內容拷備來這頁:",
 'protectedinterface' => 'Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘.',
-'editinginterface' => "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. 
+'editinginterface' => "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h.
 Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn.
 Nā ūi-tio̍h hoan-e̍k, chhiáⁿ khó-lū sú-iōng [//translatewiki.net/wiki/Main_Page?setlang=nan translatewiki.net], MediaWiki ê chāi-tē hoà sū-kang.",
 'sqlhidden' => '(Tshàng SQL tsa-sûn)',
 'cascadeprotected' => 'Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:
 $2',
 'namespaceprotected' => "Lí bô khoân-lī kái '''$1'''  miâ-khong-kan ê ia̍h",
-'customcssprotected' => '你無權限通改這CSS頁面,因為伊包括著其他用戶的個人設定。',
-'customjsprotected' => '你無權限通改這javaScript頁面,因為伊包括著其他用戶的個人設定。',
-'ns-specialprotected' => '特殊頁袂使改得',
-'titleprotected' => "這个標題已經予[[User:$1|$1]]保護牢咧袂使用。理由是''$2''。",
-'filereadonlyerror' => '無法度改"$1" 這个檔案,因為"$2"這个儲存庫佇讀的模式。
-共封鎖的管理員有解說講:"$3"。',
 
 # Virus scanner
-'virus-badscanner' => "毋著的設定: 毋知影的病毒掃瞄器:''$1''",
-'virus-scanfailed' => '掃描失敗(號碼 $1)',
 'virus-unknownscanner' => 'M̄-chai siáⁿ pēⁿ-to̍k:',
 
 # Login and logout pages
@@ -423,14 +385,10 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go
 'yourpassword' => 'Lí ê bi̍t-bé:',
 'yourpasswordagain' => 'Têng phah bi̍t-bé:',
 'remembermypassword' => 'Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng) (tī $1 {{PLURAL:$1|day|days}} kang lāi)',
-'securelogin-stick-https' => '登入後繼續以HTTPS連接',
-'yourdomainname' => '你的網域',
-'externaldberror' => '這可能是因為驗證資料庫錯誤,抑是你hông禁止改你的外部口座。',
 'login' => 'Teng-ji̍p',
 'nav-login-createaccount' => 'Teng-ji̍p / khui sin kháu-chō',
 'loginprompt' => 'Thiⁿ ē-kha ê chu-liāu thang khui sin hō·-thâu a̍h-sī teng-ji̍p {{SITENAME}}.',
 'userlogin' => 'Teng-ji̍p / khui sin kháu-chō',
-'userloginnocreate' => 'Teng-ji̍p',
 'logout' => 'Teng-chhut',
 'userlogout' => 'Teng-chhut',
 'notloggedin' => 'Bô teng-ji̍p',
@@ -439,49 +397,23 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go
 'createaccount' => 'Khui sin kháu-chō',
 'gotaccount' => "Í-keng ū kháu-chō? '''$1'''.",
 'gotaccountlink' => 'Teng-ji̍p',
-'userlogin-resetlink' => '袂記得你登入的資料?',
 'createaccountmail' => 'Thàu koè tiān-chú-phoe',
-'createaccountreason' => 'Lí-iû:',
 'badretype' => 'Lí su-ji̍p ê 2-cho· bi̍t-bé bô tùi.',
 'userexists' => 'Lí beh ti̍h ê iōng-chiá miâ-chheng í-keng ū lâng iōng. Chhiáⁿ kéng pa̍t-ê miâ.',
 'loginerror' => 'Teng-ji̍p chhò-gō·',
 'createaccounterror' => 'Bô hoat-tō͘ khui kháu-chō: $1',
-'nocookiesnew' => '口座開好矣,毋過你猶未登入,
-{{SITENAME}}用cookies記錄用者,
-你無拍開cookies功能,
-請拍開,通記錄你的用者名稱佮密碼。',
-'nocookieslogin' => '{{SITENAME}}用 Cookies 記錄用戶,你共關掉,請拍開閣重新登入。',
-'nocookiesfornew' => '這个用者口座猶未開,阮無法度確認伊的來源,
-請確定你您已經拍開cookies功能了,重新載入這頁閣重試。',
-'noname' => '你無拍一个有效的用者名稱。',
 'loginsuccesstitle' => 'Teng-ji̍p sêng-kong',
 'loginsuccess' => 'Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò "$1".',
 'nosuchuser' => 'Chia bô iōng-chiá hō-chò "$1". Miâ-jī  ū hun toā-siá, sio-siá . Chhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī [[Special:UserLogin/signup|khui sin káu-chō]].',
 'nosuchusershort' => 'Bô "$1" chit ê iōng-chiá miâ.
 Tùi khoàⁿ-māi,  lí phah--ê.',
 'nouserspecified' => 'Lí ài chí-tēng chi̍t ê iōng-chiá miâ.',
-'login-userblocked' => '這个用者已經hông封鎖,無允准登入。',
 'wrongpassword' => 'Lí su-ji̍p ê bi̍t-bé ū têng-tâⁿ. Chhiáⁿ têng chhì.',
 'wrongpasswordempty' => 'Bi̍t-bé keh-á khang-khang. Chhiáⁿ têng chhì.',
-'passwordtooshort' => '密碼至少愛有{{PLURAL:$1|一个字元|$1字元}}',
-'password-name-match' => '你的密碼袂使佮你的用者名稱相仝',
-'password-login-forbidden' => '這个用者名稱佮密碼已經hông禁止',
 'mailmypassword' => 'Kià sin bi̍t-bé hō· góa',
 'passwordremindertitle' => '{{SITENAME}} the-chheN li e bit-be',
-'passwordremindertext' => '有人(可能是你,佇$1 IP地址)已經佇{{SITENAME}}申請新密碼 ($4)。
-用者"$2"的一个臨時密碼已經設定做"$3"。
-若毋是你申請的,你需要馬上登入並且選擇一个新密碼。
-你的臨時密碼會佇{{PLURAL:$5|一工|$5工}}內過期。
-
-若是別人申請的,抑是你已經想起你的密碼,而且不想欲改,
-你會使莫管這个信息而且繼續用你的舊密碼。',
 'noemail' => 'Kì-lo̍k bô iōng-chiá "$1" ê e-mail chū-chí.',
-'noemailcreate' => '你愛提供一个有效的電子批地址',
 'passwordsent' => 'Ū kià sin bi̍t-bé khì "$1" chù-chheh ê e-mail chū-chí. Siu--tio̍h liáu-āu chhiáⁿ têng teng-ji̍p.',
-'blocked-mailpassword' => '你的IP地址hông封鎖,袂當編輯,為著安全起見,袂當使用密碼恢復功能。',
-'eauthentsent' => '一張確認的批已經寄去提示的電子批地址。
-佇其它批寄去彼的口座進前,你愛先照彼張批的指示,才通確定彼个口座是你的。',
-'throttled-mailpassword' => '密碼提醒的資料已經佇{{PLURAL:$1|點鐘|$1點鐘}}前寄出。為著防止濫使用,限定佇{{PLURAL:$1|點鐘|$1點鐘}}內只通送一擺密碼提醒。',
 'mailerror' => 'Kià phoe tú tio̍h chhò-gō·: $1',
 'acct_creation_throttle_hit' => 'Tī koè-khì 24 tiám-cheng lāi,  ū chit ê iōng lí IP bāng-chí ê lâng í-keng khui {{PLURAL:$1|1 account|$1 kháu-chō}}. He sī hit ê sî-kan lāi thang chò ê.
 Tiō-sī kóng, tī chit-má iōng chit ê IP bāng-chí ê lâng bē-sái koh khui jīm-hô kháu-chō.',
@@ -489,87 +421,34 @@ Tiō-sī kóng, tī chit-má iōng chit ê IP bāng-chí ê lâng bē-sái koh k
 'emailnotauthenticated' => 'Lí ê e-mail chū-chí iáu-bōe khak-jīn ū-hāu, só·-í ē--kha ê e-mail kong-lêng bē-ēng-tit.',
 'noemailprefs' => 'Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.',
 'emailconfirmlink' => 'Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu',
-'invalidemailaddress' => '電子批的地址無正確,規格毋著,
-請拍一个符合規格的地址抑是放空格。',
-'cannotchangeemail' => '口座的e-mail住址無法度佇這个wiki改',
-'emaildisabled' => '這个網站袂當寄電子批。',
-'accountcreated' => '口座開好矣',
-'accountcreatedtext' => '$1的口座開好矣',
-'createaccount-title' => '佇{{SITENAME}}開好口座',
-'createaccount-text' => '有人佇{{SITENAME}}用你的電子批地址開一个名"$2"的口座($4),密碼是 "$3",
-你這馬應該去登入,而且去改密碼。
-
-若是彼个口座開毋著,你會使莫管這个訊息。',
-'usernamehasherror' => '用者名稱袂使有#字元',
-'login-throttled' => '你已經試傷濟擺登入的動作,
-請小等一下才閣試。',
-'login-abort-generic' => '你的登入無成功,中途退出。',
-'loginlanguagelabel' => '話語:$1',
-'suspicious-userlogout' => '你登出的要求已經被拒絕,因為伊看起來是對無連線的瀏覽器抑是快取代理傳送來的。',
 
 # E-mail sending
-'php-mail-error-unknown' => '佇PHP的 mail() 函數的未知錯誤',
 'user-mail-no-addy' => 'Siūⁿ beh kià tiān-chú-phoe, m̄-koh bô siá tē-chí.',
 
 # Change password dialog
 'resetpass' => 'Kái bi̍t-bé',
-'resetpass_announce' => '你是對一張電子批的臨時編碼登入的。欲完成登入,你愛佇遮設定新密碼:',
 'resetpass_header' => 'Kái káu-chō ê bi̍t-bé.',
 'oldpassword' => 'Kū bi̍t-bé:',
 'newpassword' => 'Sin bi̍t-bé:',
 'retypenew' => 'Têng phah sin bi̍t-bé:',
-'resetpass_submit' => '設定密碼而且登入',
-'resetpass_success' => '你的密碼已經改成功!
-這馬你咧登入...',
 'resetpass_forbidden' => 'Bi̍t-bé bē-sái piàn.',
-'resetpass-no-info' => '你愛登入了,才通直接進入這頁',
 'resetpass-submit-loggedin' => 'Kái bi̍t-bé',
 'resetpass-submit-cancel' => 'Chhú-siau',
-'resetpass-wrong-oldpass' => '無效的臨時抑是現在的密碼,
-你可能已經成功更過你的密碼,抑是申請一个新的臨時密碼。',
 'resetpass-temp-password' => 'Lîm-sî ê bi̍t-bé:',
 
 # Special:PasswordReset
 'passwordreset' => 'Têng siat bi̍t-bé',
-'passwordreset-text' => '完成這个表,就通收著一封提醒你口座詳情的電子批。',
 'passwordreset-legend' => 'Têng siat bi̍t-bé',
-'passwordreset-disabled' => '佇這个Wiki已經禁止重設密碼',
-'passwordreset-pretext' => '{{PLURAL:$1||拍下跤資料內底的一个}}',
 'passwordreset-username' => 'Lí ê iōng-chiá miâ-chheng:',
-'passwordreset-domain' => '網域:',
-'passwordreset-capture' => '敢欲看產生的電子批?',
-'passwordreset-capture-help' => '若你選這个框,電子批(包括臨時的密碼)會予你看著,而且傳送予用者。',
 'passwordreset-email' => 'Tiān-chú-phoe tē-chí:',
-'passwordreset-emailtitle' => '佇{{SITENAME}}面頂的的口座詳細',
-'passwordreset-emailtext-ip' => '有人(可能是你,對$1這IP)要求發一个{{SITENAME}}($4)口座詳情的提示。彼个用戶{{PLURAL:$3|是|是}}佮下跤電子批地址有關係:
-
-$2
-
-{{PLURAL:$3|這个臨時密碼|遮的臨時密碼}}會佇{{PLURAL:$5|一工 |$5工}}內到期。
-你這馬應該登入,而且選擇一个新密碼。若是別人做的要求,抑是你已經記
-起來你的密碼,你閣無想欲改,你會當免管這个信息,而且繼續用你的密碼。',
-'passwordreset-emailtext-user' => '佇{{SITENAME}}的用者$1要求發一个{{SITENAME}}($4)口座詳情的提示。彼个用者{{PLURAL:$3|是|是}}佮下跤電子批地址有關係:
-
-$2
-
-{{PLURAL:$3|這个臨時密碼|遮的臨時密碼}}會佇{{PLURAL:$5|一工 |$5工}}內到期。
-你這馬應該登入,而且選一个新密碼。若是別人做的要求,抑是你已經記
-起來你的密碼,你閣無想欲改,你會當免管這个信息,而且繼續用你的密碼。',
 'passwordreset-emailelement' => 'Iōng-chiá: $1
 Lîm-sî ê bi̍t-bé: $2',
 'passwordreset-emailsent' => 'Chit hong thê-chhíⁿ ê  tiān-chú-phoe í-keng kià chhut.',
-'passwordreset-emailsent-capture' => '一張提醒的電子批已經寄出,佇下面通看著。',
-'passwordreset-emailerror-capture' => '一張提醒的電子批已經寫好,佇下面通看著,毋過送袂到用者: $1。',
 
 # Special:ChangeEmail
 'changeemail' => 'Kái tiān-chú-phoe ê tē-chí',
-'changeemail-header' => '改口座的電子批地址。',
-'changeemail-text' => '共這个表寫了,才通改你的電子批地址,你嘛愛拍密碼來確定你欲改。',
-'changeemail-no-info' => '你愛登入了,才通直接進入這頁。',
 'changeemail-oldemail' => 'Chit-má ê E-mail tē-chí:',
 'changeemail-newemail' => 'Sin E-mail ê chū-chí:',
-'changeemail-none' => '(無)',
-'changeemail-submit' => '改電子批',
 'changeemail-cancel' => 'Chhú-siau',
 
 # Edit page toolbar
@@ -584,12 +463,9 @@ Lîm-sî ê bi̍t-bé: $2',
 'headline_sample' => 'Thâu-tiâu bûn-jī',
 'headline_tip' => 'Tē-2-chân (level 2) ê phiau-tê',
 'nowiki_sample' => 'Chia siá bô keh-sek ê bûn-jī',
-'nowiki_tip' => '無照Wiki的規格',
 'image_sample' => 'Iann-siong-e-le.jpg',
 'image_tip' => 'Giap tī lāi-bīn ê iáⁿ-siōng',
-'media_tip' => '檔案連結',
 'sig_tip' => 'Lí ê chhiam-miâ kap sî-kan ìn-á',
-'hr_tip' => '橫線 (小心使用)',
 
 # Edit pages
 'summary' => 'Khài-iàu:',
@@ -599,51 +475,12 @@ Lîm-sî ê bi̍t-bé: $2',
 'savearticle' => 'Pó-chûn chit ia̍h',
 'preview' => 'Seng khoàⁿ-māi',
 'showpreview' => 'Seng khoàⁿ-māi',
-'showlivepreview' => '即時先看覓',
 'showdiff' => 'Khòaⁿ kái-piàn ê pō·-hūn',
 'anoneditwarning' => "'''Kéng-kò:''' Lí bô teng-ji̍p. Lí ê IP chū-chí ē kì tī pún ia̍h ê pian-chi̍p le̍k-sú lāi-bīn.",
-'anonpreviewwarning' => "''你並無登入,保存頁面的時陣,會共你的IP地址記錄佇這頁的編輯歷史。''",
-'missingsummary' => "'''提醒:'''你無拍一个編輯標題,若你閣點「{{int:savearticle}}」一擺,你的編輯會無不帶標題保存起來。",
-'missingcommenttext' => '請佇下跤拍意見',
-'missingcommentheader' => "'''提醒:'''你無為你的意見寫一个標題,
-若你閣點「{{int:savearticle}}」一擺,你的編輯會無帶標題保存起來。",
 'summary-preview' => 'Khài-iàu ê preview:',
 'subject-preview' => 'Ū-lám tê-bo̍k/piau-tê:',
-'blockedtitle' => '用者hông封鎖',
-'blockedtext' => "'''你的用者名稱抑是IP地址已經hông封鎖'''
-
-這擺的封鎖是由$1所做的,
-原因是''$2''。
-
-* 這擺封鎖開始的時間是:$8
-* 這擺封鎖到期的時間是:$6
-* hông封鎖的用者:$7
-
-妳會使聯絡$1抑是其他的[[{{MediaWiki:Grouppage-sysop}}|管理員]]來討論這擺封鎖。
-除非你有佇你的[[Special:Preferences|口座設定]]當中,有設一个有效的電子批地址,若無,你是袂當使用「寄電子批予用者」的功能。若有,這个功能是無封鎖。
-你這馬IP地址是$3,被封鎖用者ID是 #$5,
-請佇你的詢問當中包括以上資料。",
-'autoblockedtext' => "你的IP地址已經自動封鎖,因為彼个地址是一个予$1封鎖掉的用者咧用。
-
-理由是:
-:''$2''
-
-* 這擺封鎖開始的時間是:$8
-* 這擺封鎖到期的時間是:$6
-* hông封鎖的用者:$7
-
-你會使聯絡$1抑是其他的[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論這擺的封鎖。
-除非你有佇你的[[Special:Preferences|用者設定]]當中,設一个有效的電子批地址,若無你是袂當使用「寄電子批予這个用戶」的功能。你並無hông封鎖寄電子批。
-
-你這馬的IP地址是$3,被封鎖用者ID是 #$5,
-請佇你的查詢當中,註明面頂所有的資料。",
 'blockednoreason' => '無寫理由',
 'whitelistedittext' => 'Lí ài $1 chiah ē-sái siu-kái.',
-'confirmedittext' => '佇改這頁進前,你愛確認你的電子批地址,
-請透過[[Special:Preferences|用者設便]]的設定來驗證你的電子批地址。',
-'nosuchsectiontitle' => 'Chhoé bô toān-lo̍h',
-'nosuchsectiontext' => '你欲改的段落已經無佇咧,
-可能佇你看頁面的時陣,已經徙位抑是刣掉。',
 'loginreqtitle' => 'Su-iàu Teng-ji̍p',
 'loginreqlink' => 'Teng-ji̍p',
 'loginreqpagetext' => 'Lí ài $1 chiah thang khoàⁿ pat ia̍h.',
@@ -654,22 +491,10 @@ Kháu-chō ê sin bi̍t-bé thang tī teng-ji̍p liáu tī ''[[Special:ChangePas
 'newarticle' => '(Sin)',
 'newarticletext' => "Lí tòe 1 ê liân-kiat lâi kàu 1 bīn iáu-bōe chûn-chāi ê ia̍h. Beh khai-sí pian-chi̍p chit ia̍h, chhiáⁿ tī ē-kha ê bûn-jī keh-á lāi-té phah-jī. ([[{{MediaWiki:Helppage}}|Bo̍k-lio̍k]] kà lí án-choáⁿ chìn-hêng.) Ká-sú lí bô-tiuⁿ-tî lâi kàu chia, ē-sai chhi̍h liû-lám-khì ê '''téng-1-ia̍h''' tńg--khì.",
 'anontalkpagetext' => "''Pún thó-lūn-ia̍h bô kò·-tēng ê kháu-chō/hō·-thâu, kan-na ū 1 ê IP chū-chí (chhin-chhiūⁿ 123.456.789.123). In-ūi bô kāng lâng tī bô kāng sî-chūn ū khó-lêng tú-hó kong-ke kāng-ê IP, lâu tī chia ê oē ū khó-lêng hō· bô kāng lâng ê! Beh pī-bián chit khoán būn-tê, ē-sái khì [[Special:UserLogin/signup|khui 1 ê hō·-thâu a̍h-sī teng-ji̍p]].''",
-'noarticletext' => '這頁這馬無內容,
-你會使佇別頁[[Special:Search/{{PAGENAME}}|搜揣這頁標題]],
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜揣有關的記錄],
-抑是[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯這頁]</span>。',
-'noarticletext-nopermission' => '這頁這馬無內容,
-你會使佇別頁[[Special:Search/{{PAGENAME}}|揣這頁標題]],
-抑是<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}揣有關的記錄]</span>。',
-'userpage-userdoesnotexist' => '猶未有「$1」這个口座,
-請佇開/改這頁進前先檢查一下。',
-'userpage-userdoesnotexist-view' => '用者口座「$1」猶未開',
-'blocked-notice-logextract' => '這个用者這馬hông封鎖,
-下跤有最近封鎖的紀錄通參考:',
-'clearyourcache' => "'''Chù-ì:''' Pó-chûn liáu-āu, tio̍h ē-kì leh kā liû-lám-khì ê cache piàⁿ tiāu chiah khoàⁿ-ē-tio̍h kái-piàn. 
-*'''Firefox / Safari:''' chhi̍h tiâu \"Shift\" kâng-sî-chūn tiám-kik ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''Ctrl-F5'' \"Ctrl-R\" kî-tiong chi̍t ê (''⌘-R'' tī Mac) 
+'clearyourcache' => "'''Chù-ì:''' Pó-chûn liáu-āu, tio̍h ē-kì leh kā liû-lám-khì ê cache piàⁿ tiāu chiah khoàⁿ-ē-tio̍h kái-piàn.
+*'''Firefox / Safari:''' chhi̍h tiâu \"Shift\" kâng-sî-chūn tiám-kik ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''Ctrl-F5'' \"Ctrl-R\" kî-tiong chi̍t ê (''⌘-R'' tī Mac)
 * '''Google Chrome:''' chhi̍h ''Ctrl-Shift-R'' (''⌘-R-Shift-R'' tī Mac)
-'''Internet Explorer :'''chhi̍h tiâu \"Ctrl\" kâng-sî-chūn tiám-kek ''Refresh/têng-sin chài-ji̍p'' a̍h-sī chhi̍h \"Ctrl-F5\" 
+'''Internet Explorer :'''chhi̍h tiâu \"Ctrl\" kâng-sî-chūn tiám-kek ''Refresh/têng-sin chài-ji̍p'' a̍h-sī chhi̍h \"Ctrl-F5\"
 * '''Konqueror:'''  tiám-kek ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''F5''
 * '''Opera:''' piàⁿ-tiāu cache tī ''Tools(ke-si) → Preferences(siat-piān)''",
 'usercssyoucanpreview' => "'''Phiat-pō·''': Pó-chûn chìn-chêng ē-sái chhi̍h 'Seng khoàⁿ-māi' kiám-cha sin ê CSS.",
@@ -677,30 +502,11 @@ Kháu-chō ê sin bi̍t-bé thang tī teng-ji̍p liáu tī ''[[Special:ChangePas
 'usercsspreview' => "'''Thê-chhíⁿ lí,  che chí-sī sian khoàⁿ-māi  lí ê su-jîn CSS'''
 '''Che iáu-bōe pó-chûn--khí-lâi !'''",
 'userjspreview' => "'''Sè-jī! Lí hiān-chú-sî chhì khoàⁿ--ê sī lí ka-kī ê javascript; che iáu-bōe pó-chûn--khí-lâi!'''",
-'sitecsspreview' => "'''提醒你,這只是先看覓你的私人CSS'''
-'''猶未保存!'''",
-'sitejspreview' => "'''提醒你,這只是先看覓這个JavaScrpt程式'''
-'''猶未保存!'''",
-'userinvalidcssjstitle' => "'''提醒:'''遐無面板\"\$1\",
-家己設的 .css 佮 .js 頁愛用小寫標題,親像,
-{{ns:user}}:Foo/vector.css 無仝
-{{ns:user}}:Foo/Vector.css。",
-'updated' => '(改過矣)',
 'note' => "'''Chù-ì:'''",
 'previewnote' => "'''Thê-chhéⁿ lí, che chí-sī  hō͘ lí sian khoàⁿ chi̍t-ē.'''
 Lí kái--ê iáu-bōe pó-chûn--khí-lâi !",
-'previewconflict' => '這个先看覓會反應你文字編輯區的內容,顯示佇面頂。佇你保存了就會公開。',
 'session_fail_preview' => "'''Pháiⁿ-sè! Gún chiām-sî bô hoat-tō͘ chhú-lí lí ê pian-chi̍p (goân-in: \"phàng-kiàn sú-iōng kî-kan ê chu-liāu\"). Lô-hoân têng chhì khoàⁿ-māi. Ká-sú iû-goân bô-hāu, ē-sái teng-chhut koh-chài teng-ji̍p hoān-sè tō ē-tit kái-koat.'''",
-'session_fail_preview_html' => "'''歹勢!因為phàng見資料,阮無法度處理你的編輯。'''
-
-''因為{{SITENAME}}有開放原始 HTML 碼,先看覓先看無,以防止 JavaScript 的攻擊。''
-
-'''若這改編輯過程無問題,請閣試一改。若閣有問題,請[[Special:UserLogout|登出]]了後,才閣重登入。'''",
-'token_suffix_mismatch' => "'''因為你用者端的編輯毀損一寡標點符號字元,你的編輯無被接受。'''
-這種情況會出現佇你用網路上匿名代理服務的時陣。",
-'edit_form_incomplete' => "'''一寡部份的編輯無送到伺服器,請檢查你的編輯是毋是完整,才閣試。'''",
 'editing' => 'Siu-kái $1',
-'creating' => '當咧建立$1',
 'editingsection' => 'Pian-chi̍p $1 (section)',
 'editingcomment' => 'Teh pian-chi̍p $1 (lâu-oē)',
 'editconflict' => 'Siu-kái sio-chhiong: $1',
@@ -710,98 +516,41 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 '''Kan-na''' téng-koân keh-á ê bûn-jī ē tī lí chhi̍h \"{{int:savearticle}}\" liáu-āu pó-chûn khí lâi.",
 'yourtext' => 'Lí ê bûn-jī',
 'storedversion' => 'Chu-liāu-khò· ê pán-pún',
-'nonunicodebrowser' => "'''提醒:你的瀏覽器佮Unicode編碼袂合。''
-遮有一个工作區會使予你通安全編輯頁面: 
-非ASCII字元會以十六進位編碼模式出現佇編輯框當中。",
 'editingold' => "'''KÉNG-KÒ: Lí tng teh siu-kái chit ia̍h ê 1 ê kū siu-tēng-pún. Lí nā kā pó-chûn khí lâi, chit ê siu-tēng-pún sòa-āu ê jīm-hô kái-piàn ē bô khì.'''",
 'yourdiff' => 'Chha-pia̍t',
-'copyrightwarning' => "請注意你佇{{SITENAME}}的所有貢獻攏會照$2發布(看$1的說明)。
-若你無希望你寫的文字hông隨意改抑是傳送,請毋莫佇遮送出。<br />
-你嘛向阮保證你送出來的內容是你家己寫的,抑是對無版權抑有授權的遐抄來的。
-'''毋通無授權就送出有版權作品!'''",
-'copyrightwarning2' => "請注意你佇{{SITENAME}}的所有貢獻,可能會予別的用者修改抑徙走,
-若你無希望你寫的文字hông無情修改,就毋莫佇遮提交。<br />
-你嘛向阮保證這是你家己寫的,抑是對無版權抑有授權(看$1的說明)的遐抄來的。
-'''毋通無授權就送出有版權作品!'''",
-'longpageerror' => "'''錯誤: 你送出來的文章長度有{{PLURAL:$1|1 KB|$1 KB}} ,這大過{{PLURAL:$2|1 KB|$2 KB}}的上大界限。'''
-伊無法度保存。",
 'readonlywarning' => "'''CHÙ-Ì: Chu-liāu-khò· taⁿ só tiâu leh thang pān î-siu khang-khòe, só·-í lí hiān-chú-sî bô thang pó-chûn jīn-hô phian-chi̍p hāng-bo̍k. Lí ē-sái kā siong-koan pō·-hūn tah--ji̍p-khì 1-ê bûn-jī tóng-àn pó-chûn, āu-chhiú chiah koh kè-sio̍k.'''
 
 Kā só tiâu ê koán-lí-goân ū lâu oē: $1",
 'protectedpagewarning' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái siu-kái.'''
 Ē-kha ū choè-kīn ê kì-lo̍k thang chham-khó:",
-'semiprotectedpagewarning' => "'''注意:'''這頁hông保護牢咧,只有有註冊的用者通編輯。
-下跤有最近的記錄通參考:",
-'cascadeprotectedwarning' => "'''注意:'''這頁已經hông保護牢咧,只有有管理員權限的用者才有法度改,因為這頁佇{{PLURAL:$1|頁|頁}}的連鎖保護內底:",
-'titleprotectedwarning' => "'''注意:這頁已經hông保護牢咧,需要有[[Special:ListGroupRights|指定權限]]的才會當創建。'''
-下跤有最近的記錄通參考:",
 'templatesused' => 'Chit ia̍h iōng {{PLURAL:$1|Template|Templates}} chia ê pang-bô· :',
 'templatesusedpreview' => 'Chit ê preview iōng chia ê {{PLURAL:$1|Template|pang-bô͘}}',
 'templatesusedsection' => 'Chit ê toāⁿ-lo̍k iōng chia ê {{PLURAL:$1|Template|pang-bô͘}}',
 'template-protected' => '(pó-hō͘)',
 'template-semiprotected' => '(poàⁿ pó-hō͘)',
-'hiddencategories' => '這頁是屬於{{PLURAL:$1|一个隱藏類別|$1个隱藏類別}}的成員:',
-'nocreatetitle' => '欲創建頁hông限制',
-'nocreatetext' => '{{SITENAME}}限制創建新頁的功能。你會當倒退佮改現有的頁,抑是[[Special:UserLogin|登入抑是開一个口座]]。',
-'nocreate-loggedin' => '你無授權去創建新頁。',
-'sectioneditnotsupported-title' => '編輯段落是袂當得',
-'sectioneditnotsupported-text' => '段落編輯佇這頁袂當得',
-'permissionserrors' => '授權錯誤',
-'permissionserrorstext' => '你無允准去做彼,因為下跤
-{{PLURAL:$1|原因|原因}}:',
 'permissionserrorstext-withaction' => 'Lí bô ún-chún chò $2, in-ūi ē-kha
 {{PLURAL:$1|iân-kò͘|iân-kò͘}}:',
-'recreate-moveddeleted-warn' => "'''Sè-jī: Lí taⁿ chún-pī beh khui ê ia̍h, chêng bat hō͘ lâng thâi tiāu koè.''' 
+'recreate-moveddeleted-warn' => "'''Sè-jī: Lí taⁿ chún-pī beh khui ê ia̍h, chêng bat hō͘ lâng thâi tiāu koè.'''
 
-Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng. 
+Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng.
 Chia ū chit ia̍h ê san-tû kì-lo̍k hō͘ lí chham-khó:",
-'moveddeleted-notice' => '這頁已經予人刣掉,
-下跤有刣掉佮徙走的記錄通參考。',
-'log-fulllog' => '看全部的記錄',
-'edit-hook-aborted' => '取消編輯,
-無講啥物原因',
-'edit-gone-missing' => '無法度改新這頁,
-伊可能拄hông刣掉。',
 'edit-conflict' => 'Siu-kái sio-chhiong',
-'edit-no-change' => '你的編輯閬過,因為攏無改著字。',
-'edit-already-exists' => '無法度開新頁,
-已經有彼頁。',
 'defaultmessagetext' => 'Siat piān ê bûn-jī',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => "'''警示:'''這頁用傷濟擺函數呼叫。
-
-伊應該少過{{PLURAL:$2|擺|擺}},這馬有{{PLURAL:$1|擺|擺}}。",
-'expensive-parserfunction-category' => '用傷濟擺函數呼叫的頁',
 'post-expand-template-inclusion-warning' => "'''Kéng-pò:'''Pau ji̍t lâi ê pán-bôo sioⁿ koè tsē ia̍h tuā.
 Ū chi̍t-koá-á ē bô pau ji̍t lâi.",
-'post-expand-template-inclusion-category' => '頁的枋模所包的量已經超過',
-'post-expand-template-argument-warning' => "'''警示''':這个頁至少包括一个枋模的參數超過展開時的大細。
-遮的參數會忽略過。",
-'post-expand-template-argument-category' => '包括跳過枋模參數的頁面',
-'parser-template-loop-warning' => '踅圓框的枋模: [[$1]]',
-'parser-template-recursion-depth-warning' => '已經超過枋模的recusion深度限制($1)',
-'language-converter-depth-warning' => '已經超過字詞轉換器的深度限制($1)',
 
 # "Undo" feature
 'undo-success' => 'Pian-chi̍p í-keng chhú-siau. Chhiáⁿ khak-tēng, liáu-āu kā ē-kha ho̍k-goân ê kái-piàn pó-chûn--khí-lâi.',
 'undo-failure' => 'Pian-chi̍p bē-tàng chhú-siau, in-ūi chhiong tio̍h kî-kan chhah-ji̍p ê pian-chi̍p.',
-'undo-norev' => '這个編輯袂當取消,因為無這个修訂本,抑是hông刣掉。',
 'undo-summary' => 'Chhú-siau [[Special:Contributions/$2|$2]] ([[User talk:$2|thó-lūn]]) ê siu-tēng-pún $1',
 
-# Account creation failure
-'cantcreateaccounttitle' => '無法度開口座',
-'cantcreateaccount-text' => "對這个 IP 地址 ('''$1''') 開口座已經予 [[User:$3|$3]] 禁止。
-
-$3共禁止的原因是 ''$2''。",
-
 # History pages
 'viewpagelogs' => 'Khoàⁿ chit ia̍h ê logs',
 'nohistory' => 'Chit ia̍h bô pian-chi̍p-sú.',
 'currentrev' => 'Hiān-chú-sî ê siu-tēng-pún',
-'currentrev-asof' => '$1的上新修訂本',
 'revisionasof' => '$1 ê siu-tēng-pún',
-'revision-info' => '$2佇$1的修訂本',
 'previousrevision' => '←Khah kū ê siu-tēng-pún',
 'nextrevision' => 'Khah sin ê siu-tēng-pún→',
 'currentrevisionlink' => 'khoàⁿ siōng sin ê siu-tēng-pún',
@@ -811,526 +560,104 @@ $3共禁止的原因是 ''$2''。",
 'page_first' => 'Tùi thâu-chêng',
 'page_last' => 'Tùi āu-piah',
 'histlegend' => 'Pán-pún pí-phēng: tiám-soán beh pí-phēng ê pán-pún ê liú-á, liáu-āu chhi̍h ENTER a̍h-sī ē-kha hit tè sì-kak.<br />Soat-bêng: (taⁿ) = kap siōng sin pán-pún pí-phēng, (chêng) = kap chêng-1-ê pán-pún pí-phēng, ~ = sió siu-kái.',
-'history-fieldset-title' => '看歷史',
-'history-show-deleted' => '只有刣掉的',
 'histfirst' => 'Tùi thâu-chêng',
 'histlast' => 'Tùi āu-piah',
-'historysize' => '({{PLURAL:$1|1位元組|$1位元組}})',
-'historyempty' => '(空的)',
-
-# Revision feed
-'history-feed-title' => '修改的歷史',
-'history-feed-description' => '這頁佇本站的修改歷史',
-'history-feed-item-nocomment' => '$1 tī $2',
-'history-feed-empty' => '無你欲挃的頁,
-伊可能hông刣掉抑是改名,
-試[[Special:Search|搜揣本站]],通創建新頁。',
-
-# Revision deletion
-'rev-deleted-comment' => '(編輯概要已經清掉)',
-'rev-deleted-user' => '用者名稱已經清掉',
-'rev-deleted-event' => '動作的記錄已經清掉',
-'rev-deleted-user-contribs' => '[用者名稱抑是IP地址已經徙掉 - 佇貢獻當中隱藏編輯]',
-'rev-deleted-text-permission' => "這頁的修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄],有詳細的訊息。",
-'rev-deleted-text-unhide' => "這頁的修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄],
-若你欲繼續行,你照仝會使[$1看這个修訂本]。",
-'rev-suppressed-text-unhide' => "這頁的修訂本已經hông'''壓縮掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 壓縮記錄],
-若你欲繼續行,你照仝會使[$1看這个修訂本]。",
-'rev-deleted-text-view' => "這頁的修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄],有詳細的訊息。",
-'rev-suppressed-text-view' => "這頁的修訂本已經hông'''壓縮掉'''。
-你會使佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 壓縮記錄]看詳細。",
-'rev-deleted-no-diff' => "你無法度看精差,因為其中一个修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄]有通看詳細。",
-'rev-suppressed-no-diff' => "你無法度看精差,因為其中一个修訂本已經hông'''刣掉\"。",
-'rev-deleted-unhide-diff' => "欲做精差比並的一个修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄],
-若你欲繼續行,你照仝會使[$1看這个精差比並]。",
-'rev-suppressed-unhide-diff' => '精差比並的其中一个修訂本已經hông壓縮掉。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 壓縮記錄]通看詳細,
-若你欲繼續行,你照仝會使[$1看這个精差比並]。',
-'rev-deleted-diff-view' => "欲做精差比並的一个修訂本已經hông'''刣掉'''。
-佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刣掉記錄],通看這个精差比並。",
-'rev-suppressed-diff-view' => "欲做精差比並的一个修訂本已經hông'''壓縮掉'''。
-你會使佇[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 壓縮記錄],看這个精差比並。",
-'rev-delundel' => '顯示/掩',
-'rev-showdeleted' => '顯示',
-'revisiondelete' => '刣掉/取消刣掉 修訂本',
-'revdelete-nooldid-title' => '目標是無效的修訂本',
-'revdelete-nooldid-text' => '你欲用這个功能進前無指定欲改的修訂本,抑是無你指定的修訂本,抑是你欲改現時的版本隱藏起來。',
-'revdelete-nologtype-title' => '無指定記錄的類型',
-'revdelete-nologtype-text' => '你無指定佗一个記錄類型欲做這个動作',
-'revdelete-nologid-title' => '無效的記錄項目',
-'revdelete-nologid-text' => '你無指定佗一个記錄項目欲進行這个動作,抑是無你指定的項目。',
-'revdelete-no-file' => '無你指定的檔案',
-'revdelete-show-file-confirm' => '你敢確定欲看"<nowiki>$1</nowiki>"佇 $2 $3 刣掉的修訂本?',
-'revdelete-show-file-submit' => '是',
-'revdelete-selected' => "'''[[:$1]]{{PLURAL:$2|所選的修訂本|所選的修訂本}}:'''",
-'logdelete-selected' => "'''{{PLURAL:$1|所選的記錄項目|所選的記錄項目}}:'''",
-'revdelete-text' => "'''佇頁面歷史佮記錄猶看有刣掉的修訂本佮彼件物,毋過內容部份是無予大眾看。'''
-佇{{SITENAME}}的其他管理員是會當看隱藏的內容,而且除非有另外附加的限制,伊用這个仝款介面通取消刣掉。",
-'revdelete-confirm' => '請確定你欲按呢做,你嘛了解後果,而且你欲做的這个動作符合[[{{MediaWiki:Policy-url}}|政策]]。',
-'revdelete-suppress-text' => "掩崁'''只'''佇下跤情況下才使用:
-* 可能是誹謗信息
-* 無適當的個人資料
-*:''厝的地址、電話號碼、社會安全號碼抑身份證號碼等等。''",
-'revdelete-legend' => '設定通看的制限',
-'revdelete-hide-text' => '隱藏修訂本文本',
-'revdelete-hide-image' => '隱藏檔案內容',
-'revdelete-hide-name' => '隱藏動作佮目標',
-'revdelete-hide-comment' => '隱藏編輯概要',
-'revdelete-hide-user' => '隱藏編輯者的名稱抑 IP 地址',
-'revdelete-hide-restricted' => '對系統管理員佮其他人攏掩崁資料',
-'revdelete-radio-same' => '(毋共改)',
-'revdelete-radio-set' => '是',
-'revdelete-radio-unset' => '毋是',
-'revdelete-suppress' => '對系統管理員佮其他人攏掩崁資料',
-'revdelete-unsuppress' => '共恢復的修訂本徙掉限制',
-'revdelete-log' => '理由:',
-'revdelete-submit' => '對所選的{{PLURAL:$1|修訂本}}來施實',
-'revdelete-success' => "'''改修訂本是毋是通予人看,已經改好矣'''",
-'revdelete-failure' => "'''改修訂本是毋是通予人看的動作無成功'''
-$1",
-'logdelete-success' => "'''事件的可見性質已經成功設定'''",
-'logdelete-failure' => "'''事件的可見性質無法度設定:'''
-$1",
-'revdel-restore' => '改敢看會著',
-'revdel-restore-deleted' => '刣掉去的修訂本',
-'revdel-restore-visible' => '看會著的修訂本',
-'pagehist' => '頁的歷史',
-'deletedhist' => '已經刣掉的歷史',
-'revdelete-hide-current' => '當咧隱藏佇$1 $2的項目錯誤:這是這馬的修訂本,袂使隱藏。',
-'revdelete-show-no-access' => '當咧顯示佇$1 $2的項目錯誤:這个項目已經標示做"有限制",
-你袂當處理。',
-'revdelete-modify-no-access' => "當欲改$1 $2項目的錯誤:這个項目已經標示做''有限制'',
-你袂當處理。",
-'revdelete-modify-missing' => '當咧改項目編號 $1錯誤:伊對資料庫當中消失!',
-'revdelete-no-change' => "'''提醒''':佇$1 $2的項目已經有人請求可見性質的設定。",
-'revdelete-concurrent-change' => '錯誤佇欲改$1 $2的項目:當你欲改伊的設定時,已經有另外的人共改過。
-請檢查記錄。',
-'revdelete-only-restricted' => '錯誤佇欲隱藏$1 $2的項目時發生:你袂當一方面選擇一項另外的可見性質,閣不准管理員看彼項目。',
-'revdelete-reason-dropdown' => '*捷用的刣掉理由
-** 侵犯版權
-** 不適合的個人資料
-** 可能是誹謗資料',
-'revdelete-otherreason' => '其他/另外的理由:',
-'revdelete-reasonotherlist' => '其他理由',
-'revdelete-edit-reasonlist' => '編輯刣掉的理由',
-'revdelete-offender' => '修訂本的編輯者:',
-
-# Suppression log
-'suppressionlog' => '隱藏記錄',
-'suppressionlogtext' => '下跤是管理員為著藏文章所做的刣掉,抑封鎖的清單。
-若欲看這馬禁止使用、封鎖的清單,請看[[Special:BlockList|封鎖清單]]。',
-
-# History merging
-'mergehistory' => '合併兩个頁的修改歷史:',
-'mergehistory-header' => '這頁通予你合併一个頁的歷史到另外一个新的頁。
-會當予這改變更通接紲歷史頁。',
-'mergehistory-box' => '合併兩个頁的修訂本:',
-'mergehistory-from' => '來源頁:',
-'mergehistory-into' => '目標頁:',
-'mergehistory-list' => '可以合併的編輯歷史',
-'mergehistory-merge' => '下跤[[:$1]]的修訂本會使合併到[[:$2]]。用彼个選項鈕仔去合併只有佇指定時間進前所創建的修訂本。愛注意的是若使用導航連結就會重設這一欄。',
-'mergehistory-go' => '顯示通合併的編輯',
-'mergehistory-submit' => '合併修訂本',
-'mergehistory-empty' => '無修訂本通合併',
-'mergehistory-success' => '[[:$1]]的{{PLURAL:$3|篇|篇}}修訂本已經成功合併到[[:$2]]。',
-'mergehistory-fail' => '無法度進行歷史的合併,請重新檢查彼頁佮時間參數。',
-'mergehistory-no-source' => '無$1這个來源頁',
-'mergehistory-no-destination' => '無$1這个目標頁',
-'mergehistory-invalid-source' => '來源頁愛有一个有效的標題',
-'mergehistory-invalid-destination' => '目標頁愛有一个有效的標題',
-'mergehistory-autocomment' => '已經合併[[:$1]]到[[:$2]]',
-'mergehistory-comment' => '已經合併[[:$1]]到[[:$2]]: $3',
-'mergehistory-same-destination' => '來源頁佮目標頁袂使相仝',
-'mergehistory-reason' => '理由:',
-
-# Merge log
-'mergelog' => '合併記錄',
-'pagemerge-logentry' => '已經共[[$1]]合併到[[$2]] (修訂本到$3)',
-'revertmerge' => '取消合併',
-'mergelogpagetext' => '下跤是最近共一頁的歷史合併到另一个的列表',
 
 # Diffs
-'history-title' => '改"$1"的歷史',
-'difference' => '(Bô kâng pán-pún ê cheng-chha)',
-'difference-multipage' => '(頁中間的精差)',
 'lineno' => 'Tē $1 chōa:',
 'compareselectedversions' => 'Pí-phēng soán-te̍k ê pán-pún',
-'showhideselectedversions' => '顯示/隱藏 選定的修訂版本',
 'editundo' => 'chhú-siau',
-'diff-multi' => '(由{{PLURAL:$2|个用者|$2个用者}}的{{PLURAL:$1|一个中央修訂本|$1个中央修訂本}}無顯示)',
-'diff-multi-manyusers' => '({{PLURAL:$2|个用者|$2个用者}}的{{PLURAL:$1|一个中途修訂本|$1个中途修訂本}}無顯示)',
 
 # Search results
 'searchresults' => 'Kiám-sek kiat-kó',
 'searchresults-title' => 'Chhoé "$1" ê kiat-kó',
 'searchresulttext' => 'Koan-hē kiám-sek {{SITENAME}} ê siông-sè pō·-sò·, chhiáⁿ chham-khó [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => '揣\'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|所有以 "$1" 做頭的頁]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有連結到 "$1" 的頁]])',
-'searchsubtitleinvalid' => '揣"$1"',
-'toomanymatches' => '揣著傷濟,請試另外一款方式',
 'titlematches' => 'Phiau-tê ū-tùi ê bûn-chiuⁿ',
 'notitlematches' => 'Bô sio-tùi ê ia̍h-piau-tê',
 'textmatches' => 'Lōe-iông ū-tùi ê bûn-chiuⁿ',
 'notextmatches' => 'Bô sio-tùi ê bûn-chiuⁿ lōe-iông',
 'prevn' => 'chêng {{PLURAL:$1|$1}} hāng',
 'nextn' => 'āu {{PLURAL:$1|$1}} hāng',
-'prevn-title' => '前$1个{{PLURAL:$1|結果|結果}}',
-'nextn-title' => '後$1个{{PLURAL:$1|結果|結果}}',
 'shown-title' => 'Múi ia̍h hián-sī $1 {{PLURAL:$1|kiat-kó|kiat-kó}}',
 'viewprevnext' => 'Khoàⁿ ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend' => '搜揣的選項',
-'searchmenu-exists' => "'''佇這个wiki遐,有一个頁叫做「[[:$1]]」'''",
-'searchmenu-new' => "'''佇這个 wiki建立「[[:$1]]」這个頁!'''",
 'searchhelp-url' => 'Help:Bo̍k-lio̍k',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|看頁標題頭前相仝的頁]]',
 'searchprofile-articles' => 'Loē-iông ia̍h',
-'searchprofile-project' => '幫助佮事工頁',
 'searchprofile-images' => 'To-mûi-thé',
 'searchprofile-everything' => 'Só͘-ū ê',
 'searchprofile-advanced' => 'chìn-chi̍t-pō͘',
 'searchprofile-articles-tooltip' => 'Tī $1 chhoé',
-'searchprofile-project-tooltip' => '揣$1內底的',
 'searchprofile-images-tooltip' => 'Chhoé tóng-àn',
-'searchprofile-everything-tooltip' => '搜索全部(包括討論頁)',
-'searchprofile-advanced-tooltip' => '佇自定的名空間中搜揣',
-'search-result-size' => '$1 ({{PLURAL:$2|1 jī-goân|$2 jī-goân}})',
-'search-result-category-size' => '{{PLURAL:$1|一个成員|$1成員}} ({{PLURAL:$2|一个下類別|$2个下類別}},{{PLURAL:$3|一个檔案|$3个檔案}})',
-'search-result-score' => '相關度: $1%',
-'search-redirect' => '(改向 $1)',
 'search-section' => '(toān-lo̍h $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' => 'choân-pō·',
 'showingresults' => "Ē-kha tùi #'''$2''' khai-sí hián-sī {{PLURAL:$1| hāng| hāng}} kiat-kó.",
 'showingresultsnum' => "Ē-kha tùi #'''$2''' khai-sí hián-sī {{PLURAL:$3| hāng| hāng}} kiat-kó.",
-'showingresultsheader' => "對'''$4'''的{{PLURAL:$5|第'''$1'''到第'''$3'''項結果|第'''$1 - $2'''項,總共'''$3'''項結果}}",
-'nonefound' => "'''注意''':只有一寡名空間是預設會去揣。試''all:''去揣所有的頁(包括討論頁、枋模等等),抑是頭前指定名空間。",
-'search-nonefound' => '揣無欲愛的',
 'powersearch' => 'Kiám-sek',
 'powersearch-legend' => 'Kiám-sek',
-'powersearch-ns' => '佇下跤的名空間揣:',
-'powersearch-redir' => '轉頁清單',
-'powersearch-field' => '揣',
-'powersearch-togglelabel' => '選定:',
-'powersearch-toggleall' => '所有的',
-'powersearch-togglenone' => '無',
-'search-external' => '外部的搜揣',
-'searchdisabled' => '{{SITENAME}}因為性能方面的原因,全文搜揣已經暫時停用。你會使暫時透過Google搜揣。請注意怹的索引可能過時。',
 
 # Quickbar
 'qbsettings' => 'Quickbar ê siat-tēng',
-'qbsettings-none' => '無',
-'qbsettings-fixedleft' => '倒手爿固定',
-'qbsettings-fixedright' => '正手爿固定',
-'qbsettings-floatingleft' => '倒手爿無固定',
-'qbsettings-floatingright' => '正手爿無固定',
-'qbsettings-directionality' => '固定,照你話語文字的方向。',
 
 # Preferences page
 'preferences' => 'Siat-tēng',
 'mypreferences' => 'Góa ê siat-tēng',
-'prefs-edits' => '編輯幾擺:',
 'prefsnologin' => 'Bô teng-ji̍p',
 'prefsnologintext' => 'Lí it-tēng ài <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} teng-ji̍p]</span> chiah ē-tàng chhiâu iōng-chiá ê siat-tēng.',
 'changepassword' => 'Oāⁿ bi̍t-bé',
 'prefs-skin' => 'Phôe',
 'skin-preview' => 'Chhì khoàⁿ',
 'datedefault' => 'Chhìn-chhái',
-'prefs-beta' => 'Beta版功能',
 'prefs-datetime' => 'Ji̍t-kî kap sî-kan',
-'prefs-labs' => '試驗中的功能',
 'prefs-personal' => 'Iōng-chiá chu-liāu',
 'prefs-rc' => 'Chòe-kīn ê kái-piàn & stub ê hián-sī',
 'prefs-watchlist' => 'Kàm-sī-toaⁿ',
 'prefs-watchlist-days' => 'Kàm-sī-toaⁿ hián-sī kúi kang lāi--ê:',
-'prefs-watchlist-days-max' => '上濟$1 {{PLURAL:$1|工|工}}',
 'prefs-watchlist-edits' => 'Khok-chhiong ê kàm-sī-toaⁿ tio̍h hián-sī kúi hāng pian-chi̍p:',
-'prefs-watchlist-edits-max' => '上大的數目:1000',
-'prefs-watchlist-token' => '監視列表的密鑰:',
 'prefs-misc' => 'Kî-thaⁿ ê siat-tēng',
-'prefs-resetpass' => '改密碼',
-'prefs-changeemail' => '改電子批的地址',
-'prefs-setemail' => '設定一个電子批地址',
-'prefs-email' => '電子批的選項',
-'prefs-rendering' => '外觀',
 'saveprefs' => 'Pó-chûn siat-tēng',
 'resetprefs' => 'Têng siat-tēng',
-'restoreprefs' => '全部攏恢復做設便的',
 'prefs-editing' => 'Pian-chi̍p',
-'prefs-edit-boxsize' => '編輯框的寸尺',
 'rows' => 'Chōa:',
 'columns' => 'Nôa',
 'searchresultshead' => 'Chhiau-chhōe kiat-kó ê siat-tēng',
 'resultsperpage' => '1 ia̍h hián-sī kúi kiāⁿ:',
-'stub-threshold' => '<a href="#" class="stub">短頁連結</a>的門檻值 (位元組):',
-'stub-threshold-disabled' => '莫用',
 'recentchangesdays' => 'Hián-sī kúi ji̍t chòe-kīn ê kái-piàn:',
 'recentchangesdays-max' => 'siōng-choē $1 {{PLURAL:$1|kang|kang}}',
 'recentchangescount' => 'Beh hián-sī kúi tiâu chòe-kīn kái--ê:',
-'prefs-help-recentchangescount' => '這包括最近改的、頁的歷史佮記錄',
-'prefs-help-watchlist-token' => '佇這个欄位加入一个密鑰,伊佇你訂看監視清單 RSS內底嘛會產生。
-任何人若知影這个欄位的密鑰,就會當看你的監視清單,請選一个安全的數字。
-遮有一个隨意產生的數字你通用:$1',
 'savedprefs' => 'Lí ê iōng-chiá siat-tēng í-keng pó-chûn khí lâi ah.',
 'timezonelegend' => 'Sî-khu',
 'localtime' => 'Chāi-tē sî-kan sī:',
-'timezoneuseserverdefault' => '使用Wiki設便的($1)',
-'timezoneuseoffset' => '其他 (指定偏差量)',
 'timezoneoffset' => 'Sî-chha¹:',
 'servertime' => 'Server sî-kan hiān-chāi sī:',
 'guesstimezone' => 'Tùi liû-lám-khì chhau--lâi',
-'timezoneregion-africa' => '非洲',
-'timezoneregion-america' => '美洲',
-'timezoneregion-antarctica' => '南極洲',
-'timezoneregion-arctic' => '北極',
-'timezoneregion-asia' => '亞洲',
-'timezoneregion-atlantic' => '大西洋',
-'timezoneregion-australia' => '澳洲',
-'timezoneregion-europe' => '歐洲',
-'timezoneregion-indian' => '印度洋',
-'timezoneregion-pacific' => '太平洋',
 'allowemail' => 'Ún-chún pa̍t-ê iōng-chiá kià email kòe-lâi',
-'prefs-searchoptions' => '搜揣的選項',
-'prefs-namespaces' => '名空間',
 'defaultns' => 'Tī chiah ê miâ-khong-kan chhiau-chhōe:',
-'default' => '設便',
 'prefs-files' => 'Tóng-àn',
-'prefs-custom-css' => ' 家己設的CSS',
-'prefs-custom-js' => ' 家己設的JavaScript',
-'prefs-common-css-js' => '共 CSS/JavaScript 分享佇所有的外觀:',
-'prefs-reset-intro' => '你會當用這頁去改做原本設便的。
-這个動作無法度取消。',
-'prefs-emailconfirm-label' => '電子批的確定:',
-'prefs-textboxsize' => '編輯框的大細',
 'youremail' => 'Lí ê email:',
-'username' => '用者名稱:',
-'uid' => '用者編號:',
-'prefs-memberingroups' => '{{PLURAL:$1|這陣人|這陣人}}的成員:',
-'prefs-registration' => '註冊時間:',
 'yourrealname' => 'Lí ê chin miâ:',
 'yourlanguage' => 'Kài-bīn gú-giân:',
-'yourvariant' => '頁內容的語文:',
-'prefs-help-variant' => '你希望這个Wiki的內容顯示的時陣所使用的語文',
 'yournick' => 'Lí ê sió-miâ (chhiam-miâ iōng):',
-'prefs-help-signature' => '佇討論頁的評論應該愛用「<nowiki>~~~~</nowiki>」簽名,彼會轉變做你的簽名佮戳印一个時間。',
-'badsig' => '錯誤的原始簽名,
-請檢查HTML標籤。',
-'badsiglength' => '你的簽名傷過長,
-伊的長度袂使超過{{PLURAL:$1|个|个}}字元。',
-'yourgender' => '性別:',
-'gender-unknown' => '無表明',
-'gender-male' => '查埔',
-'gender-female' => '查某',
-'prefs-help-gender' => '選項:用佇軟體的性別指定,
-這項資料會公開。',
-'email' => '電子批',
-'prefs-help-realname' => '你的真實名字無一定愛,
-若你欲提供,伊會附佇你貢 獻的作品。',
 'prefs-help-email' => 'Tiān-chú-phoe ê chū-chí m̄-sī it-tēng ài, m̄-koh tī lí bē-kì bi̍t-bé beh tîng siat-tīng tō ài.',
 'prefs-help-email-others' => 'Lí ē-sái thàu--koè lí ê ia̍h , thó-lūn-ia̍h ê liân kiat hō͘ lâng ēng e-mail kah lí liân-lo̍k.
 Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--lâi.',
-'prefs-help-email-required' => '愛有電子批地址',
-'prefs-info' => '基本資料',
-'prefs-i18n' => '國際化',
-'prefs-signature' => '簽名',
-'prefs-dateformat' => '顯示日期的規格',
-'prefs-timeoffset' => '佮標準時間的偏差',
-'prefs-advancedediting' => '進一步的選項',
-'prefs-advancedrc' => '進一步的選項',
-'prefs-advancedrendering' => '進一步的選項',
-'prefs-advancedsearchoptions' => '進一步的選項',
-'prefs-advancedwatchlist' => '進一步的選項',
-'prefs-displayrc' => '顯示的選項',
-'prefs-displaysearchoptions' => '顯示的選項',
-'prefs-displaywatchlist' => '顯示的選項',
-'prefs-diffs' => '精差',
-
-# User preference: e-mail validation using jQuery
-'email-address-validity-valid' => '電子批地址看起來是有效的',
-'email-address-validity-invalid' => '拍一个有效的電子批地址',
-
-# User rights
-'userrights' => '用者的權限管理',
-'userrights-lookup-user' => '管理用者的分組',
-'userrights-user-editname' => '輸入一个用者名稱:',
-'editusergroup' => '設定用者的分組',
-'editinguser' => "改用者'''[[User:$1|$1]]'''$2 的使用權利",
-'userrights-editusergroup' => '設定用者的分組',
-'saveusergroups' => '保存用者的分組',
-'userrights-groupsmember' => '成員:',
-'userrights-groupsmember-auto' => '自本的成員:',
-'userrights-groups-help' => '你會當改用者所屬的分組:
-* 頭前有勾起來的代表用者屬的分組
-* 頭前無勾起來的代表用者無屬彼个分組
-* 有 * 的項目,表示你會當加,袂當共減倒轉來,抑是會當共減,袂當共加倒轉來',
-'userrights-reason' => '理由:',
-'userrights-no-interwiki' => '你無權去設定其它wiki上的用者權利。',
-'userrights-nodatabase' => '無$1資料庫抑是非本地的',
-'userrights-nologin' => '你愛管理員的口座[[Special:UserLogin|登入]]了後,才會當指定用者權利。',
-'userrights-notallowed' => '你口座的無授權你會當加添用者權利',
-'userrights-changeable-col' => '你會當改的分組',
-'userrights-unchangeable-col' => '你袂當改的分組',
-
-# Groups
-'group' => '分組:',
-'group-user' => '用者:',
-'group-autoconfirmed' => '自動確認的用者',
-'group-bot' => '機器人',
-'group-sysop' => '管理員',
-'group-bureaucrat' => '行政人員',
-'group-suppress' => '監督',
-'group-all' => '(全部)',
-
-'group-user-member' => '{{GENDER:$1|用者}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|自動確認的用者}}',
-'group-bot-member' => '{{GENDER:$1|機器人}}',
-'group-sysop-member' => '{{GENDER:$1|管理員}}',
-'group-bureaucrat-member' => '{{GENDER:$1|監督人員}}',
-'group-suppress-member' => '{{GENDER:$1|監督}}',
-
-'grouppage-user' => '{{ns:project}}:用者',
-'grouppage-autoconfirmed' => '{{ns:project}}:自動確認的用者',
-'grouppage-bot' => '{{ns:project}}:機器人',
+
 'grouppage-sysop' => '{{ns:project}}:Hêng-chèng jîn-oân',
-'grouppage-bureaucrat' => '{{ns:project}}:行政人員',
-'grouppage-suppress' => '{{ns:project}}:監督',
-
-# Rights
-'right-read' => '看頁',
-'right-edit' => '改頁',
-'right-createpage' => '開新頁(無包括討論頁)',
-'right-createtalk' => '開新討論頁',
-'right-createaccount' => '開新用者口座',
-'right-minoredit' => '標示做小編輯',
-'right-move' => '徙頁',
-'right-move-subpages' => '徙頁,連伊的次頁',
-'right-move-rootuserpages' => '徙用者root的頁',
-'right-movefile' => '徙檔案',
-'right-suppressredirect' => '徙頁的時陣,無共原本的頁改做轉頁',
-'right-upload' => '上載檔案',
-'right-reupload' => '取代原本的檔案',
-'right-reupload-own' => '取代別人上載的原本檔案',
-'right-reupload-shared' => '莫用共用媒體檔案庫上的檔案',
-'right-upload_by_url' => '對一个網址(URL)上載檔案',
-'right-purge' => '直接清掉網站頁的cache,毋免閣確定',
-'right-autoconfirmed' => '編輯半保護的頁',
-'right-bot' => '看做是一个自動程序',
-'right-nominornewtalk' => '佇討論頁的小編輯無發新訊息',
-'right-apihighlimits' => '佇API查詢的時陣,用較懸的限制量',
-'right-writeapi' => '用API編寫',
-'right-delete' => '刣頁',
-'right-bigdelete' => '刣掉頁的誠濟歷史',
-'right-deleterevision' => '刣掉佮取消刣掉頁的指定修訂本',
-'right-deletedhistory' => '看已經刣掉的歷史項目,無包括相關的文本',
-'right-deletedtext' => '看已經刣掉修訂本當中,刣掉的文字佮變化',
-'right-browsearchive' => '揣刣掉的頁',
-'right-undelete' => '共刣掉的頁救倒轉來',
-'right-suppressrevision' => '恢復由管理員隱藏掉的修訂本',
-'right-suppressionlog' => '看私人的記錄',
-'right-block' => '封鎖其他用者,予怹袂當編輯',
-'right-blockemail' => '封鎖一个用者,予伊袂當寄電子批',
-'right-hideuser' => '封鎖一个用者名稱,無對大眾公開',
-'right-ipblock-exempt' => '跳過IP封鎖、自動封鎖佮範圍封鎖',
-'right-proxyunbannable' => '跳過Proxy的自動封鎖',
-'right-unblockself' => '取消怹的封鎖',
-'right-protect' => '改保護層級而且編輯hông保護的頁',
-'right-editprotected' => '編輯保護中的頁(無連鎖保護)',
-'right-editinterface' => '編輯用者介面',
-'right-editusercssjs' => '編輯其他用者的CSS佮JavaScript檔案',
-'right-editusercss' => '編輯其他用者的CSS檔案',
-'right-edituserjs' => '編輯其他用者的JavaScript檔案',
-'right-rollback' => '共某一頁的頂一个用戶所做的編輯鉸轉去',
-'right-markbotedits' => '共復原編輯標示做機械人編輯',
-'right-noratelimit' => '無受著頻率限制的影響',
-'right-import' => '對別个Wiki匯入頁',
-'right-importupload' => '對一个上載檔案匯入頁',
-'right-patrol' => '共其它的編輯攏標示做已巡過',
-'right-autopatrol' => '家己的編輯自動標示做巡過',
-'right-patrolmarks' => '看最近巡查編輯的標記',
-'right-unwatchedpages' => '看頁無人監視的清單',
-'right-mergehistory' => '相佮一寡頁的歷史',
-'right-userrights' => '編輯所有用者的權利限制',
-'right-userrights-interwiki' => '編輯對其它wiki來的用者權限',
-'right-siteadmin' => '封鎖閣開鎖資料庫',
-'right-override-export-depth' => '輸出頁,包括連到的頁到5層深',
-'right-sendemail' => '寄電子批予其他用者',
-'right-passwordreset' => '看重設密碼的電子批',
 
 # User rights log
-'rightslog' => '用者使用權記錄',
 'rightslogtext' => 'Chit-ê log lia̍t-chhut kái-piàn iōng-chiá koân-lī ê tōng-chok.',
-'rightslogentry' => '共 $1 的權利限制對 $2 改做 $3',
-'rightslogentry-autopromote' => '自動對$2提升至$3',
-'rightsnone' => '(無)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => '看這頁',
 'action-edit' => 'Siu-kái chit ia̍h',
-'action-createpage' => '開新頁',
-'action-createtalk' => '開討論頁',
-'action-createaccount' => '開這个用者口座',
-'action-minoredit' => '標示做小編輯',
-'action-move' => '徙這頁',
-'action-move-subpages' => '徙這頁,佮伊的次頁',
-'action-move-rootuserpages' => '徙用者root的頁',
-'action-movefile' => '徙這个檔案',
-'action-upload' => '上載這个檔案',
-'action-reupload' => '取代原本的檔案',
-'action-reupload-shared' => '莫用共用媒體檔案庫面頂的檔案',
-'action-upload_by_url' => '對一个網址(URL)上載這个檔案',
-'action-writeapi' => '使用API編寫',
-'action-delete' => '刣掉這頁',
-'action-deleterevision' => '刣掉這个修訂本',
-'action-deletedhistory' => '看這頁予人刣掉的歷史',
-'action-browsearchive' => '揣刣掉的頁',
-'action-undelete' => '共刣掉的頁救倒轉來',
-'action-suppressrevision' => '看而且取消這个藏起來的修訂本',
-'action-suppressionlog' => '看這个私人記錄',
-'action-block' => '封鎖這个用者,予伊袂當編輯',
-'action-protect' => '改這頁的保護層級',
-'action-rollback' => '共某一頁的頂一个用戶所做的編輯鉸轉去',
-'action-import' => '對別个Wiki匯入這頁',
-'action-importupload' => '對一个上載檔案匯入這頁',
-'action-patrol' => '標示其它的編輯是巡過的',
-'action-autopatrol' => '你的編輯標示做已巡查過',
-'action-unwatchedpages' => '看無予人監視的頁列單',
-'action-mergehistory' => '相佮這頁的歷史',
-'action-userrights' => '編輯所有用者的權限',
-'action-userrights-interwiki' => '編輯對其它wiki來的用者權限',
-'action-siteadmin' => '封鎖抑開鎖資料庫',
-'action-sendemail' => '寄電子批',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|kái|kái}}',
 'recentchanges' => 'Chòe-kīn ê kái-piàn',
-'recentchanges-legend' => '最近編輯的選項',
-'recentchangestext' => '佇這頁,看阮這个Wiki最近改的',
-'recentchanges-feed-description' => '訂看這个Wiki最近改的',
 'recentchanges-label-newpage' => 'Chit ê siu-kái ē sán-seng sin ia̍h',
 'recentchanges-label-minor' => 'Che sī sió siu-kái',
-'recentchanges-label-bot' => '這个編輯是機器人做的',
-'recentchanges-label-unpatrolled' => '這个編輯猶未巡過',
-'rcnote' => "下面是佇$4 $5,最近{{PLURAL:$2|工|'''$2'''工}}內的{{PLURAL:$1|'''1'''改|頂'''$1'''改}}修改記錄。",
 'rcnotefrom' => 'Ē-kha sī <b>$2</b> kàu taⁿ ê kái-piàn (ke̍k-ke hián-sī <b>$1</b> hāng).',
 'rclistfrom' => 'Hián-sī tùi $1 kàu taⁿ ê sin kái-piàn',
 'rcshowhideminor' => '$1 sió siu-kái',
-'rcshowhidebots' => '$1機器人所做的',
 'rcshowhideliu' => '$1 teng-ji̍p ê iōng-chiá',
 'rcshowhideanons' => '$1 bû-bêng-sī',
-'rcshowhidepatr' => '$1巡過的編輯',
 'rcshowhidemine' => '$1 góa ê pian-chi̍p',
 'rclinks' => 'Hían-sī $2 ji̍t lāi siōng sin ê $1 hāng kái-piàn<br />$3',
 'diff' => 'Cheng-chha',
@@ -1340,276 +667,45 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'minoreditletter' => '~',
 'newpageletter' => '!',
 'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1个愛注意的{{PLURAL:$1|用者|用者}}]',
-'rc_categories' => '分類界線(以"|"分開)',
-'rc_categories_any' => '任何',
-'rc-change-size-new' => '改了後有$1 {{PLURAL:$1|字元|字元}} 。',
-'newsectionsummary' => '/* $1 */ 新段落',
-'rc-enhanced-expand' => '看內容(愛有JavaScript)',
-'rc-enhanced-hide' => '藏內容',
-'rc-old-title' => '原本用"$1"開頁',
 
 # Recent changes linked
 'recentchangeslinked' => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-feed' => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-toolbox' => 'Siong-koan ê kái-piàn',
-'recentchangeslinked-title' => '佮「$1」有關係的修改',
 'recentchangeslinked-noresult' => 'Lí chí-tēng ê tiâu-kiaⁿ lāi-té chhōe bô jīn-hô kái-piàn.',
-'recentchangeslinked-summary' => "這是佮指定的頁面有連結、閣最近有改過的別頁清單(抑是指定分類的成員)。
-佇[[Special:Watchlist|你的監視單]]內底的頁會用'''粗體'''顯示。",
-'recentchangeslinked-page' => 'Ia̍h ê miâ:',
-'recentchangeslinked-to' => '顯示另外拍入頁伊的相關修改',
 
 # Upload
 'upload' => 'Kā tóng-àn chiūⁿ-bāng',
 'uploadbtn' => 'Kā tóng-àn chiūⁿ-bāng',
 'reuploaddesc' => 'Tò khì sàng-chiūⁿ-bāng ê pió.',
-'upload-tryagain' => '送出改過了後的檔案描述',
 'uploadnologin' => 'Bô teng-ji̍p',
 'uploadnologintext' => 'Bô [[Special:UserLogin|teng-ji̍p]] bē-sái-tit kā tóng-àn sàng-chiūⁿ-bāng.',
-'upload_directory_missing' => '無上傳的目錄($1),彼袂當由網頁伺服器建立。',
-'upload_directory_read_only' => '無上載目錄($1),抑是網頁伺服器無權寫入',
 'uploaderror' => 'Upload chhò-gō·',
-'upload-recreate-warning' => "'''注意:一个仝名的檔案捌hông刣掉抑是徙去別位。'''
-
-這頁有刣掉佮徙走的記錄通參考:",
-'uploadtext' => "用下跤的表來共檔案上載。
-若欲看,抑是揣往過上載的檔案,會使入去[[Special:FileList|檔案上載清單]]。上載嘛會記錄佇[[Special:Log/upload|上載記錄]],若刣掉就會記錄佇[[Special:Log/delete|刣掉記錄]]。
-
-上載後,若欲佇頁加入檔案,會使用下跤的一種方式來連結:
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>'''使用檔案的完整版本
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替換文字]]</nowiki></tt>'''用一个囥佇倒爿的一个200 像素圖相框,「替換文字」做說明
-* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>'''直接連結到檔案,毋過無顯示檔案",
-'upload-permitted' => '通用的檔案類型: $1',
-'upload-preferred' => '建議的檔案類型: $1',
-'upload-prohibited' => '禁止的檔案類型: $1。',
-'uploadlog' => '上載記錄',
-'uploadlogpage' => '上載記錄',
 'uploadlogpagetext' => 'Í-hā sī chòe-kīn sàng-chiūⁿ-bāng ê tóng-àn ê lia̍t-toaⁿ.',
 'filename' => 'Tóng-àn',
 'filedesc' => 'Khài-iàu',
 'fileuploadsummary' => 'Khài-iàu:',
-'filereuploadsummary' => '改換檔案的說明:',
-'filestatus' => '版權狀況:',
-'filesource' => '來源:',
 'uploadedfiles' => 'Tóng-àn í-keng sàng chiūⁿ-bāng',
 'ignorewarning' => 'Mài chhap kéng-kò, kā tóng-àn pó-chûn khí lâi.',
 'ignorewarnings' => 'Mài chhap kéng-kò',
-'minlength1' => '檔案的名上少愛有一字',
-'illegalfilename' => '檔案名“$1”有袂用得用佇標題的字,
-請改名了後重新上載。',
-'filename-toolong' => '檔案的名長度袂使超過240位元組',
 'badfilename' => 'Iáⁿ-siōng ê miâ í-keng kái chò "$1".',
-'filetype-mime-mismatch' => '副檔名 ".$1" 佮 ($2)的MIME類型無合。',
-'filetype-badmime' => 'MIME類別"$1"的檔案袂當上載',
-'filetype-bad-ie-mime' => '袂當上載這个檔案,因為 Internet Explorer 會共伊偵測做 "$1",彼種袂使,可能是有所危害的檔案類型。',
-'filetype-unwanted-type' => "'''\".\$1\"'''是袂當上載的檔案類型,
-適當的{{PLURAL:\$3|檔案類型|檔案類型}}是\$2。",
-'filetype-banned-type' => "    '''「.$1」'''{{PLURAL:$4|毋是會用得的檔案類型|毋是會用得的檔案類型}}。 
-會用得的{{PLURAL:$3|檔案類型|檔案類型}} $2。",
-'filetype-missing' => '彼个檔案名稱無副檔名 (親像 ".jpg")。',
-'empty-file' => '你送出來的檔案是空的',
-'file-too-large' => '你送出來的檔案傷過大',
-'filename-tooshort' => '檔案名傷短',
-'filetype-banned' => '這類的檔案被禁止',
-'verification-error' => '這个檔案無通過驗證',
-'hookaborted' => '你欲做的編輯因為擴展鈎(extension hook)去跳開。',
-'illegal-filename' => '無合用的檔案名稱',
-'overwrite' => '袂使覆寫已經佇咧的檔案',
-'unknown-error' => '有一个無啥清楚的錯誤。',
-'tmp-create-error' => '無法度建立臨時檔案',
-'tmp-write-error' => '寫入臨時檔案的時陣發生錯誤',
-'large-file' => '建議檔案的大小袂當超過 $1,本檔案大小是 $2。',
-'largefileserver' => '這个檔案比伺服器配置所允許的較大。',
-'emptyfile' => '你欲上載的檔案敢若是空的,
-這有可能是拍毋著檔案名稱,
-請檢查你確定是欲上載這个檔案。',
-'windows-nonascii-filename' => '本維基的檔案名稱袂當有特殊的字',
-'fileexists' => "已經有一个仝名的檔案,你若無確定你欲要共改,請檢查'''<tt>[[:$1]]</tt>'''。 [[$1|thumb]]",
-'filepageexists' => "這个檔案的描述頁已經佇'''<tt>[[:$1]]</tt>'''建立,毋過這个名稱的檔案猶未有,
-你所輸入的概要袂顯示佇彼个描述頁當中,若欲概要佇遐看會著,你愛手動編輯。
-[[$1|thumb]]",
-'fileexists-extension' => "一个親像檔名的檔案已經佇咧: [[$2|thumb]]
-* 上載檔案的檔名: '''<tt>[[:$1]]</tt>'''
-* 這馬檔案的檔名: '''<tt>[[:$2]]</tt>'''
-請選一个無仝的名。",
-'fileexists-thumbnail-yes' => "這个檔案若親像是一幅圖的縮小版本''(縮圖)''。 [[$1|thumb]]
-請檢查檔案'''<tt>[[:$1]]</tt>''',
-若檢查的檔案是仝幅圖的縮圖,就毋免閣上載一幅縮圖。",
-'file-thumbnail-no' => "以'''<tt>$1</tt>'''做名的檔案,
-伊敢若是某幅圖的縮小版本''(縮圖)''。
-你欲就上載完整大小的版本,若無請改檔案名稱。",
-'fileexists-forbidden' => '已經有一个仝名的檔案,而且袂檔覆寫,
-若你欲上載你的檔案,請退倒轉去,閣用一个新名來。
-[[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => '已經有一个仝名的檔案佇分享檔案庫,
-若你欲上載你的檔案,請退倒轉去,閣用一个新名來。
-[[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => '這个檔案佮下跤的{{PLURAL:$1|个檔案|个檔案}}是仝款的:',
-'file-deleted-duplicate' => '一个仝名的檔案 ([[:$1]]) 佇進前捌予人刣掉,
-你應當佇欲閣重新上載進前,先檢查彼个檔案的刣掉記錄。',
 'uploadwarning' => 'Upload kéng-kò',
-'uploadwarning-text' => '請改下跤的檔案描述才閣試',
 'savefile' => 'Pó-chûn tóng-àn',
 'uploadedimage' => 'thoân "[[$1]]" chiūⁿ-bāng',
-'overwroteimage' => '已經上載「[[$1]]」的新版本',
 'uploaddisabled' => 'Pháiⁿ-sè, sàng chiūⁿ-bāng ê kong-lêng bô khui.',
-'copyuploaddisabled' => '袂當透過網址上載',
-'uploadfromurl-queued' => '你的上載已經咧排隊',
-'uploaddisabledtext' => '袂當上載檔案',
-'php-uploaddisabledtext' => '佇PHP袂當上載檔案,
-請檢查file_uploads 設定。',
-'uploadscripted' => '這个檔案內底有HTML抑是腳本代碼,網路瀏覽器可能會錯誤翻譯。',
-'uploadvirus' => '彼个檔案有一个病毒!
-細情:$1',
-'uploadjava' => '彼个檔案是有 Java  .class 的 ZIP 檔案,
-袂當上載 Java 檔案,是因為怹可能會閃過系統安全關卡。',
-'upload-source' => '來源檔案',
 'sourcefilename' => 'Tóng-àn goân miâ:',
-'sourceurl' => '來源網址(URL):',
 'destfilename' => 'Tóng-àn sin miâ:',
-'upload-maxfilesize' => '檔案上大:$1',
-'upload-description' => '檔案說明',
-'upload-options' => '上載選項',
 'watchthisupload' => 'Kàm-sī chit ê tóng-àn',
-'filewasdeleted' => '進前有上載一个仝名的檔案,而且後來予人刣掉,
-佇欲閣上載進前,你應該先檢查$1。',
-'filename-bad-prefix' => "你上載的檔案名是以'''「$1」'''做頭,這一般是數位相機自動編的,彼無啥意義,
-請替你的檔案號一个較有意義的名。",
 'upload-success-subj' => 'Sàng-chiūⁿ-bāng sêng-kong',
-'upload-success-msg' => '你對[$2]遐的上載已經成功,伊佇:[[:{{ns:file}}:$1]]',
-'upload-failure-subj' => '上載問題',
-'upload-failure-msg' => '你[$2]的上載出現問題:
-
-$1',
-'upload-warning-subj' => '上載警示',
-'upload-warning-msg' => '你對[$2]遐的上載出問題,你會當回轉去[[Special:Upload/stash/$1|上載表]]修改問題。',
-
-'upload-proto-error' => '毋著的協議(protocol)',
-'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',
-'upload-copy-upload-invalid-domain' => '無開放對這个網站(domain)上載檔案。',
 
 # File backend
-'backend-fail-stream' => '無法度串流檔案$1',
-'backend-fail-backup' => '無法度備份檔案$1',
-'backend-fail-notexists' => '無$1這个檔案',
-'backend-fail-hashes' => '無法度讀著檔案散列值(hashe)通比並',
-'backend-fail-notsame' => '已經有$1仝名、無仝款的檔案。',
-'backend-fail-invalidpath' => '$1這个囥的路徑怪怪',
 'backend-fail-delete' => 'Bô-hoat-tō· kā tóng-àn "$1" thâi tiāu',
-'backend-fail-alreadyexists' => '已經有$1這个檔案。',
-'backend-fail-store' => '無法度恢復佇$2的檔案$1。',
-'backend-fail-copy' => '無法度共佇$1的檔案khop去$2。',
-'backend-fail-move' => '無法度共佇$1的檔案徙去$2。',
-'backend-fail-opentemp' => '無法度建立臨時檔案',
-'backend-fail-writetemp' => '無法度寫入去臨時檔案',
-'backend-fail-closetemp' => '無法度徙掉臨時檔案',
-'backend-fail-read' => '無法度讀$1這个檔案',
-'backend-fail-create' => '無法度建立$1這个檔案。',
-'backend-fail-maxsize' => '無法度建立$1檔案,因為伊超過{{PLURAL:$2|$2位元|$2位元}}。',
-'backend-fail-readonly' => '囥「$1」的位,這馬只會當讀,因為「$2」。',
-'backend-fail-synced' => '"$1"這个檔案佇內部的囥位無一致。',
-'backend-fail-connect' => '無法度連接到囥"$1"的位。',
-'backend-fail-internal' => '囥"$1"的位有一寡問題。',
-'backend-fail-contenttype' => '無法度確定欲囥佇"$1"的檔案內容類型。',
-'backend-fail-batchsize' => '囥位一批$1个檔案
-{{PLURAL:$1|遍動作|遍動作}},上濟$2遍{{PLURAL:$2|動作|動作}}。',
-
-# 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"這个hông套牢的檔案。',
-'lockmanager-fail-releaselock' => '無法度解套 "$1"。',
-'lockmanager-fail-db-bucket' => '佇$1資料桶,提無夠愛套牢的資料。',
-'lockmanager-fail-db-release' => '無法度共佇伺服器$1的套牢釋放掉。',
-'lockmanager-fail-svr-release' => '無法度共佇伺服器$1的套牢釋放掉。',
-
-# ZipDirectoryReader
-'zip-file-open-error' => '佇拍開檔案的ZIP檢查時陣,拄著一个問題。',
-'zip-wrong-format' => '指定的檔案毋是一个ZIP檔案。',
-'zip-bad' => '檔案已經歹去抑是無法度讀的ZIP檔案,
-伊無法正確來檢查,看有妥當無。',
-'zip-unsupported' => '這个是一个 ZIP 檔案,伊用著 MediaWiki 無支持的ZIP功能,
-伊袂當正確檢查看有妥當無。',
-
-# Special:UploadStash
-'uploadstash' => '上載囥位',
-'uploadstash-summary' => '這个頁面提供的檔案已經上載(抑是當咧上載),毋過猶未佇wiki發布,遮的檔案除了上載的用者以外,別人看袂著。',
-'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"無佇白名單(whitelist)面頂。',
-'img-auth-nofile' => '無"$1"這个檔案',
-'img-auth-isdir' => '你想欲讀目錄"$1",
-毋過只會當讀檔案。',
-'img-auth-streaming' => '當咧串流(streaming)"$1"',
-'img-auth-public' => 'img_auth.php的功能是予私用wiki通輸出檔案,
-這個wiki的設定是一个公共wiki,
-為著安全因素,img_auth.php已經停用。',
-'img-auth-noread' => '用者無授權去讀"$1"',
-'img-auth-bad-query-string' => '網址(URL)有無效的查詢字串',
-
-# HTTP errors
-'http-invalid-url' => '無效的網址(URL):$1',
-'http-invalid-scheme' => '無支援有「$1」的網址(URL)',
-'http-request-error' => 'HTTP請求失敗,毋知啥物原因的錯誤。',
-'http-read-error' => 'HTTP讀了錯誤',
-'http-timed-out' => 'HTTP請求已經超過時間',
-'http-curl-error' => '取網址(URL)的時陣有錯誤:$1',
-'http-host-unreachable' => '連袂到網址(URL)',
-'http-bad-status' => '欲做HTTP的時陣出現問題:$1 $2',
-
-# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-'upload-curl-error6' => '連袂到網址(URL)',
-'upload-curl-error6-text' => '提供的網址(URL)無法連結,
-請確定網址是正確的而且網站有開。',
-'upload-curl-error28' => '上載已經超過時間',
-'upload-curl-error28-text' => '網站的回應傷久,
-請確定彼个網站有開,抑小等一下才閣試,
-你會使佇較閒的時陣才試。',
 
 'license' => 'Siū-khoân:',
 'license-header' => 'Siū-khoân',
-'nolicense' => '無選半項',
-'license-nopreview' => '(袂當先看覓)',
-'upload_source_url' => ' (一个有效閣開放予大眾的網址(URL))',
-'upload_source_file' => '(佇你電腦的一个檔案)',
 
 # Special:ListFiles
-'listfiles-summary' => '這个特殊頁顯示所有上載的檔案,
-若有過濾用者,只有彼个用者上載閣上新的版本才顯示。',
-'listfiles_search_for' => '照檔案名稱揣:',
-'imgfile' => '檔案',
 'listfiles' => 'Iáⁿ-siōng lia̍t-toaⁿ',
-'listfiles_thumb' => '小圖',
 'listfiles_date' => 'Ji̍t-kî',
 'listfiles_name' => 'Miâ',
 'listfiles_user' => 'Iōng-chiá',
@@ -1620,80 +716,14 @@ $1',
 # File description page
 'file-anchor-link' => 'Tóng-àn',
 'filehist' => 'Tóng-àn ê le̍k-sú',
-'filehist-help' => '揤日期/時間就通看彼時陣的檔案',
-'filehist-deleteall' => '全部刣掉',
-'filehist-deleteone' => '刣掉',
-'filehist-revert' => '回轉',
 'filehist-current' => 'hiān-chāi',
 'filehist-datetime' => 'Ji̍t-kî/ Sî-kan',
-'filehist-thumb' => '小圖',
-'filehist-thumbtext' => '細張圖佇$1的版本',
-'filehist-nothumb' => '無小圖',
-'filehist-user' => 'Iōng-chiá',
-'filehist-dimensions' => '長闊',
-'filehist-filesize' => '檔案大細',
-'filehist-comment' => '註釋',
-'filehist-missing' => '檔案無看',
 'imagelinks' => 'Ēng tio̍h ê  tóng-àn',
 'linkstoimage' => 'Ē-bīn ê {{PLURAL:$1|ia̍h liân kàu|$1 ia̍h liân kàu}}  chit ê tóng-àn:',
-'linkstoimage-more' => '超過$1{{PLURAL:$1|頁連接|頁連接}}到這个檔案,
-下跤只是連接到這个檔案的{{PLURAL:$1|頭頁連結|頭$1頁連結}}清單,
-有一个[[Special:WhatLinksHere/$2|全部的清單]]。',
 'nolinkstoimage' => 'Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.',
-'morelinkstoimage' => '看連接到這个檔案的[[Special:WhatLinksHere/$1|其他連結]]',
-'linkstoimage-redirect' => '$1 (檔案轉向) $2',
-'duplicatesoffile' => '下跤{{PLURAL:$1|个|个}}檔案佮這个仝款([[Special:FileDuplicateSearch/$2|詳細]]):',
-'sharedupload' => '這个檔案是對$1遐來的,伊可能用佇別个事工。',
-'sharedupload-desc-there' => '這个檔案對$1遐來的,伊可能用佇別个事工,
-請看[$2 檔案說明]以了解進一步訊息。',
-'sharedupload-desc-here' => '這个檔案是對$1遐來的,伊可能嘛用佇別的事工,
-伊[$2 檔案說明頁]的說明佇下跤。',
-'sharedupload-desc-edit' => '這个檔案是對$1遐來的,嘛可能用佇別个事工,
-你可能想欲改伊[$2說明頁]的說明。',
-'sharedupload-desc-create' => '這个檔案是對$1遐來的,嘛可能用佇別个事工,
-你會當改伊的[$2說明]。',
-'filepage-nofile' => '無這个名的檔案',
-'filepage-nofile-link' => '無這个名的檔案,你會使 [$1上載]。',
-'uploadnewversion-linktext' => '上載這个檔案的新版本',
-'shared-repo-from' => '來自 $1',
-'shared-repo' => '一個共享的檔案庫',
-
-# File reversion
-'filerevert' => '回轉$1',
-'filerevert-legend' => '回轉檔案',
-'filerevert-intro' => "你當咧回轉檔案'''[[Media:$1|$1]]'''到[$4佇$2 $3的版本]。",
-'filerevert-comment' => '理由:',
-'filerevert-defaultcomment' => '已經回轉到$1 $2的版本',
-'filerevert-submit' => '回轉',
-'filerevert-success' => "'''[[Media:$1|$1]]'''已經回轉到[$4 佇$2 $3的版本]。",
-'filerevert-badversion' => '這个檔案所提供的時間截記,無進前的本地版本。',
-
-# File deletion
-'filedelete' => '刣掉$1',
-'filedelete-legend' => '刣掉檔案',
-'filedelete-intro' => "你當咧刣掉檔案'''[[Media:$1|$1]]''',佮伊的歷史。",
-'filedelete-intro-old' => "你當咧刣掉'''[[Media:$1|$1]]'''佇[$4 $2 $3]的版本",
-'filedelete-comment' => '理由:',
-'filedelete-submit' => '刣掉',
-'filedelete-success' => "'''$1'''已經刣掉",
-'filedelete-success-old' => "'''[[Media:$1|$1]]'''佇$2 $3 的版本已經刣掉",
-'filedelete-nofile' => "無'''$1'''這个",
-'filedelete-nofile-old' => "揣無'''$1'''指定的保存版本",
-'filedelete-otherreason' => '其他/另外的理由:',
-'filedelete-reason-otherlist' => '其他理由',
-'filedelete-reason-dropdown' => '*一般刣掉的理由
-** 違反著作權
-** 相仝',
-'filedelete-edit-reasonlist' => '編輯刣掉的理由',
-'filedelete-maintenance' => '佇維護的時陣,暫時袂當刣掉檔案佮救倒轉來檔案。',
-'filedelete-maintenance-title' => '袂當刣掉檔案',
 
 # MIME search
 'mimesearch' => 'MIME chhiau-chhoē',
-'mimesearch-summary' => '這个頁面有用MIME類型的檔案過濾器,
-輸入︰內容類型/次類型,親像 <tt>image/jpeg</tt>。',
-'mimetype' => 'MIME 類型:',
-'download' => '下載',
 
 # Unwatched pages
 'unwatchedpages' => 'Bô lâng kàm-sī ê ia̍h',
@@ -1703,66 +733,30 @@ $1',
 
 # Unused templates
 'unusedtemplates' => 'Bô iōng ê pang-bô·',
-'unusedtemplatestext' => '這个頁面排列出佇{{ns:template}}名空間內底,閣無予別頁面用著的頁。
-請會記得佇刣掉遮的枋模進前,看有別的連接鏈連著。',
-'unusedtemplateswlh' => '其他的連結',
 
 # Random page
 'randompage' => 'Sûi-chāi kéng ia̍h',
-'randompage-nopages' => '下面無頁
-{{PLURAL:$2|名空間|名空間}}:$1.',
 
 # Random redirect
 'randomredirect' => 'Sûi-chāi choán-ia̍h',
-'randomredirect-nopages' => '佇 "$1" 名空間內底無轉向的頁。',
 
 # Statistics
 'statistics' => 'Thóng-kè',
-'statistics-header-pages' => '頁的統計',
-'statistics-header-edits' => '改的統計',
-'statistics-header-views' => '看的統計',
 'statistics-header-users' => 'Iōng-chiá thóng-kè sò·-ba̍k',
-'statistics-header-hooks' => '其他的統計',
-'statistics-articles' => '內容頁',
-'statistics-pages' => '文章',
-'statistics-pages-desc' => '佇Wiki所有的頁,包括討論頁、轉頁等等。',
-'statistics-files' => '上載檔案',
-'statistics-edits' => '自設立{{SITENAME}}以後,對頁的編輯總數',
-'statistics-edits-average' => '每頁的平均編輯數量',
-'statistics-views-total' => '看的總量',
-'statistics-views-total-desc' => '看空頁抑是特殊頁的數量無算在內。',
-'statistics-views-peredit' => '佇編輯的時陣看的數量',
-'statistics-users' => '已經註冊[[Special:ListUsers|用者]]',
-'statistics-users-active' => '猶咧出工的用者',
-'statistics-users-active-desc' => '佇前{{PLURAL:$1|一工|$1工}}有操作過的用者。',
-'statistics-mostpopular' => '上濟人看的頁',
 
 'disambiguations' => 'Khu-pia̍t-ia̍h',
 'disambiguationspage' => 'Template:disambig
 Template:KhPI
 Template:Khu-pia̍t-iah
 Template:Khu-pia̍t-ia̍h',
-'disambiguations-text' => "下面的頁攏有連接到'''區別頁''',
-In應該連接到適當的頁面。<br />一个頁面若有用[[MediaWiki:Disambiguationspage]]內底的枋模,就會算做是區別頁。",
 
 'doubleredirects' => 'Siang-thâu choán-ia̍h',
-'doubleredirectstext' => '這个頁排列出所有轉向去到捌个的轉頁,
-每一列有轉向去第一个佮第二个轉頁的連結,佮第二个轉頁的目標,彼个目標一般著是應該的頁面, 第一个轉向連結應該去的所在。
-<del>拍叉的</del>是已經處理好的項目。',
-'double-redirect-fixed-move' => '[[$1]]已經徙位,
-伊這馬轉去[[$2]]。',
-'double-redirect-fixed-maintenance' => '修改對[[$1]]到[[$2]]的兩擺轉向。',
-'double-redirect-fixer' => '轉向的改向',
 
 'brokenredirects' => 'Choán-ia̍h kò·-chiòng',
 'brokenredirectstext' => 'Í-hā ê choán-ia̍h liân kàu bô chûn-chāi ê ia̍h:',
-'brokenredirects-edit' => '修改',
-'brokenredirects-delete' => '刣掉',
 
 'withoutinterwiki' => 'Bô gí-giân liân-kiat ê ia̍h',
 'withoutinterwiki-summary' => 'Ē-kha ê ia̍h bô kî-thaⁿ gí-giân pán-pún ê liân-kiat:',
-'withoutinterwiki-legend' => '前綴',
-'withoutinterwiki-submit' => '顯示',
 
 'fewestrevisions' => 'Siōng bô siu-tēng ê bûn-chiuⁿ',
 
@@ -1770,14 +764,9 @@ In應該連接到適當的頁面。<br />一个頁面若有用[[MediaWiki:Disamb
 'nbytes' => '$1 {{PLURAL:$1|jī-goân|jī-goân}}',
 'ncategories' => '$1 {{PLURAL:$1|ê lūi-pia̍t |ê lūi-pia̍t}}',
 'nlinks' => '$1 {{PLURAL:$1|ê|ê}} liân-kiat',
-'nmembers' => '$1 {{PLURAL:$1|成員|成員}}',
+'nmembers' => '$1 ê sêng-oân',
 'nrevisions' => '$1 {{PLURAL:$1|ê|ê}} siu-tēng-pún',
-'nviews' => '看$1{{PLURAL:$1|擺|擺}}',
-'nimagelinks' => '用佇$1 {{PLURAL:$1|篇文章|篇文章}}',
-'ntransclusions' => '用佇$1 {{PLURAL:$1|篇文章|篇文章}}',
-'specialpage-empty' => '這个報表空空。',
 'lonelypages' => 'Ko·-ia̍h',
-'lonelypagestext' => '下跤的頁面無予佇{{SITENAME}}的其它頁面連結抑是用著。',
 'uncategorizedpages' => 'Bô lūi-pia̍t ê ia̍h',
 'uncategorizedcategories' => 'Bô lūi-pia̍t ê lūi-pia̍t',
 'uncategorizedimages' => 'Bô lūi-pia̍t ê iáⁿ-siōng',
@@ -1787,11 +776,6 @@ In應該連接到適當的頁面。<br />一个頁面若有用[[MediaWiki:Disamb
 'popularpages' => 'Sî-kiâⁿ ê ia̍h',
 'wantedcategories' => 'wantedcategories',
 'wantedpages' => 'Beh ti̍h ê ia̍h',
-'wantedpages-badtitle' => '佇清單內底的怪怪標題:$1',
-'wantedfiles' => '欲挃的檔案',
-'wantedfiletext-cat' => '下跤是無彼个檔案,毋過有頁面用著。有个佇外部檔案庫嘛可能寫佇清單,彼種失誤應該<del>排除</del>。另外,頁面包的檔案若無,嘛會寫佇[[:$1]]清單。',
-'wantedfiletext-nocat' => '下跤的是有頁面用著,毋過無彼个檔案。有个佇外部檔案庫嘛可能寫出來,彼種失誤應該<del>排除</del>。',
-'wantedtemplates' => '欲挃的枋模',
 'mostlinked' => 'Siōng chia̍p liân-kiat ê ia̍h',
 'mostlinkedcategories' => 'Siōng chia̍p liân-kiat ê lūi-pia̍t',
 'mostlinkedtemplates' => 'Siōng chia̍p liân-kiat ê pang-bô͘',
@@ -1799,81 +783,40 @@ In應該連接到適當的頁面。<br />一个頁面若有用[[MediaWiki:Disamb
 'mostimages' => 'Siōng chia̍p liân-kiat ê iáⁿ-siōng',
 'mostrevisions' => 'Siōng chia̍p siu-kái ê ia̍h',
 'prefixindex' => 'Só͘-ū chiàu sû-thâu sek-ín liáu ê  ia̍h',
-'prefixindex-namespace' => '照頭排的所有頁面($1名空間)',
 'shortpages' => 'Té-ia̍h',
-'longpages' => '長頁',
 'deadendpages' => 'Khu̍t-thâu-ia̍h',
 'deadendpagestext' => 'Ē-kha ê ia̍h bô liân kàu wiki lāi-té ê kî-thaⁿ ia̍h.',
 'protectedpages' => 'Siū pó-hō͘ ê ia̍h',
-'protectedpages-indef' => '干焦無限期保護的頁',
-'protectedpages-cascade' => '干焦連鎖保護的頁',
 'protectedpagestext' => 'Ē-kha ê ia̍h siū pó-hō͘, bē-tit soá-ūi ia̍h pian-chi̍p',
-'protectedpagesempty' => '照遐的參數保護的,這馬無半頁。',
-'protectedtitles' => '保護牢著的標題',
-'protectedtitlestext' => '下跤的標題袂當寫。',
-'protectedtitlesempty' => '照遐的參數保護的標題,這馬無半頁。',
 'listusers' => 'Iōng-chiá lia̍t-toaⁿ',
-'listusers-editsonly' => '干焦顯示有改過的用者',
-'listusers-creationsort' => '照開始寫的日期排',
-'usereditcount' => '改過$1{{PLURAL:$1|擺|擺}}',
-'usercreated' => ' {{GENDER:$3|}}佇$1 $2創建',
 'newpages' => 'Sin ia̍h',
 'newpages-username' => 'Iōng-chiá miâ-chheng:',
 'ancientpages' => 'Kó·-ia̍h',
 'move' => 'Sóa khì',
 'movethispage' => 'Sóa chit ia̍h',
-'unusedimagestext' => 'Ē-kha ê tóng-àn bô poàⁿ ia̍h ū teh iōng. M̄-koh ia̍h lâu leh. 
+'unusedimagestext' => 'Ē-kha ê tóng-àn bô poàⁿ ia̍h ū teh iōng. M̄-koh ia̍h lâu leh.
 Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap liân kàu iáⁿ-siōng, só·-í sui-jiân bô teh iōng, mā sī ē lia̍t tī chia.',
 'unusedcategoriestext' => 'Ū ē-kha chiah-ê lūi-pia̍t-ia̍h, m̄-koh bô kî-thaⁿ ê bûn-chiuⁿ a̍h-sī lūi-pia̍t lī-iōng.',
-'notargettitle' => '無目標',
-'notargettext' => '你無指定目標頁面抑是用者通做這个動作',
-'nopagetitle' => '無這个目標頁',
-'nopagetext' => '無你指定的目標頁。',
-'pager-newer-n' => '{{PLURAL:$1|較新一个|較新$1个 }}',
-'pager-older-n' => '{{PLURAL:$1|較舊一个|較舊$1个}}',
-'suppress' => '監督',
-'querypage-disabled' => '這个特殊頁因為效能的原因已經無咧用。',
 
 # Book sources
 'booksources' => 'Tô͘-su chu-liāu',
-'booksources-search-legend' => '揣圖書資料',
-'booksources-go' => '來去',
-'booksources-text' => '下跤是連接去賣新冊抑舊冊網站的清單,並而可能有你欲揣的冊的其他資料:',
-'booksources-invalid-isbn' => '提供的ISBN號碼無正確,請檢查拷備來源是毋是有錯誤。',
 
 # Special:Log
-'specialloguserlabel' => '操作者:',
+'specialloguserlabel' => 'Iōng-chiá:',
 'speciallogtitlelabel' => 'Bo̍k-piau (sû-tiâu ia̍h iōng-chiá) :',
-'log' => '記錄',
-'all-logs-page' => '所有公開的記錄',
-'alllogstext' => '顯示所有佇 {{SITENAME}} 有提供的記錄,
-你會當看你所選的記錄類別、用者名稱(大小寫有差)抑是相關的頁(大小寫有差)。',
 'logempty' => 'Log lāi-bīn bô sio-tùi ê hāng-bo̍k.',
-'log-title-wildcard' => '去揣以這个文字做頭的標題',
 
 # Special:AllPages
 '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ī:',
-'allpagesto' => '顯示到這頁:',
 'allarticles' => 'Só·-ū ê bûn-chiuⁿ',
 'allinnamespace' => 'Só·-ū ê ia̍h ($1 miâ-khong-kan)',
 'allnotinnamespace' => 'Só·-ū ê ia̍h (bô tī $1 miâ-khong-kan)',
 'allpagesprev' => 'Téng 1 ê',
 'allpagesnext' => 'ē 1 ê',
 'allpagessubmit' => 'Lâi-khì',
-'allpagesprefix' => '顯示頁標題有:',
-'allpagesbadtitle' => '指定的頁面標題無適當,抑是有用著別个語言抑是別个Wiki。
-伊可能是有一字抑一字以上的字是袂當用佇標題。',
-'allpages-bad-ns' => '佇{{SITENAME}}無"$1"這个名空間。',
-'allpages-hide-redirects' => '掩轉頁',
-
-# SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => '你當咧看這頁的快取(cached)版本,彼可能是第$1舊的。',
-'cachedspecial-viewing-cached-ts' => '你當咧看這頁的快取版本,彼可能佮這馬的無仝款。',
-'cachedspecial-refresh-now' => '看上新。',
 
 # Special:Categories
 'categories' => 'Lūi-pia̍t',
@@ -1881,62 +824,13 @@ Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap
 [[Special:UnusedCategories|Bô iōng tio̍h ê ūi-pia̍t]] tō bô tī chiah hián-sī.
 Lēng-goā thang chham-khó [[Special:WantedCategories|beh ti̍h ê lūi-pia̍t]].',
 'categoriesfrom' => 'Tùi chit ê lūi-pia̍t khai-sí hián-sī:',
-'special-categories-sort-count' => '按數量排',
-'special-categories-sort-abc' => '按字母排',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
 'deletedcontributions-title' => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
-'sp-deletedcontributions-contribs' => '貢獻',
 
 # Special:LinkSearch
 'linksearch' => 'Chhoē chām-goā ê liân-kiat',
-'linksearch-pat' => '揣的方式:',
-'linksearch-ns' => '名空間:',
-'linksearch-ok' => '揣',
-'linksearch-text' => '會當用親像“*.wikipedia.org”的萬用字元,
-上少愛對上頂層的網域,親像“*.org”。<br />
-支援的協議:<tt>$1</tt>(莫加佇你的搜揣)。',
-'linksearch-line' => '$1 是對$2連接來的',
-'linksearch-error' => '萬用字元干焦會當用佇主機名的頭前。',
-
-# Special:ListUsers
-'listusersfrom' => '對這个用者開始顯示:',
-'listusers-submit' => '顯示',
-'listusers-noresult' => '揣無用者',
-'listusers-blocked' => '(封鎖牢咧)',
-
-# Special:ActiveUsers
-'activeusers' => '有咧活動的用者清單',
-'activeusers-intro' => '這是佇過去$1 {{PLURAL:$1|工y|工}}有做過一寡活動的用者清單。',
-'activeusers-count' => '佇{{PLURAL:$3|一工|$3工}}內的$1改編輯',
-'activeusers-from' => '對這个用者開始顯示:',
-'activeusers-hidebots' => '掩機器人',
-'activeusers-hidesysops' => '掩管理員',
-'activeusers-noresult' => '揣無用者',
-
-# Special:Log/newusers
-'newuserlogpage' => '用者建立的記錄',
-'newuserlogpagetext' => '這是開用者口座的記錄',
-
-# Special:ListGroupRights
-'listgrouprights' => '用者陣的權利',
-'listgrouprights-summary' => '下跤是佇這个wiki分的用者陣清單,佮相關的使用權。
-每一陣的權利,通去看[[{{MediaWiki:Listgrouprights-helppage}}|其他資料]]。',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">授權的權利</span>
-* <span class="listgrouprights-revoked">扣除的權利</span>',
-'listgrouprights-group' => '分組',
-'listgrouprights-rights' => '權利',
-'listgrouprights-helppage' => 'Help:分組的權利',
-'listgrouprights-members' => '(成員列單)',
-'listgrouprights-addgroup' => '加入的{{PLURAL:$2|个|个}}組: $1',
-'listgrouprights-removegroup' => '徙走的{{PLURAL:$2|个|个}}組: $1',
-'listgrouprights-addgroup-all' => '加入所有的組',
-'listgrouprights-removegroup-all' => '離開所有的組',
-'listgrouprights-addgroup-self' => '共家己加入去{{PLURAL:$2|个|个}}組:$1',
-'listgrouprights-removegroup-self' => '共家己對{{PLURAL:$2|个|个}}組徙走:$1',
-'listgrouprights-addgroup-self-all' => '共家己加入所有的組',
-'listgrouprights-removegroup-self-all' => '共家己對所有的組徙走',
 
 # E-mail user
 'mailnologin' => 'Bô siu-phoe ê chū-chí',
@@ -1945,110 +839,35 @@ Lēng-goā thang chham-khó [[Special:WantedCategories|beh ti̍h ê lūi-pia̍t]
 'emailpage' => 'E-mail iōng-chiá',
 'emailpagetext' => 'Lí ē-tàng iōng ē-kha ê pió kià chi̍t tiuⁿ phe hō͘ chit ê iōng-chiá.
 Lí ê [[Special:Preferences|siat-tēng]] ê tiān-chú-phe tē-chí ē chhut-hiān tī tiān-chú-phe ê "Kià-phe-chiá" (From) hit ūi. Án-ne siu-phe-chiá chiah ū hoat-tō· kā lí hôe-phe.',
-'usermailererror' => '退批錯誤:',
-'defemailsubject' => '{{SITENAME}}的用者 $1 送的電子批',
-'usermaildisabled' => '你的電子批已經停掉',
-'usermaildisabledtext' => '你袂當佇這个wiki寄批予別人',
 'noemailtitle' => 'Bô e-mail chū-chí',
 'noemailtext' => 'Chit ūi iōng-chiá pēng-bô lâu ū-hāu ê e-mail chū-chí.',
-'nowikiemailtitle' => '無電子批',
-'nowikiemailtext' => '這个用者無欲收電子批。',
-'emailnotarget' => '無彼个收批的人,抑是收批的用者名稱毋著。',
-'emailtarget' => '拍入欲收批的用者名稱',
-'emailusername' => '用者名稱:',
-'emailusernamesubmit' => '送出',
-'email-legend' => '送一張電子批去予佇{{SITENAME}}的另外一位用者',
 'emailfrom' => 'Lâi chū:',
 'emailto' => 'Khì hō·:',
 'emailsubject' => 'Tê-bo̍k:',
 'emailmessage' => 'Sìn-sit:',
 'emailsend' => 'Sàng chhut-khì',
-'emailccme' => '共我的訊息用電子批寄一份予我',
-'emailccsubject' => '你送予$1訊息的副本:$2',
 'emailsent' => 'E-mail sàng chhut-khì ah',
 'emailsenttext' => 'Lí ê e-mail í-keng sàng chhut-khì ah.',
-'emailuserfooter' => '這張由$1寄予$2的電子批已經用{{SITENAME}}的「電子批用者」功能送出。',
-
-# User Messenger
-'usermessage-summary' => '留系統信息',
-'usermessage-editor' => '系統信息',
 
 # 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.',
-'watchlistanontext' => '請$1去看抑是改你的監視清單。',
 '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ⁿ.',
-'addwatch' => '加入去監視單',
 'addedwatchtext' => "\"[[:\$1]]\" chit ia̍h í-keng ka-ji̍p lí ê [[Special:Watchlist|kàm-sī-toaⁿ]]. Bī-lâi chit ia̍h a̍h-sī siong-koan ê thó-lūn-ia̍h nā ū kái-piàn, ē lia̍t tī hia. Tông-sî tī [[Special:RecentChanges|Chòe-kīn ê kái-piàn]] ē iōng '''chho·-thé''' hián-sī ia̍h ê piau-tê, án-ne khah bêng-hián. Ká-sú lí beh chiōng chit ia̍h tùi lí ê kàm-sī-toaⁿ tû tiāu, khì khòng-chè-tiâu chhi̍h \"Mài kàm-sī\" chiū ē-sái-tit.",
-'removewatch' => '對監視單徙走',
 'removedwatchtext' => '"[[:$1]]" chit ia̍h í-keng tùi lí ê [[Special:Watchlist|kàm-sī-toaⁿ]] soá cháu.',
 'watch' => 'kàm-sī',
 'watchthispage' => 'Kàm-sī chit ia̍h',
 'unwatch' => 'Mài kàm-sī',
 'unwatchthispage' => 'Mài koh kàm-sī',
-'notanarticle' => '毋是內容頁面',
-'notvisiblerev' => '別个用者的頂一个修訂本已經予人刣掉',
 'watchnochange' => 'Lí kàm-sī ê hāng-bo̍k tī hián-sī ê sî-kî í-lāi lóng bô siu-kái kòe.',
 'watchlist-details' => 'Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
-'wlheader-enotif' => '*會當用電子批通知',
-'wlheader-showupdated' => '自你頂回看的、到今有改過的會用較大烏字顯示',
 'watchmethod-recent' => 'tng teh kíam-cha choè-kīn ê siu-kái, khoàⁿ ū kàm-sī ê ia̍h bô',
 'watchmethod-list' => 'tng teh kiám-cha kàm-sī ê ia̍h khoàⁿ chòe-kīn ū siu-kái bô',
 'watchlistcontains' => 'Lí ê kàm-sī-toaⁿ siu {{PLURAL:$1|ia̍h|ia̍h}} .',
-'iteminvalidname' => "項目'$1'有問題,名稱無適當...",
 'wlnote' => "Ē-kha sī tī $3, $4 chìn-chêng {{PLURAL:chi tiám-cheng|'''$2''' tiám-cheng}} í-lâi ê {{PLURAL:$1| chi̍t piàn|'''$1''' piàn}} siu-kái.",
 'wlshowlast' => 'Hián-sī chêng $1 tiám-cheng $2 ji̍t $3',
-'watchlist-options' => '監視單的選項',
-
-# Displayed when you click the "watch" button and it is in the process of watching
-'watching' => '共監視',
-'unwatching' => '莫監視',
-'watcherrortext' => '佇你改"$1"監視設定的時陣,發生一个問題',
-
-'enotif_mailer' => '{{SITENAME}} 的電子批通知系統',
-'enotif_reset' => '共全部的頁攏當做巡過',
-'enotif_newpagetext' => '這是新的一頁',
-'enotif_impersonal_salutation' => '{{SITENAME}}用者',
-'changed' => '改過',
-'created' => '寫過',
-'enotif_subject' => '佇{{SITENAME}}的$PAGETITLE這頁捌予$CHANGEDORCREATED$PAGEEDITOR',
-'enotif_lastvisited' => '看$1,自你頂回來到今所有改的',
-'enotif_lastdiff' => '看$1這回改的',
-'enotif_anon_editor' => '無名氏用者$1',
-'enotif_body' => '敬愛的$WATCHINGUSERNAME:
-
-
-{{SITENAME}}的$PAGETITLE頁面已經佇$PAGEEDITDATE予$PAGEEDITOR$CHANGEDORCREATED,請看 $PAGETITLE_URL 這个這馬的版本。
-
-$NEWPAGE
-
-編輯的摘要:$PAGESUMMARY $PAGEMINOREDIT
-
-聯絡這位編輯者:
-
-電子批:$PAGEEDITOR_EMAIL
-本站:$PAGEEDITOR_WIKI
-
-以後佇你閣看這頁進前,若有閣改過,嘛袂通知你。
-你會當共你的監視表重設頁面的通知記號。
-
-{{SITENAME}}通知系統敬上
-
---
-欲改你的電子批設定,請看
-{{canonicalurl:{{#special:Preferences}}}}
-
-欲改你的監視表設定,請看
-{{canonicalurl:{{#special:EditWatchlist}}}}
-
-欲對你的監視單徙掉某頁,請看
-$UNWATCHURL
-
-回饋佮進一步的幫助:
-{{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
 'deletepage' => 'Thâi ia̍h',
@@ -2057,29 +876,12 @@ $UNWATCHURL
 'excontentauthor' => "loē-iông sī: '$1' (î-it ê kòng-hiàn-chiá sī '[[Special:Contributions/$2|$2]]')",
 'exbeforeblank' => "chìn-chêng ê lōe-iông sī: '$1'",
 'exblank' => 'ia̍h khang-khang',
-'delete-confirm' => '刣掉$1',
-'delete-legend' => '刣掉',
 'historywarning' => 'Kéng-kò: Lí beh thâi ê ia̍h ū {{PLURAL:$1| ê siu-tèng le̍k-sú|ê siu-tèng le̍k-sú}}:',
 'confirmdeletetext' => 'Lí tih-beh kā 1 ê ia̍h a̍h-sī iáⁿ-siōng (pau-koat siong-koan ê le̍k-sú) éng-kiú tùi chu-liāu-khò· thâi tiāu. Chhiáⁿ khak-tēng lí àn-sǹg án-ne chò, jī-chhiáⁿ liáu-kái hiō-kó, jī-chhiáⁿ bô ûi-hoán [[{{MediaWiki:Policy-url}}]].',
 'actioncomplete' => 'Chip-hêng sêng-kong',
-'actionfailed' => '做無成',
 'deletedtext' => '"$1" í-keng thâi tiāu. Tùi $2 khoàⁿ-ē-tio̍h chòe-kīn thâi ê kì-lo̍k.',
-'dellogpage' => '刣掉的記錄',
 'dellogpagetext' => 'Í-hā lia̍t chhut chòe-kīn thâi tiāu ê hāng-bo̍k.',
-'deletionlog' => '刣掉的記錄',
-'reverted' => '轉轉去前一个版本',
 'deletecomment' => 'Lí-iû:',
-'deleteotherreason' => '其他/另外的理由:',
-'deletereasonotherlist' => '其他的理由',
-'deletereason-dropdown' => '*一般刣掉的理由
-** 作者的要求
-** 違反著作權
-** 破壞',
-'delete-edit-reasonlist' => '編輯刣掉的理由',
-'delete-toobig' => '這个頁面有誠濟的編輯歷史,超過$1{{PLURAL:$1|擺|擺}}的修改。
-為著防止意外佇{{SITENAME}}造成擾亂,欲刣掉這款的頁面有限制。',
-'delete-warning-toobig' => '這頁有誠濟修改歷史,超過$1改的{{PLURAL:$1|修訂本|修訂本}}。
-共伊刣掉可能會破壞{{SITENAME}}的資料庫運作;愛細膩操作。',
 
 # Rollback
 'rollback' => 'Kā siu-kái ká tńg khì',
@@ -2087,156 +889,36 @@ $UNWATCHURL
 'rollbacklink' => 'ká tńg khì',
 'rollbackfailed' => 'Ká bē tńg khì',
 'cantrollback' => 'Bô-hoat-tō· kā siu-kái ká-tńg--khì; téng ūi kòng-hiàn-chiá sī chit ia̍h î-it ê chok-chiá.',
-'alreadyrolled' => 'Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tùi [[:$1]] ê siu-kái ká-tńg-khì; 
-í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h. 
+'alreadyrolled' => 'Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tùi [[:$1]] ê siu-kái ká-tńg-khì;
+í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h.
 Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Pian-chi̍p kài-iàu sī: \"''\$1''\".",
-'revertpage' => '回轉[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])的編輯到頂一个[[User:$1|$1]]的修訂版本',
-'revertpage-nouser' => '回轉(無用者名)的編輯到頂一个[[User:$1|$1]]的修訂版本',
-'rollback-success' => '回轉$1的編輯,
-轉轉去頂一个$2的修訂版本。',
-
-# Edit tokens
-'sessionfailure-title' => '登入的資訊失效',
-'sessionfailure' => '你的登入連線敢若有問題,
-為著防止連線被駭客(hijack),這个操作已經取消,
-請先轉去前一頁,重新載入彼頁,才閣試。',
 
 # Protect
-'protectlogpage' => '保護的記錄',
-'protectlogtext' => '下跤是保護頁有改過的清單,
-請參考[[Special:ProtectedPages|保護頁清單]]看這馬有保護的頁。',
 'protectedarticle' => 'pó-hō͘ "[[$1]]"',
-'modifiedarticleprotection' => '改"[[$1]]"的保護等級',
-'unprotectedarticle' => '已經解除"[[$1]]"的保護',
-'movedarticleprotection' => '已經共"[[$2]]"的保護設定徙去"[[$1]]"',
 'protect-title' => 'Kái "$1" ê pó-hō· tíng-kip.',
-'protect-title-notallowed' => '看"$1"的保護等級',
 'prot_1movedto2' => '[[$1]] sóa khì tī [[$2]]',
-'protect-badnamespace-title' => '袂當保護的名空間',
-'protect-badnamespace-text' => '佇這个名空間的頁面袂當共保護。',
 'protect-legend' => 'Khak-tēng beh pó-hō·',
 'protectcomment' => 'Lí-iû:',
-'protectexpiry' => '到期:',
-'protect_expiry_invalid' => '到期時間毋著',
-'protect_expiry_old' => '到期時間已經過去',
-'protect-unchain-permissions' => '解除更加保護的選項',
-'protect-text' => "你會當佇遮看佮改頁面的'''$1'''保護等級。",
-'protect-locked-blocked' => "你袂當佇封鎖的時陣改保護等級,
-下跤是'''$1'''這馬的保護等級:",
-'protect-locked-dblock' => "佇資料庫鎖牢咧的時陣,袂當改保護等級。
-下面是'''$1'''這頁這馬的保護等級:",
-'protect-locked-access' => "你的口座無改保護等級的權利,
-下面是'''$1'''這頁這馬的保護等級:",
-'protect-cascadeon' => '這頁這馬予人保護牢咧,因為伊包括佇下面{{PLURAL:$1|一个|幾个}}頁面的連鎖保護牢咧,
-你會當改這頁的保護等級,毋過對連鎖保護無影響。',
-'protect-default' => '所有用者攏會當',
-'protect-fallback' => '要求會當"$1"',
-'protect-level-autoconfirmed' => '禁止新的佮猶未註冊的用者',
-'protect-level-sysop' => '干焦管理員',
-'protect-summary-cascade' => '連鎖',
-'protect-expiring' => '佇$1會過期',
-'protect-expiring-local' => '佇$1到期',
-'protect-expiry-indefinite' => '無限',
 'protect-cascade' => 'Cascading protection - pó-hō͘ jīm-hô pau-hâm tī chit ia̍h ê ia̍h.',
-'protect-cantedit' => '你袂當改這頁的保護層級,因為你無授權共改。',
-'protect-othertime' => '其他的時間:',
-'protect-othertime-op' => '其他的時間',
-'protect-existing-expiry' => '到期的時間: $2 $3',
-'protect-otherreason' => '其他/另外的理由:',
-'protect-otherreason-op' => '其他的理由',
-'protect-dropdown' => '*一般保護的理由
-** 過量的破壞
-** 過量的灌水
-** 無生產量的編輯戰
-** 高流量頁面',
-'protect-edit-reasonlist' => '編輯保護的理由',
-'protect-expiry-options' => '一點鐘:1 hour,一工:1 day,一禮拜:1 week,兩禮拜:2 weeks,一個月:1 month,三個月:3 months,六個月:6 months,1年:1 year,無限:infinite',
-'restriction-type' => '允准:',
-'restriction-level' => '限制層級:',
-'minimum-size' => '上細',
-'maximum-size' => '上大:',
-'pagesize' => '(位元組)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Siu-kái',
 'restriction-move' => 'Sóa khì',
-'restriction-create' => '開始寫',
-'restriction-upload' => '上載',
-
-# Restriction levels
-'restriction-level-sysop' => '全保護',
-'restriction-level-autoconfirmed' => '半保護',
-'restriction-level-all' => '任何一級',
 
 # Undelete
 'undelete' => 'Kiù thâi tiāu ê ia̍h',
 'undeletepage' => 'Khoàⁿ kap kiù thâi tiāu ê ia̍h',
-'undeletepagetitle' => "'''下跤包括[[:$1]]的刣掉修訂本'''",
-'viewdeletedpage' => '看刣掉的頁',
-'undeletepagetext' => '下跤的{{PLURAL:$1|篇頁|篇頁}}已經予人刣掉,毋過猶留佇檔案庫,而且會使救倒轉來。
-檔案庫內底可能會定時清掉。',
-'undelete-fieldset-title' => '恢復修訂本',
-'undeleteextrahelp' => "欲恢復頁面的全部歷史,就共所有的選格仔留空白,閣點擊 '''''{{int:undeletebtn}}''''' ,
-欲恢復某一个版本,就共彼个版本進前的選格仔選起來,閣點擊'''''{{int:undeletebtn}}''''' 。",
-'undeleterevisions' => '$1{{PLURAL:$1|版本|版本}}的保存檔',
-'undeletehistory' => '若你共頁面恢復,所有的修訂本嘛會恢復佇歷史頁。
-若佇這頁刣掉了後,已經有一个仝名的新頁建立,按呢恢復的修訂本會囥佇歷史的頭前。',
-'undeleterevdel' => '若會變做上新的頁抑是修訂本已經部份刣掉,就無法共刣掉的頁搝倒轉來。
-若拄著這種情形,你莫共上新的修訂本選起來抑是莫共藏起來。',
-'undeletehistorynoadmin' => '這頁已經予人刣掉,
-刣掉的原因顯示佇下面的編輯摘要,猶有刣掉進前,有編輯這頁的用者明細。
-遮的修訂本的文字只有管理員才會當看。',
-'undelete-revision' => '$1予$3(佇$4 $5)刣掉的修訂本。',
-'undeleterevision-missing' => '毋著抑是無去的修訂本,
-你的連結毋著,抑是彼个修訂本己經對保管庫轉回抑徙掉。',
-'undelete-nodiff' => '無頂一个修訂本。',
-'undeletebtn' => '恢復',
-'undeletelink' => '看/恢復',
 'undeleteviewlink' => 'Khoàⁿ',
-'undeletereset' => '設便',
-'undeleteinvert' => '選項以外',
-'undeletecomment' => '理由:',
-'undeletedrevisions' => '{{PLURAL:$1|1个|$1个}}修訂本已經恢復',
-'undeletedrevisions-files' => '{{PLURAL:$1|1个|$1个}}版訂本佮{{PLURAL:$2|1个|$2个}}檔案已經恢復',
-'undeletedfiles' => '{{PLURAL:$1|1个|$1个}}檔案已經恢復',
-'cannotundelete' => '恢復刣掉的頁失敗,
-有別人可能已經先共恢復。',
-'undeletedpage' => "'''$1已經恢復'''
-
-參考[[Special:Log/delete|刣掉記錄]]有最近刣掉佮恢復的記錄。",
-'undelete-header' => '看[[Special:Log/delete|刣掉記錄]]有寫最近刣掉的頁。',
-'undelete-search-title' => '揣刣掉的頁',
-'undelete-search-box' => '揣刣掉的頁',
-'undelete-search-prefix' => '對這頁開始顯示:',
-'undelete-search-submit' => '揣',
-'undelete-no-results' => '佇刣掉頁的文件內底無彼頁。',
-'undelete-filename-mismatch' => '無法度恢復時間戳印是$1的修訂本:檔案名稱無合。',
-'undelete-bad-store-key' => '無法度恢復時間戳印是$1的修訂本:檔案佇刣掉進前就無去。',
-'undelete-cleanup-error' => '佇刣掉無咧用的歷史檔案"$1"的時陣,有錯誤。',
-'undelete-missing-filearchive' => '因為資料庫內底無ID $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' => 'Miâ-khong-kan:',
 'invert' => 'Soán-hāng í-gōa',
-'tooltip-invert' => '鉤選這个框仔會共所選的名空間內底有改的頁掩起來(佮相關有選的命空間)',
-'namespace_association' => '相關的名空間',
-'tooltip-namespace_association' => '鉤選這个框仔,嘛會包括討論名空間抑頁空間,佮伊的相關名空間',
 'blanknamespace' => '(Thâu-ia̍h)',
 
 # Contributions
 'contributions' => 'Iōng-chiá ê kòng-hiàn',
-'contributions-title' => '用者佇$1的貢獻',
 'mycontris' => 'Góa ê kòng-hiàn',
-'contribsub2' => '$1的貢獻($2)',
 'nocontribs' => 'Chhōe bô tiâu-kiāⁿ ū-tùi ê hāng-bo̍k.',
 'uctop' => '(siōng téng ê)',
 'month' => 'Kàu tó 1 kó͘ goe̍h ûi-chí:',
@@ -2244,190 +926,41 @@ $1',
 
 'sp-contributions-newbies' => 'Kan-taⁿ hián-sī sin kháu-chō ê kòng-kiàn',
 'sp-contributions-newbies-sub' => 'Sin lâi--ê',
-'sp-contributions-newbies-title' => '新用者的貢獻',
-'sp-contributions-blocklog' => '封鎖記錄',
 'sp-contributions-deleted' => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
-'sp-contributions-uploads' => '上載',
-'sp-contributions-logs' => '記錄',
 'sp-contributions-talk' => 'thó-lūn',
-'sp-contributions-userrights' => '用者的使用權管理',
-'sp-contributions-blocked-notice' => '這个用者這馬hông封鎖,
-下跤有最近封鎖的紀錄通參考:',
-'sp-contributions-blocked-notice-anon' => '這个IP地址這馬予人封鎖咧,
-下跤有最近封鎖的紀錄通參考:',
 'sp-contributions-search' => 'Chhoē chhut kòng-kiàn',
 'sp-contributions-username' => 'IP Chū-chí a̍h iōng-chiá miâ:',
-'sp-contributions-toponly' => '干焦看頂一回改的',
 'sp-contributions-submit' => 'Chhoē',
 
 # What links here
 'whatlinkshere' => 'Tó-ūi liân kàu chia',
-'whatlinkshere-title' => '連到"$1"的頁',
-'whatlinkshere-page' => '頁:',
 'linkshere' => "Í-hā '''[[:$1]]''' liân kàu chia:",
 'nolinkshere' => "Bô poàⁿ ia̍h liân kàu '''[[:$1]]'''.",
-'nolinkshere-ns' => '佇所選的名空間內底,無頁面連結到[[:$1]]。',
 'isredirect' => 'choán-ia̍h',
-'istemplate' => '包括',
-'isimage' => '檔案連結',
 'whatlinkshere-prev' => '{{PLURAL:$1|chêng|chêng $1 ê}}',
 'whatlinkshere-next' => '{{PLURAL:$1|āu|āu $1 ê}}',
 'whatlinkshere-links' => '← Liân kàu chia',
-'whatlinkshere-hideredirs' => '$1 改向',
-'whatlinkshere-hidetrans' => '$1包括',
-'whatlinkshere-hidelinks' => '$1 連到遮',
-'whatlinkshere-hideimages' => '$1圖像的連結',
-'whatlinkshere-filters' => '過濾器',
 
 # Block/unblock
-'autoblockid' => '自動封鎖 #$1',
-'block' => '封鎖用者',
-'unblock' => '解除對用者的封鎖',
 'blockip' => 'Hong-só iōng-chiá',
-'blockip-title' => '封鎖用者',
-'blockip-legend' => '封鎖用者',
-'blockiptext' => '用下跤的表來封鎖某一个IP地址抑是用者名稱的寫作。
-這只會當為著防止破壞,佮符合[[{{MediaWiki:Policy-url}}|守則]]的情況下才會當按呢做。
-佇下跤寫一个具體的理由(親像,指出一个予人破壞的頁)。',
 'ipadressorusername' => 'IP Chū-chí a̍h iōng-chiá miâ:',
-'ipbexpiry' => '到期:',
 'ipbreason' => 'Lí-iû:',
-'ipbreasonotherlist' => '其他理由',
-'ipbreason-dropdown' => '*一般封鎖的理由
-** 寫假資料
-** 共頁的內容徙掉
-** 連結到外部廣告
-** 佇頁面亂使寫
-** 威脅的行為/騷擾別人
-** 亂使用濟的口座
-** 袂當接受的用者名稱',
-'ipb-hardblock' => '防止有登入的用者對這个IP地址做編輯',
-'ipbcreateaccount' => '防止建立新口座',
-'ipbemailban' => '封鎖一个用者去寄電子批',
-'ipbenableautoblock' => '自動封鎖這个用者頂一回用的IP地址,佮後來遐的想欲編輯的IP地址',
 'ipbsubmit' => 'Hong-só chit ūi iōng-chiá',
-'ipbother' => '其他時間:',
-'ipboptions' => '兩點鐘:2 hours,一工:1 day,三工:3 days,一禮拜:1 week,兩禮拜:2 weeks,一個月:1 month,兩個月:3 months,六個月:6 months,一年:1 year,永久:infinite',
-'ipbotheroption' => '其他',
-'ipbotherreason' => '其他/另外的理由:',
-'ipbhidename' => '佇編輯佮清單共用者名稱藏起來',
-'ipbwatchuser' => '看這个用者的用者頁佮討論頁',
-'ipb-disableusertalk' => '禁止這个用者佇封鎖的時陣修改家己的討論頁',
-'ipb-change-block' => '照遮的設定閣共用者封鎖',
-'ipb-confirm' => '確定封鎖',
 'badipaddress' => 'Bô-hāu ê IP chū-chí',
 'blockipsuccesssub' => 'Hong-só sêng-kong',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] í-keng pī hong-só. <br />Khì [[Special:BlockList|hong-só lia̍t-toaⁿ]] thang khoàⁿ pī hong-só ê .',
-'ipb-blockingself' => '你欲封鎖你家己!你敢確定欲按呢做?',
-'ipb-confirmhideuser' => '你是欲封鎖一个用者佮隱藏伊的用者名稱,這會隱藏用者名稱出現佇所有的表佮記錄的項目當中,你敢確定欲按呢做?',
-'ipb-edit-dropdown' => '編輯封鎖的理由',
-'ipb-unblock-addr' => '解除封鎖$1',
-'ipb-unblock' => '拍開一个用者名稱抑是IP地址的封鎖',
-'ipb-blocklist' => '看這馬的封鎖',
-'ipb-blocklist-contribs' => '$1的貢獻',
-'unblockip' => '解除對用者的封鎖',
-'unblockiptext' => '用下跤的表,來恢復進前予人封鎖的IP地址、抑是用者名稱的寫作',
 'ipusubmit' => 'Chhú-siau chit ê hong-só',
-'unblocked' => '[[User:$1|$1]] 已經解除封鎖。',
-'unblocked-range' => '$1已經解除封鎖',
-'unblocked-id' => '對$1的封鎖已經徙掉',
-'blocklist' => '封鎖牢咧的用者',
 'ipblocklist' => 'Siū hong-só ê iōng-chiá',
-'ipblocklist-legend' => '揣一个封鎖的用者',
-'blocklist-userblocks' => '隱藏口座的封鎖',
-'blocklist-tempblocks' => '隱藏臨時的封鎖',
-'blocklist-addressblocks' => '隱藏孤一个的IP封鎖',
-'blocklist-rangeblocks' => '隱藏區段IP的封鎖',
-'blocklist-timestamp' => '戳印的時間',
-'blocklist-target' => '目標',
-'blocklist-expiry' => '到期',
-'blocklist-by' => '封鎖管理員',
-'blocklist-params' => '封鎖的參數',
-'blocklist-reason' => '理由',
-'ipblocklist-submit' => '揣',
-'ipblocklist-localblock' => '本地封鎖',
-'ipblocklist-otherblocks' => '其他的{{PLURAL:$1|封鎖|封鎖}}',
-'infiniteblock' => '無限',
-'expiringblock' => '佇$1  $2 到期',
-'anononlyblock' => '只限無名氏',
-'noautoblockblock' => '自動封鎖袂當用',
-'createaccountblock' => '停止開口座',
-'emailblock' => '電子批封鎖牢咧',
-'blocklist-nousertalk' => '袂當改家己的討論頁',
-'ipblocklist-empty' => '封鎖清單空的',
-'ipblocklist-no-results' => '請求的IP地址抑是用者名稱無予人封鎖牢咧。',
 'blocklink' => 'hong-só',
-'unblocklink' => '取消封鎖',
-'change-blocklink' => '改封鎖',
 'contribslink' => 'kòng-hiàn',
-'emaillink' => '寄電子批',
 'autoblocker' => 'Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap "[[User:$1|$1]]" kong-ke kāng 1 ê IP chū-chí.
 $1 ê kìm-chí lí-iû sī in-ūi "$2".',
-'blocklogpage' => '封鎖記錄',
-'blocklog-showlog' => '這个用者進前予人封鎖牢咧,
-下跤有封鎖的記錄會當參考:',
-'blocklog-showsuppresslog' => '這个用者進前予人封鎖牢咧閣共隱藏,
-下跤有封鎖的記錄會當參考:',
 'blocklogentry' => 'hong-só [[$1]], siat kî-hān chì $2 $3',
-'reblock-logentry' => '改[[$1]]的封鎖到期時間 $2 $3',
 'blocklogtext' => 'Chit-ê kì-lio̍k lia̍t-chhut hong-só/khui-só ê tōng-chok. Chū-tōng block ê IP tē-chí bô lia̍t--chhut-lâi ([[Special:BlockList|hong-só chheng-toaⁿ]] ū hiān-chú-sî ū-hāu ê kìm-chí hong-só o·-miâ-toaⁿ).',
-'unblocklogentry' => '解除封鎖$1',
-'block-log-flags-anononly' => '只會當是無名氏用者',
 'block-log-flags-nocreate' => 'Khui kháu-chō thêng-iōng ah',
-'block-log-flags-noautoblock' => '自動封鎖袂當用',
-'block-log-flags-noemail' => '電子批封鎖牢咧',
-'block-log-flags-nousertalk' => '袂當改家己的討論頁',
-'block-log-flags-angry-autoblock' => '已經有加強版的自動封鎖',
-'block-log-flags-hiddenname' => '用者名稱藏起來矣',
-'range_block_disabled' => '管理員使用區段IP封鎖的功能已經停用。',
-'ipb_expiry_invalid' => '到期的時間毋著',
-'ipb_expiry_temp' => '隱藏用者名稱的封鎖是永久性的。',
-'ipb_hide_invalid' => '無法度封鎖這个口座,伊可能做過誠濟擺的編輯。',
-'ipb_already_blocked' => '"$1"是封鎖牢咧',
-'ipb-needreblock' => '$1已經封鎖牢咧,你敢欲敢這个設定?',
-'ipb-otherblocks-header' => '其他的{{PLURAL:$1|封鎖|封鎖}}',
-'unblock-hideuser' => '你無法度解封這个用者,因為in的名稱予人隱藏起來。',
-'ipb_cant_unblock' => '錯誤:無$1的封鎖,伊可能已經解除封鎖。',
-'ipb_blocked_as_range' => '錯誤: IP地址$1無予人直接封鎖,所以無通解除封鎖。
-毋過,伊佇$2範圍內底,彼範圍為當共解除封鎖。',
-'ip_range_invalid' => '毋著的網址(IP)範圍',
-'ip_range_toolarge' => '超過 /$1 的封鎖範圍是袂當的。',
-'blockme' => '封鎖我',
-'proxyblocker' => '代理封鎖器',
-'proxyblocker-disabled' => '這个功能袂當用。',
-'proxyblockreason' => '你的IP地址是一个開放的代理,伊已經予人封鎖。
-請聯絡你的網路服務提供商、抑是你單位的技術支援者,閣共in講這个嚴重的安全問題。',
-'proxyblocksuccess' => '完成。',
-'sorbsreason' => '你的IP地址佇{{SITENAME}}是當做DNSBL的開放代理服務器之一。',
-'sorbs_create_account_reason' => '你的IP地址佇{{SITENAME}}是當做DNSBL的開放代理服務器之一。
-你袂當建立口座',
-'cant-block-while-blocked' => '你若予人封鎖牢咧,你就袂封鎖別个用者。',
-'cant-see-hidden-user' => '你想欲封鎖的用者已經予人封鎖抑是隱藏,
-因為你無授權隱藏用戶,你袂當看抑是改這个用者的封鎖。',
-'ipbblocked' => '你袂當封鎖抑是解除封鎖別个用者,因為你本身就封鎖牢咧。',
-'ipbnounblockself' => '你袂當對家己解除封鎖',
 
 # Developer tools
-'lockdb' => '封鎖資料庫',
-'unlockdb' => '解除對資料庫的封鎖',
-'lockdbtext' => '封鎖資料庫會停止所有的用者去改頁、改設定、改監視單佮其他佇資料庫的修改,
-請確定你欲按呢做,閣愛佇你維修了解除封鎖。',
-'unlockdbtext' => '解除封鎖會予所有的用者通編輯、改設定、改監視單佮其他通改資料庫的代誌,
-請確認這是你欲做的動作。',
-'lockconfirm' => '是,我確實欲封鎖資料庫。',
-'unlockconfirm' => '是,我確實欲解除封鎖資料庫。',
-'lockbtn' => '封鎖資料庫',
-'unlockbtn' => '解除對資料庫的封鎖',
 'locknoconfirm' => 'Lí bô kau "khak-tēng" ê keh-á.',
-'lockdbsuccesssub' => '資料庫封鎖成功',
-'unlockdbsuccesssub' => '已經共資料庫的封鎖解除',
-'lockdbsuccesstext' => '資料庫已經封鎖牢咧。<br />
-維修了,愛會記得[[Special:UnlockDB|解除封鎖]]。',
-'unlockdbsuccesstext' => '資料庫已經解除封鎖',
-'lockfilenotwritable' => '資料庫的記錄檔案袂當寫入去,
-欲封鎖抑解除封鎖,需要網路伺服器愛會當寫入。',
-'databasenotlocked' => '資料庫無封鎖牢咧。',
-'lockedbyandtime' => '( {{GENDER:$1|$1}}佇$2 $3做的)',
 
 # Move page
 'move-page' => '徙$1',
@@ -2443,98 +976,28 @@ Che piaú-sī nā ū têng-tâⁿ, ē-sái kā sin ia̍h soà tńg-khì goân-l
 '''SÈ-JĪ!'''
 Tùi chē lâng tha̍k ê ia̍h lâi kóng, soá-ūi sī toā tiâu tāi-chì.
 Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chiah-ê hiō-kó.",
-'movepagetext-noredirectfixer' => "用下跤的表通改頁的名,閣改伊的歷史版本徙去新的,
-舊名稱這頁會轉向新頁,
-嘛愛去檢查看有[[Special:DoubleRedirects|轉兩遍]],抑是[[Special:BrokenRedirects|轉無去]],
-你有責任確定連接有指到應該去的位。
-
-請注意若新名稱的頁已經佇咧,徙的動作'''袂做''',除非彼是空的抑是轉頁閣無編輯過,
-這表示,你若創毋著,你會當改倒轉去,而且袂去崁掉一个存在的頁。
-
-'''注意!'''
-這佇熱門的頁是一个激烈、意外的改變,佇你做進前,請你確定你了解這个後果。",
 'movepagetalktext' => "Siong-koan ê thó-lūn-ia̍h (chún ū) oân-nâ ē chū-tōng tòe leh sóa-ūi. Í-hā ê chêng-hêng '''bô chún-sǹg''': *Beh kā chit ia̍h tùi 1 ê miâ-khong-kan (namespace) soá khì lēng-gōa 1 ê miâ-khong-kan, *Sin piau-tê í-keng ū iōng--kòe ê thó-lūn-ia̍h, he̍k-chiá *Ē-kha ê sió-keh-á bô phah-kau. Í-siōng ê chêng-hêng nā-chún tī leh, lí chí-hó iōng jîn-kang ê hong-sek sóa ia̍h a̍h-sī kā ha̍p-pèng (nā ū su-iàu).",
 'movearticle' => 'Sóa ia̍h:',
-'moveuserpage-warning' => "'''注意:'''你咧徙用著的頁,請注意這干焦徙振動頁,''無''改用者名。",
 'movenologin' => 'Bô teng-ji̍p',
 'movenologintext' => 'Lí it-tēng ài sī chù-chheh ê iōng-chiá jī-chhiáⁿ ū [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng sóa ia̍h.',
-'movenotallowed' => '你無授權通去徙頁',
-'movenotallowedfile' => '你無授權通去徙檔案',
-'cant-move-user-page' => '你無授權通去徙用者頁(無包括伊的下頁)',
-'cant-move-to-user-page' => '你無授權通去徙用者頁(下頁例外)',
 'newtitle' => 'Khì sin piau-tê:',
 'move-watch' => 'Kàm-sī chit ia̍h',
 'movepagebtn' => 'Sóa ia̍h',
 'pagemovedsub' => 'Sóa-ūi sêng-kong',
-'movepage-moved' => '\'\'\'"$1" 已經徙去 "$2"\'\'\'',
-'movepage-moved-redirect' => '已經建立一个轉向的頁。',
-'movepage-moved-noredirect' => '建立轉頁無成。',
 'articleexists' => 'Kāng miâ ê ia̍h í-keng tī leh, a̍h-sī lí kéng ê miâ bô-hāu. Chhiáⁿ kéng pa̍t ê miâ.',
-'cantmove-titleprotected' => '你袂當徙頁去這位,因為新名稱的建立予人保護牢咧。',
 'talkexists' => "'''Ia̍h ê loē-bûn ū soá cháu, m̄-koh siong-koan ê thó-lūn-ia̍h bô toè leh soá, in-ūi sin piau-tê pun-té tō ū hit ia̍h. Chhiáⁿ iōng jîn-kang ê hoat-tō· kā ha̍p-pèng.'''",
 'movedto' => 'sóa khì tī',
 'movetalk' => 'Sūn-sòa sóa thó-lūn-ia̍h',
-'move-subpages' => '徙子頁(上到$1頁)',
-'move-talk-subpages' => '徙討論頁的子頁(上到$1頁)',
-'movepage-page-exists' => '頁面 $1 已經佇咧,袂當自動崁過。',
 'movepage-page-moved' => '$1 í-keng sóa khì tī $2.',
-'movepage-page-unmoved' => '$1這頁袂當徙去$2',
-'movepage-max-pages' => '上濟$1{{PLURAL:$1|頁|頁}}已經徙位,袂有閣甲濟會自動徙位。',
-'movelogpage' => '徙位記錄',
 'movelogpagetext' => 'Ē-kha lia̍t-chhut hông soá-ūi ê ia̍h.',
-'movesubpage' => '{{PLURAL:$1|子頁|子頁}}',
-'movesubpagetext' => '這頁有$篇{{PLURAL:$1|子頁|子頁}}佇下跤。',
-'movenosubpage' => '這頁無下頁',
 'movereason' => 'Lí-iû:',
-'revertmove' => '回轉',
-'delete_and_move' => '刣掉而且徙走',
-'delete_and_move_text' => '==需要刣掉==
-目標頁面"[[:$1]]"已經有矣,
-你敢真正欲為著徙頁共彼頁刣掉?',
-'delete_and_move_confirm' => '無毋著,共刣掉彼頁。',
-'delete_and_move_reason' => '為著徙位,[[$1]]已經刣掉。',
 'selfmove' => 'Goân piau-tê kap sin piau-tê sio-siâng; bô hoat-tō· sóa.',
-'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' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái soá tín-tāng.'''
 Ē-kha ū choè-kīn ê kì-lio̍k thang chham-khó:",
-'semiprotectedpagemovewarning' => "'''注意:'''這頁予人保護牢咧,只有有註冊的用者通徙振動,
-下跤有最近的記錄通參考:",
-'move-over-sharedrepo' => '== 檔案已經存在 ==
-[[:$1]]已經佇共享資源,共檔案徙到這个標題會蓋掉共享的檔案。',
-'file-exists-sharedrepo' => '仝名的檔案已經佇共享資源,
-請用另外一个檔案名稱。',
 
 # Export
 'export' => 'Su-chhut ia̍h',
-'exporttext' => '你會當共某一頁抑是一組頁的文字佮修改歷史以 XML 格式輸出,
-按呢就會當佇別个用MediaWiki的Wiki網站,佇[[Special:Import|輸入頁]]做輸入。
-
-欲輸出頁面,請佇下跤的文字框拍頁的標題,每一逝一个標題,閣選擇你敢欲這馬的修訂本佮所有過去的修訂本、頁的歷史項目,抑是這馬的修訂本佮上尾的編輯信息。
-
-另外你嘛會當連結輸出檔案,親像你會當用[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]輸出「[[{{MediaWiki:Mainpage}}]]」這頁。',
-'exportall' => '輸出所有的頁',
 'exportcuronly' => 'Hān hiān-chhú-sî ê siu-téng-pún, mài pau-koat kui-ê le̍k-sú',
-'exportnohistory' => "----
-'''注意:'''因為性能的原因,對這个表輸出頁面的全部歷史已經停止。",
-'exportlistauthors' => '包括每一頁的貢獻者全部清單',
-'export-submit' => '輸出',
-'export-addcattext' => '對這類別加頁面:',
-'export-addcat' => '加頁面',
-'export-addnstext' => '對這个名空間加頁面:',
-'export-addns' => '加頁面',
-'export-download' => '保存做檔案',
-'export-templates' => '包括枋模',
-'export-pagelinks' => '包刮到第幾層的轉頁:',
 
 # Namespace 8 related
 'allmessages' => 'Hē-thóng sìn-sit',
@@ -2543,123 +1006,29 @@ Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chia
 'allmessagescurrent' => 'Bo̍k-chêng ê bûn-jī',
 'allmessagestext' => 'Che sī MediaWiki: miâ-khong-kan lāi-té ê hē-thóng sìn-sit chheng-toaⁿ.
 Lí nā beh tàu saⁿ-kang hoan-e̍k. Chhiáⁿ kàu [//www.mediawiki.org/wiki/Localisation MediaWiki chāi-tè-hoà] kap [//translatewiki.net translatewiki.net] bāng-chām.',
-'allmessagesnotsupportedDB' => "這頁袂當用得,因為'''\$wgUseDatabaseMessages'''已經停用。",
-'allmessages-filter-legend' => '過濾器',
-'allmessages-filter' => '以家己設的去過濾:',
-'allmessages-filter-unmodified' => '無修改過',
-'allmessages-filter-all' => '全部',
-'allmessages-filter-modified' => '修改',
-'allmessages-prefix' => '欲做過濾的頭前文字:',
-'allmessages-language' => '話語:',
-'allmessages-filter-submit' => '來去',
 
 # Thumbnails
 'thumbnail-more' => 'Hòng-tōa',
 'filemissing' => 'Bô tóng-àn',
-'thumbnail_error' => '產生小圖時錯誤:$1',
-'djvu_page_error' => 'DjVu頁面超出範圍',
-'djvu_no_xml' => '無法度對DjVu檔案內底取得XML',
-'thumbnail-temp-create' => '無法度建立臨時的小圖檔案',
-'thumbnail-dest-create' => '袂當共小圖囥去欲囥的位',
-'thumbnail_invalid_params' => '無適當的小圖參數',
-'thumbnail_dest_directory' => '無法度建立目標的目錄',
-'thumbnail_image-type' => '圖相的類型無支援',
-'thumbnail_gd-library' => '未完成的GD設定: 欠功能$1',
-'thumbnail_image-missing' => '檔案敢若無看:$1',
 
 # Special:Import
 'import' => 'Su-ji̍p ia̍h',
-'importinterwiki' => '跨 wiki 輸入',
-'import-interwiki-text' => '選一个Wiki佮頁標題來輸入,
-修訂本日期佮修改者名稱會保留,
-所有跨Wiki的輸入動作會記佇[[Special:Log/import|輸入記錄]]。',
-'import-interwiki-source' => '來源Wiki/頁面:',
-'import-interwiki-history' => '拷備這頁的所有修訂本',
-'import-interwiki-templates' => '包括所有的枋模',
-'import-interwiki-submit' => '輸入',
-'import-interwiki-namespace' => '目標名空間:',
-'import-upload-filename' => '檔案名稱:',
-'import-comment' => '註釋:',
-'importtext' => '請佇來源的Wiki,使用[[Special:Export|輸出功能]]輸出檔案,
-匟入去你的電腦了,閣共上載到遮。',
-'importstart' => '當咧輸入頁面...',
-'import-revision-count' => '$1份{{PLURAL:$1|修訂本|修訂本}}',
-'importnopages' => '無頁通輸入。',
-'imported-log-entries' => '輸入的$1 {{PLURAL:$1|log entry|記錄條目}}。',
-'importfailed' => '輸入失敗: <nowiki>$1</nowiki>',
-'importunknownsource' => '毋捌的輸入來源類型',
-'importcantopen' => '無法度拍開輸入的檔案',
-'importbadinterwiki' => '毋著的跨Wiki連結',
-'importnotext' => '空的抑是無字',
-'importsuccess' => '輸入完成!',
-'importhistoryconflict' => '有衝突的修訂本佇咧(可能是進前捌輸入這頁)',
-'importnosources' => '毋捌定義跨Wiki輸入的來源,而且直接上載歷史是袂當用。',
-'importnofile' => '無輸入的檔案有上載。',
-'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' => '袂使對所指定的Wiki輸入。',
-'import-error-edit' => '"$1"這頁無輸入,因為你無允准通共改。',
-'import-error-create' => '"$1"這頁無輸入,因為你無允准通建立。',
-'import-error-interwiki' => '"$1"這頁無輸入,因為彼个名稱已經保留予外部連結(跨Wiki連結)。',
-'import-error-special' => '無共頁面"$1"輸入,因為名稱是留予名空間,袂當用佇頁面。',
-'import-error-invalid' => '無輸入"$1"這頁,因為名稱無適合。',
-
-# Import log
-'importlogpage' => '輸入記錄',
-'importlogpagetext' => '管理上的輸入別个wiki頁面佮編輯歷史。',
-'import-logentry-upload' => '透過上載檔案輸入[[$1]]',
-'import-logentry-upload-detail' => '$1份{{PLURAL:$1|修訂本|修訂本}}',
-'import-logentry-interwiki' => '跨Wiki的$1',
-'import-logentry-interwiki-detail' => '對$2來的$1份{{PLURAL:$1|修訂本|修訂本}}',
-
-# JavaScriptTest
-'javascripttest' => 'JavaScript試用',
-'javascripttest-disabled' => '這个功能袂當用。',
-'javascripttest-title' => '試用$1',
-'javascripttest-pagetext-noframework' => '這頁市保留予試用JavaScrips。',
-'javascripttest-pagetext-unknownframework' => '未知的試用架構"$1"。',
-'javascripttest-pagetext-frameworks' => '請選下跤的一个試用架構:$1',
-'javascripttest-pagetext-skins' => '揣一个外皮來試:',
-'javascripttest-qunit-intro' => '看mediawiki.org的[$1 試用說明]',
-'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit 試驗套件',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Lí chit ê iōng-chiá ê ia̍h',
-'tooltip-pt-anonuserpage' => '你編輯本站所用IP所對應的用者頁',
 'tooltip-pt-mytalk' => 'Lí ê thó-lūn ia̍h',
-'tooltip-pt-anontalk' => '這个IP地址為著編輯所做的討論',
 'tooltip-pt-preferences' => 'Lí ê siat-tēng',
-'tooltip-pt-watchlist' => '你監視的頁有改過的列表',
 'tooltip-pt-mycontris' => 'Lí ê kòng-hiàn lia̍t-toaⁿ',
 'tooltip-pt-login' => 'Hi-bāng lí teng-ji̍p; m̄-ko bô kiông-chè',
 'tooltip-pt-anonlogin' => 'Hi-bāng lí teng-ji̍p; m̄-ko bô kiông-chè',
 'tooltip-pt-logout' => 'Teng-chhut',
 'tooltip-ca-talk' => 'Loē-iông ê thó-lūn',
 'tooltip-ca-edit' => 'Lí ē-sái kái chit ia̍h. Beh chhûn chìn-chiân, chhiáⁿ chhi̍h  sing-khoàⁿ-māi ê liú-á',
-'tooltip-ca-addsection' => '寫新的一段',
 '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-protect' => '保護這頁',
-'tooltip-ca-unprotect' => '改這頁的保護',
-'tooltip-ca-delete' => 'Thâi chit ia̍h',
-'tooltip-ca-undelete' => '恢復這頁予人刣掉進前的編輯',
-'tooltip-ca-move' => '徙這頁',
-'tooltip-ca-watch' => '共這頁加入你的監視單',
 'tooltip-ca-unwatch' => 'Lí ê kàm-sī-toaⁿ soá tiàu chit ia̍h.',
 'tooltip-search' => 'Chhoé {{SITENAME}}',
-'tooltip-search-go' => '跳去佮這完全仝名的頁',
 'tooltip-search-fulltext' => 'Chhoé ū chia-ê jī ê ia̍h',
 'tooltip-p-logo' => 'Khì thâu-ia̍h',
 'tooltip-n-mainpage' => 'Khì thâu-ia̍h',
@@ -2671,564 +1040,52 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 'tooltip-n-help' => 'Beh chhoé ê só͘-chāi',
 'tooltip-t-whatlinkshere' => 'Só͘-ū liân kàu chia ê liat-toaⁿ',
 'tooltip-t-recentchangeslinked' => 'Liân kàu chit ia̍h koh choè-kīn ū kái koè--ê',
-'tooltip-feed-rss' => '訂看這頁的RSS',
-'tooltip-feed-atom' => '這頁有Atom訂看的',
 'tooltip-t-contributions' => 'Khoàⁿ chit ê iōng-chiá ê kòng-hiàn lia̍t-toaⁿ',
-'tooltip-t-emailuser' => '寄一張e-mail予這个用者',
 'tooltip-t-upload' => 'Í-keng sàng chiūⁿ-bāng ê tóng-àn',
 'tooltip-t-specialpages' => 'Só͘-ū te̍k-sû-ia̍h ê lia̍t-toaⁿ',
 'tooltip-t-print' => 'Chit ia̍h ê ìn-soat pán-pún',
 'tooltip-t-permalink' => 'Chi̍t ia̍h kái--koè pán-pún ê éng-kiú liân-kiat',
 'tooltip-ca-nstab-main' => 'khoàⁿ ia̍h ê loē-iông',
 'tooltip-ca-nstab-user' => 'Khoàⁿ iōng-chiá ê Ia̍h',
-'tooltip-ca-nstab-media' => '看媒體頁',
-'tooltip-ca-nstab-special' => '這是一篇特殊頁,你袂當編輯。',
-'tooltip-ca-nstab-project' => '看事工頁',
 'tooltip-ca-nstab-image' => 'Khoàⁿ tóng-àn ia̍h',
-'tooltip-ca-nstab-mediawiki' => '看系統訊息',
-'tooltip-ca-nstab-template' => '看枋模',
-'tooltip-ca-nstab-help' => '看幫贊頁',
 'tooltip-ca-nstab-category' => 'Khoàⁿ lūi-pia̍t ia̍h',
-'tooltip-minoredit' => '共這做一个小修改記號',
 'tooltip-save' => 'Pó-chhûn lí chò ê kái-piàn',
 'tooltip-preview' => 'Chhiáⁿ tī pó-chûn chìn-chêng,  sian khoàⁿ lí chò ê kái-piàn !',
-'tooltip-diff' => '顯示你對這頁所改的',
-'tooltip-compareselectedversions' => '看選擇的兩个修訂本差偌濟',
-'tooltip-watch' => '共這頁加入你的監視單',
-'tooltip-watchlistedit-normal-submit' => '莫監視',
-'tooltip-watchlistedit-raw-submit' => '改監視單',
-'tooltip-recreate' => '重建立頁,就算講伊欲予人刣掉',
-'tooltip-upload' => '開始上載',
 'tooltip-rollback' => 'Ji̍h "Hoê-choán" ē-sái thè tńg-khì téng-chi̍t-ê kái ê lâng ê ia̍h.',
-'tooltip-undo' => '『取消』會使回轉這个編輯而且會使先看覓編輯的結果,閣會使佇概要加入原因。',
 'tooltip-preferences-save' => '保存設定',
 'tooltip-summary' => 'Siá chi̍t-ê kán-tan soat-bêng',
 
-# Metadata
-'notacceptable' => '網站伺服器無提供你客戶端通讀的資料格式。',
-
 # Attribution
 'anonymous' => '{{SITENAME}} ê {{PLURAL:$1|ê bô kì-miâ ê iōng-chiá|ê bô kì-miâ ê iōng-chiá}} .',
 'siteuser' => '{{SITENAME}} iōng-chiá $1',
-'anonuser' => '{{SITENAME}}的無名氏用者 $1',
-'lastmodifiedatby' => '這頁頂回佇$1 $2予$3改過。',
 'othercontribs' => 'Kin-kù $1 ê kòng-hiàn.',
-'others' => '其他',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|iōng-chiá|iōng-chiá}} $1',
-'anonusers' => '{{SITENAME}}無名氏{{PLURAL:$2|用者|用者}}$1',
-'creditspage' => '頁面感謝',
-'nocredits' => '這頁無感謝名單的信息。',
-
-# Spam protection
-'spamprotectiontitle' => '垃圾過濾器',
-'spamprotectiontext' => '你欲保存的文字予垃圾過濾器阻擋。
-這可能是因為有一个連接是連到其他的黑名單網站。',
-'spamprotectionmatch' => '下跤的文字引起垃圾過濾器:$1',
-'spambot_username' => 'MediaWiki 廣告清除',
-'spam_reverting' => '恢復到頂一个無連結到$1的修訂本',
-'spam_blanking' => '所有有連結到$1的修訂本,清掉當中',
-
-# Info page
-'pageinfo-title' => '"$1"的資訊',
-'pageinfo-header-edits' => '修改',
-'pageinfo-header-watchlist' => '監視單',
-'pageinfo-header-views' => '看',
-'pageinfo-subjectpage' => '頁',
-'pageinfo-talkpage' => '討論頁',
-'pageinfo-watchers' => '監視的人數',
-'pageinfo-edits' => '編輯幾擺',
-'pageinfo-authors' => '幾个作者',
-'pageinfo-views' => '看幾擺',
-'pageinfo-viewsperedit' => '看每一个編輯',
 
 # Patrolling
 'markaspatrolleddiff' => 'Phiau-sī sûn--kòe',
-'markaspatrolledtext' => 'kā chit ia̍h kì-hō chò sûn--koè = 共這頁記號做巡過',
-'markedaspatrolled' => 'kì-hō chò sûn--koè = 記號做巡過',
 'markedaspatrolledtext' => 'Soán-te̍k  ê siu-tēng-pún [[:$1]]  í-keng kì-hō chò sûn--kòe.',
-'rcpatroldisabled' => '巡最近改的功能已經關掉',
-'rcpatroldisabledtext' => '巡最近改過的功能這馬停用。',
-'markedaspatrollederror' => '袂使記號做巡查過',
-'markedaspatrollederrortext' => '你愛指定一个修訂本是巡過的',
-'markedaspatrollederror-noautopatrol' => '你袂當記號你家己改的修訂本是巡過的',
-
-# Patrol log
-'patrol-log-page' => '巡查記錄',
-'patrol-log-header' => '這是一个已經巡查過的修訂本記錄',
-'log-show-hide-patrol' => '$1巡查記錄',
 
 # Image deletion
 'deletedrevision' => 'Kū siu-tēng-pún $1 thâi-tiāu ā.',
-'filedeleteerror-short' => '欲刣掉檔案的時陣有錯誤:$1',
-'filedeleteerror-long' => '佇欲刣掉檔案的時陣有錯誤:
-
-$1',
-'filedelete-missing' => '"$1"這个檔案袂當刣掉,無彼个檔案。',
-'filedelete-old-unregistered' => '指定的"$1"檔案修訂本無佇資料庫內底。',
-'filedelete-current-unregistered' => '指定的"$1"檔案無佇資料庫內底。',
-'filedelete-archive-read-only' => '佇網站伺服器的存檔目錄 "$1" 袂當寫入去。',
 
 # Browsing diffs
 'previousdiff' => '← Khì chêng 1 ê siu-kái',
 'nextdiff' => 'Khì āu 1 ê siu-kái →',
 
 # Media information
-'mediawarning' => "'''注意''':這款檔案類型可能有惡意的資料。
-執行彼,可能對你的系統帶來危害。",
 'imagemaxsize' => "Iáⁿ-siōng toā-sè ê hān-chè:<br />''(ēng tī tóng-àn soeh-bêng-ia̍h)''",
 'thumbsize' => 'Sok-tô· (thumbnail) jōa tōa tiuⁿ:',
-'widthheightpage' => '$1 × $2, {{PLURAL:$3|頁|頁}}',
-'file-info' => '檔案大細:$1,MIME類型:$2',
-'file-info-size' => '$1 × $2  像素,檔案大細:$3,MIME類型:$4',
-'file-info-size-pages' => '$1 × $2 像素,檔案大細: $3,檔案類型: $4, $5 {{PLURAL:$5|頁|頁}}',
 'file-nohires' => 'Bô khah koân ê kái-sek-tō͘.',
-'svg-long-desc' => 'SVG 檔案,一般的長闊:$1 × $2 像素,檔案大小:$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|幅|幅}}',
 
 # Special:NewFiles
 'newimages' => 'Sin iáⁿ-siōng oē-lóng',
 'imagelisttext' => "Í-hā sī '''$1''' {{PLURAL:$1|tiuⁿ|tiuⁿ}} iáⁿ-siōng ê lia̍t-toaⁿ, chiàu $2 pâi-lia̍t.",
-'newimages-summary' => '這个特殊頁顯示頂一个上載的檔案。',
-'newimages-legend' => '過濾器',
-'newimages-label' => '檔案名稱(抑伊的部份名稱)',
-'showhidebots' => '($1機器人)',
-'noimages' => '無物件通看。',
 'ilsubmit' => 'Kiám-sek',
 'bydate' => 'chiàu ji̍t-kî',
-'sp-newimages-showfrom' => ' 顯示$2, $1後尾的新檔案',
-
-# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds' => '{{PLURAL:$1|$1秒|$1秒}}',
-'minutes' => '{{PLURAL:$1|$1分鐘|$1分鐘}}',
-'hours' => '{{PLURAL:$1|$1點鐘|$1點鐘}}',
-'days' => '{{PLURAL:$1|$1工|$1工}}',
-'ago' => '$1進前',
-
-# Bad image list
-'bad_image_list' => '規格照下跤:
-
-只有(以 * 做頭)排列出的項目會處理。
-每一逝的第一个連結是bad file的連結。
-了後仝一逝後壁的連結會看做是例外,也就是彼个檔案會使佇佗位的頁面通顯示。',
 
 # Metadata
-'metadata' => '元資訊',
-'metadata-help' => '這个檔案有其他的資訊,可能是翕相機抑是掃描器寫的,
-若檔案有人改過,一寡說明就無完全反應改過的檔案',
 'metadata-expand' => 'Hián-sī iù-chiat',
 'metadata-collapse' => 'Am iù-chiat',
-'metadata-fields' => '這个信息所排來出的影相元資料,是會佇欲顯示元資料表的時陣顯示。
-其他的元資料是先藏起來。
-* make
-* model
-* datetimeoriginal
-* exposuretime
-* fnumber
-* isospeedratings
-* focallength
-* artist
-* copyright
-* imagedescription
-* gpslatitude
-* gpslongitude
-* gpsaltitude',
-
-# EXIF tags
-'exif-imagewidth' => '闊',
-'exif-imagelength' => '懸',
-'exif-bitspersample' => '代表每一个像素色水的位元數',
-'exif-compression' => '壓縮方式',
-'exif-photometricinterpretation' => '像素合成',
-'exif-orientation' => '方向',
-'exif-samplesperpixel' => '像素數目',
-'exif-planarconfiguration' => '資料排列',
-'exif-ycbcrsubsampling' => '黃色對洋紅的二次抽樣比率',
-'exif-ycbcrpositioning' => 'Y佮C定位',
-'exif-xresolution' => '水平方向數目',
-'exif-yresolution' => '直的方向數目',
-'exif-stripoffsets' => '圖像資料區',
-'exif-rowsperstrip' => '每帶幾逝',
-'exif-stripbytecounts' => '每一條壓縮帶的位元組',
-'exif-jpeginterchangeformat' => 'JPEG SOI 偏徙',
-'exif-jpeginterchangeformatlength' => 'JPEG 資料的位元組',
-'exif-whitepoint' => '白點的色度',
-'exif-primarychromaticities' => '主要的色度',
-'exif-ycbcrcoefficients' => '色水空間轉換矩陣係數',
-'exif-referenceblackwhite' => '烏白參照數值對',
-'exif-datetime' => '檔案改的日期佮時間',
-'exif-imagedescription' => '影相標題',
-'exif-make' => '相機製造商',
-'exif-model' => '相機款式',
-'exif-software' => '使用的軟體',
-'exif-artist' => '著作者',
-'exif-copyright' => '著作權所有人',
-'exif-exifversion' => 'Exif 版本',
-'exif-flashpixversion' => '支援的 Flashpix 版本',
-'exif-colorspace' => '顏色空間',
-'exif-componentsconfiguration' => '每一个成分的意思',
-'exif-compressedbitsperpixel' => '圖像的壓縮模式',
-'exif-pixelydimension' => '圖像闊度',
-'exif-pixelxdimension' => '圖像懸度',
-'exif-usercomment' => '用者的說明',
-'exif-relatedsoundfile' => '相關的聲音檔案',
-'exif-datetimeoriginal' => '產生資料的時間',
-'exif-datetimedigitized' => '數位化的時間',
-'exif-subsectime' => '日期分秒',
-'exif-subsectimeoriginal' => '原本的日期時間秒',
-'exif-subsectimedigitized' => '數位化的時間秒',
-'exif-exposuretime' => '曝光時間',
-'exif-exposuretime-format' => '$1 秒 ($2)',
-'exif-fnumber' => '光圈(F數值)',
-'exif-exposureprogram' => '曝光模式',
-'exif-spectralsensitivity' => '感光',
-'exif-isospeedratings' => 'ISO 速率',
-'exif-shutterspeedvalue' => 'APEX快門速度',
-'exif-aperturevalue' => 'APEX光圈',
-'exif-brightnessvalue' => 'APEX光度',
-'exif-exposurebiasvalue' => '曝光補償',
-'exif-maxaperturevalue' => '上大陸地光圈',
-'exif-subjectdistance' => '物距',
-'exif-meteringmode' => '測量模式',
-'exif-lightsource' => '光源',
-'exif-flash' => '閃光燈',
-'exif-focallength' => '焦距',
-'exif-subjectarea' => '主體區域',
-'exif-flashenergy' => '閃光燈強度',
-'exif-focalplanexresolution' => 'X軸焦面的解析度',
-'exif-focalplaneyresolution' => 'Y軸焦面的解析度',
-'exif-focalplaneresolutionunit' => '焦平面的解析度單位',
-'exif-subjectlocation' => '主題位置',
-'exif-exposureindex' => '曝光指數',
-'exif-sensingmethod' => '感光模式',
-'exif-filesource' => '檔案源',
-'exif-scenetype' => '場景類型',
-'exif-customrendered' => '自訂的圖像處理',
-'exif-exposuremode' => '曝光模式',
-'exif-whitebalance' => '白平衡',
-'exif-digitalzoomratio' => '數字變焦比率',
-'exif-focallengthin35mmfilm' => '35公厘的底片焦距',
-'exif-scenecapturetype' => '情景的攝影類型',
-'exif-gaincontrol' => '場景控制',
-'exif-contrast' => '對比度',
-'exif-saturation' => '飽水度',
-'exif-sharpness' => '銳化',
-'exif-devicesettingdescription' => '設定裝置的說明',
-'exif-subjectdistancerange' => '主體距離範圍',
-'exif-imageuniqueid' => '獨一的影像編碼',
-'exif-gpsversionid' => 'GPS 標籤(tag)版本',
-'exif-gpslatituderef' => '北緯抑南緯',
-'exif-gpslatitude' => '緯度',
-'exif-gpslongituderef' => '東經抑西經',
-'exif-gpslongitude' => '經度',
-'exif-gpsaltituderef' => '海拔正負參照',
-'exif-gpsaltitude' => '海拔',
-'exif-gpstimestamp' => 'GPS 時間(原子時鐘)',
-'exif-gpssatellites' => '測量用的衛星',
-'exif-gpsstatus' => '接收器狀態',
-'exif-gpsmeasuremode' => '測量模式',
-'exif-gpsdop' => '測量精度',
-'exif-gpsspeedref' => '速度單位',
-'exif-gpsspeed' => 'GPS 接收器速度',
-'exif-gpstrackref' => '運動方位參照',
-'exif-gpstrack' => '運動方位',
-'exif-gpsimgdirectionref' => '圖像方位參照',
-'exif-gpsimgdirection' => '圖像方位',
-'exif-gpsmapdatum' => '使用地理測繪數據',
-'exif-gpsdestlatituderef' => '目標緯度參照',
-'exif-gpsdestlatitude' => '目標緯度',
-'exif-gpsdestlongituderef' => '目標經度參照',
-'exif-gpsdestlongitude' => '目標經度',
-'exif-gpsdestbearingref' => '目標方位參照',
-'exif-gpsdestbearing' => '目標方位',
-'exif-gpsdestdistanceref' => '目標距離參照',
-'exif-gpsdestdistance' => '目標距離',
-'exif-gpsprocessingmethod' => 'GPS 處理方法名稱',
-'exif-gpsareainformation' => 'GPS 區域名稱',
-'exif-gpsdatestamp' => 'GPS 日期',
-'exif-gpsdifferential' => 'GPS 偏差修正',
-'exif-jpegfilecomment' => 'JPEG 檔案註解',
-'exif-keywords' => '關鍵字',
-'exif-worldregioncreated' => '翕的所在',
-'exif-countrycreated' => '翕的國家',
-'exif-countrycodecreated' => '翕的國家編碼',
-'exif-provinceorstatecreated' => '翕的省抑是州',
-'exif-citycreated' => '翕的都市',
-'exif-sublocationcreated' => '翕的行政區',
-'exif-worldregiondest' => '顯示所在',
-'exif-countrydest' => '顯示國家',
-'exif-countrycodedest' => '顯示國家編碼',
-'exif-provinceorstatedest' => '顯示省抑州',
-'exif-citydest' => '顯示都市',
-'exif-sublocationdest' => '顯示行政區',
-'exif-objectname' => '標題簡稱',
-'exif-specialinstructions' => '特別的說明',
-'exif-headline' => '標題',
-'exif-credit' => '署名/提供者',
-'exif-source' => '來源',
-'exif-editstatus' => '圖像的編輯狀態',
-'exif-urgency' => '緊急性',
-'exif-fixtureidentifier' => '配備名稱',
-'exif-locationdest' => '位置說明',
-'exif-locationdestcode' => '位置的編碼',
-'exif-objectcycle' => '媒體的時間',
-'exif-contact' => '聯絡資料',
-'exif-writer' => '作者',
-'exif-languagecode' => '話語',
-'exif-iimversion' => 'IIM版本',
-'exif-iimcategory' => '類別',
-'exif-iimsupplementalcategory' => '補充的分類',
-'exif-datetimeexpires' => '佇這日以後莫用',
-'exif-datetimereleased' => '發表佇',
-'exif-originaltransmissionref' => '原傳輸位置的編碼',
-'exif-identifier' => '標識符號',
-'exif-lens' => '用的鏡頭',
-'exif-serialnumber' => '相機的號碼',
-'exif-cameraownername' => '相機的主人',
-'exif-label' => '標籤',
-'exif-datetimemetadata' => '頂回改元數據的日期',
-'exif-nickname' => '非正式的圖像名稱',
-'exif-rating' => '評分(上懸5分)',
-'exif-rightscertificate' => '權利管理證書',
-'exif-copyrighted' => '版權狀況',
-'exif-copyrightowner' => '版權所有人',
-'exif-usageterms' => '使用條款',
-'exif-webstatement' => '網上的版權說明',
-'exif-originaldocumentid' => '原本文件的唯一鑑識碼',
-'exif-licenseurl' => '版權授權的連結',
-'exif-morepermissionsurl' => '其他的許可信息',
-'exif-attributionurl' => '利用這个作品的時陣,請連結到',
-'exif-preferredattributionname' => '利用這个作品的時陣,請共掛名',
-'exif-pngfilecomment' => 'PNG檔案註解',
-'exif-disclaimer' => '無負責聲明',
-'exif-contentwarning' => '內容警告',
-'exif-giffilecomment' => 'GIF檔案註解',
-'exif-intellectualgenre' => '項目的類型',
-'exif-subjectnewscode' => '主題代碼',
-'exif-scenecode' => 'IPTC現場代碼',
-'exif-event' => '事件的描述',
-'exif-organisationinimage' => '組織的描述',
-'exif-personinimage' => '所描述的人',
-'exif-originalimageheight' => '佇剪裁進前的懸度',
-'exif-originalimagewidth' => '佇剪裁進前的闊度',
-
-# EXIF attributes
-'exif-compression-1' => '無壓縮',
-'exif-compression-2' => 'CCITT第3組一維修改霍夫曼進程長度編碼',
-'exif-compression-3' => 'CCITT第3組傳真編碼',
-'exif-compression-4' => 'CCITT第4組傳真編碼',
-
-'exif-copyrighted-true' => '版權保護',
-'exif-copyrighted-false' => '公共領域',
-
-'exif-unknowndate' => '毋知日期',
-
-'exif-orientation-1' => '一般',
-'exif-orientation-2' => '兩爿相換',
-'exif-orientation-3' => '踅180度',
-'exif-orientation-4' => '面頂下跤相換',
-'exif-orientation-5' => '倒踅90度,閣面頂下跤相換',
-'exif-orientation-6' => '倒踅90度',
-'exif-orientation-7' => '正踅90度,閣面頂下跤相換',
-'exif-orientation-8' => '正踅90度',
-
-'exif-planarconfiguration-1' => '矮肥格式',
-'exif-planarconfiguration-2' => '平的格式',
-
-'exif-colorspace-65535' => '色水無校正過',
-
-'exif-componentsconfiguration-0' => '無彼个',
-
-'exif-exposureprogram-0' => '無定義',
-'exif-exposureprogram-1' => '說明書',
-'exif-exposureprogram-2' => '一般方式',
-'exif-exposureprogram-3' => '光圈優先',
-'exif-exposureprogram-4' => '快門優先',
-'exif-exposureprogram-5' => '藝術模式(景深優先)',
-'exif-exposureprogram-6' => '運動模式(快門速度優先)',
-'exif-exposureprogram-7' => '肖像模式(適合背景佇焦距以外的近距離攝影)',
-'exif-exposureprogram-8' => '風景模式(適合背景佇焦距內的風景攝影)',
-
-'exif-subjectdistance-value' => '$1公尺',
-
-'exif-meteringmode-0' => '無清楚',
-'exif-meteringmode-1' => '平均',
-'exif-meteringmode-2' => '中心加權平均',
-'exif-meteringmode-3' => '點',
-'exif-meteringmode-4' => '多點',
-'exif-meteringmode-5' => '模式',
-'exif-meteringmode-6' => '局部',
-'exif-meteringmode-255' => '其他',
-
-'exif-lightsource-0' => '毋知',
-'exif-lightsource-1' => '日光',
-'exif-lightsource-2' => '螢光燈',
-'exif-lightsource-3' => '電火球',
-'exif-lightsource-4' => '閃光燈',
-'exif-lightsource-9' => '好天',
-'exif-lightsource-10' => '烏雲',
-'exif-lightsource-11' => '深色有影',
-'exif-lightsource-12' => '日光螢光燈(色溫 D 5700    7100K)',
-'exif-lightsource-13' => '溫白色螢光燈(N 4600    5400K)',
-'exif-lightsource-14' => '冷白色螢光燈(W 3900    4500K)',
-'exif-lightsource-15' => '白色螢光 (WW 3200    3700K)',
-'exif-lightsource-17' => '標準燈光A',
-'exif-lightsource-18' => '標準燈光B',
-'exif-lightsource-19' => '標準燈光C',
-'exif-lightsource-24' => 'ISO攝影棚鎢燈',
-'exif-lightsource-255' => '其他光源',
-
-# Flash modes
-'exif-flash-fired-0' => '閃光燈無閃',
-'exif-flash-fired-1' => '有閃閃光燈',
-'exif-flash-return-0' => '無頻閃觀測器功能',
-'exif-flash-return-2' => '頻閃觀測器無測著光',
-'exif-flash-return-3' => '頻閃觀測器有測著光',
-'exif-flash-mode-1' => '一定閃閃光燈',
-'exif-flash-mode-2' => '一定無閃閃光燈',
-'exif-flash-mode-3' => '自動模式',
-'exif-flash-function-1' => '無閃光燈功能',
-'exif-flash-redeye-1' => '紅眼消退模式',
-
-'exif-focalplaneresolutionunit-2' => '英吋',
-
-'exif-sensingmethod-1' => '無定義',
-'exif-sensingmethod-2' => '一塊彩色區域偵測器',
-'exif-sensingmethod-3' => '兩塊彩色區域偵測器',
-'exif-sensingmethod-4' => '三塊彩色區域偵測器',
-'exif-sensingmethod-5' => '連續彩色區域偵測器',
-'exif-sensingmethod-7' => '三線偵測器',
-'exif-sensingmethod-8' => '連續彩色線性偵測器',
-
-'exif-filesource-3' => '數位相機',
-
-'exif-scenetype-1' => '直接翕相相片',
-
-'exif-customrendered-0' => '一般的方法',
-'exif-customrendered-1' => '家己設計的方法',
-
-'exif-exposuremode-0' => '自動曝光',
-'exif-exposuremode-1' => '手動曝光',
-'exif-exposuremode-2' => '自動曝光感測調整',
-
-'exif-whitebalance-0' => '自動白平衡',
-'exif-whitebalance-1' => '手動白平衡',
-
-'exif-scenecapturetype-0' => '標準',
-'exif-scenecapturetype-1' => '風景',
-'exif-scenecapturetype-2' => '肖像',
-'exif-scenecapturetype-3' => '夜景',
-
-'exif-gaincontrol-0' => '無',
-'exif-gaincontrol-1' => '加一屑',
-'exif-gaincontrol-2' => '加較濟',
-'exif-gaincontrol-3' => '減一屑',
-'exif-gaincontrol-4' => '減較濟',
-
-'exif-contrast-0' => '一般',
-'exif-contrast-1' => '柔',
-'exif-contrast-2' => '利',
-
-'exif-saturation-0' => '一般',
-'exif-saturation-1' => '低飽滿度',
-'exif-saturation-2' => '高飽滿度',
-
-'exif-sharpness-0' => '一般',
-'exif-sharpness-1' => '柔',
-'exif-sharpness-2' => '利',
-
-'exif-subjectdistancerange-0' => '無清楚',
-'exif-subjectdistancerange-1' => '倚咧',
-'exif-subjectdistancerange-2' => '近看',
-'exif-subjectdistancerange-3' => '遠看',
-
-# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
-'exif-gpslatitude-n' => '北緯',
-'exif-gpslatitude-s' => '南緯',
-
-# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
-'exif-gpslongitude-e' => '東經',
-'exif-gpslongitude-w' => '西經',
-
-# Pseudotags used for GPSAltitudeRef
-'exif-gpsaltitude-above-sealevel' => '海拔$1 {{PLURAL:$1|公尺|公尺}}',
-'exif-gpsaltitude-below-sealevel' => '海拔負1{{PLURAL:$1|公尺|公尺}}',
-
-'exif-gpsstatus-a' => '測量當中',
-'exif-gpsstatus-v' => '互相測量',
-
-'exif-gpsmeasuremode-2' => '二維測量',
-'exif-gpsmeasuremode-3' => '三維測量',
-
-# Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => '每點鐘的公里數',
-'exif-gpsspeed-m' => '每點鐘的英里數',
-'exif-gpsspeed-n' => '每點鐘的海里數(節)',
-
-# Pseudotags used for GPSDestDistanceRef
-'exif-gpsdestdistance-k' => '公里',
-'exif-gpsdestdistance-m' => '英里',
-'exif-gpsdestdistance-n' => '海里',
-
-'exif-gpsdop-excellent' => '優($1)',
-'exif-gpsdop-good' => '良($1)',
-'exif-gpsdop-moderate' => '中度($1)',
-'exif-gpsdop-fair' => '一般($1)',
-'exif-gpsdop-poor' => '差($1)',
-
-'exif-objectcycle-a' => '只有早起',
-'exif-objectcycle-p' => '只有暗時',
-'exif-objectcycle-b' => '通早起佮暗時',
-
-# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
-'exif-gpsdirection-t' => '真正的方位',
-'exif-gpsdirection-m' => '地磁的方位',
-
-'exif-ycbcrpositioning-1' => '靠中央',
-'exif-ycbcrpositioning-2' => '聯合選址',
-
-'exif-dc-contributor' => '貢獻者',
-'exif-dc-coverage' => '媒體的時間抑空間性',
-'exif-dc-date' => '日期',
-'exif-dc-publisher' => '出版者',
-'exif-dc-relation' => '相關的媒體',
-'exif-dc-rights' => '權利',
-'exif-dc-source' => '媒體的來源',
-'exif-dc-type' => '媒體的類型',
-
-'exif-rating-rejected' => '拒絕',
-
-'exif-isospeedratings-overflow' => '大過65535',
-
-'exif-iimcategory-ace' => '藝術、文化佮娛樂',
-'exif-iimcategory-clj' => ' 犯罪佮法律',
-'exif-iimcategory-dis' => '災害佮意外',
-'exif-iimcategory-fin' => '經濟佮商業',
-'exif-iimcategory-edu' => '教育',
-'exif-iimcategory-evn' => '環境',
-'exif-iimcategory-hth' => '健康',
-'exif-iimcategory-hum' => '人類的利益',
-'exif-iimcategory-lab' => '勞工',
-'exif-iimcategory-lif' => '生活佮休閒',
-'exif-iimcategory-pol' => '政治',
-'exif-iimcategory-rel' => '宗教佮信仰',
-'exif-iimcategory-sci' => '科學佮技術',
-'exif-iimcategory-soi' => '社會議題',
-'exif-iimcategory-spo' => '運動',
-'exif-iimcategory-war' => '戰爭、衝突佮動亂',
-'exif-iimcategory-wea' => '氣候',
-
-'exif-urgency-normal' => '一般($1)',
-'exif-urgency-low' => '低($1)',
-'exif-urgency-high' => '懸($1)',
-'exif-urgency-other' => '用者定義的重要性($1)',
 
 # External editor support
 'edit-externally' => 'Iōng gōa-pō· èng-iōng nńg-thé pian-chi̍p chit-ê tóng-àn',
@@ -3238,24 +1095,13 @@ $1',
 '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í',
-'confirmemail_noemail' => '佇你的[[Special:Preferences|設定]],你無設一个會用得的電子批地址。',
 'confirmemail_text' => 'Sú-iōng e-mail kong-lêng chìn-chêng tio̍h seng khak-jīn lí ê e-mail chū-chí ū-hāu. Chhi̍h ē-pêng hit-ê liú-á thang kià 1 tiuⁿ khak-jīn phoe hō· lí. Hit tiuⁿ phoe lāi-bīn ū 1 ê te̍k-sû liân-kiat. Chhiáⁿ iōng liû-lám-khì khui lâi khoàⁿ, án-ne tō ē-tit khak-jīn lí ê chū-chí ū-hāu.',
-'confirmemail_pending' => '確定的編碼已經用電子批寄予你,
-若你才拄開你的口座,佇你欲閣愛新確定的編碼進前,你會使先等幾分鐘,等批送到。',
 'confirmemail_send' => 'Kià khak-jīn phoe',
 'confirmemail_sent' => 'Khak-jīn phoe kià chhut-khì ah.',
-'confirmemail_oncreate' => '一个確認代碼已經送去你的電子批地址,
-這个代碼無需要登入,毋過你若欲用著wiki的電子批功能,你就需要提供這个代碼。',
-'confirmemail_sendfailed' => '{{SITENAME}}無法寄你確定資料的批,
-請檢查你的電子批地址是毋是有怪字。
-
-送批系統的退回通知:$1',
 'confirmemail_invalid' => 'Bô-hāu ê khak-jīn pian-bé. Pian-bé khó-lêng í-keng kòe-kî.',
-'confirmemail_needlogin' => '你愛$1去確定你的電子批地址。',
 'confirmemail_success' => 'í ê e-mail chū-chí khak-jīn oân-sêng. Lí ē-sái teng-ji̍p, khai-sí hiáng-siū chit ê wiki.',
 'confirmemail_loggedin' => 'Lí ê e-mail chū-chí í-keng khak-jīn ū-hāu.',
 'confirmemail_error' => 'Pó-chûn khak-jīn chu-sìn ê sî-chūn hoat-seng būn-tê.',
@@ -3266,7 +1112,7 @@ Chhiáⁿ khui ē-kha chit-ê liân-kiat, thang khak-jīn chit-ê kháu-chō si
 
 $3
 
-Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.  
+Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.
 
 $5
 
@@ -3277,7 +1123,7 @@ Chhiáⁿ khui ē-kha chit-ê liân-kiat, thang khak-jīn chit-ê kháu-chō si
 
 $3
 
-Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.  
+Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.
 
 $5
 
@@ -3288,333 +1134,47 @@ Chhiáⁿ khui ē-kha chit-ê liân-kiat, thang khak-jīn chit-ê kháu-chō si
 
 $3
 
-Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.  
+Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau khak-jīn ê e-mail.
 
 $5
 
 Chit tiuⁿ phoe ê khak-jīn-bé ē chū-tōng tī $4 kòe-kî.',
-'confirmemail_invalidated' => '電子批的確認已經取消。',
-'invalidateemail' => '取消電子批的確認。',
-
-# Scary transclusion
-'scarytranscludedisabled' => '[跨wiki的轉換代碼袂當用]',
-'scarytranscludefailed' => '[讀$1模板失敗]',
-'scarytranscludetoolong' => '[URL 地址傷長]',
-
-# Delete conflict
-'deletedwhileediting' => "'''注意''':這頁佇你開始改了後,已經予人刣掉!",
-'confirmrecreate' => "用者[[User:$1|$1]] ([[User talk:$1|talk]])佇你開始改這頁了後,刣掉這頁,原因是:
-: ''$2''
-請你確定欲閣建立這頁。",
-'confirmrecreate-noreason' => '用者[[User:$1|$1]] ([[User talk:$1|討論]])佇你開始改這頁了後,刣掉這頁。請你確定敢欲重建立這頁。',
-'recreate' => '重做',
 
 # action=purge
-'confirm_purge_button' => '好矣',
 'confirm-purge-top' => 'Kā chit ia̍h ê cache piàⁿ tiāu?',
-'confirm-purge-bottom' => '清理一頁會共快取(cache)摒掉,閣一定顯示上新的修訂版本。',
-
-# action=watch/unwatch
-'confirm-watch-button' => '好',
-'confirm-watch-top' => '共這頁加入去你的監視單?',
-'confirm-unwatch-button' => '好',
-'confirm-unwatch-top' => '共這頁對你的監視單徙走?',
-
-# Multipage image navigation
-'imgmultipageprev' => '前一頁',
-'imgmultipagenext' => '後一頁',
-'imgmultigo' => '來去',
-'imgmultigoto' => '來去$1這頁',
 
 # Table pager
-'ascending_abbrev' => '細到大',
-'descending_abbrev' => '大到細',
 'table_pager_next' => 'Aū-chi̍t-ia̍h',
 'table_pager_prev' => 'Téng-chi̍t-ia̍h',
 'table_pager_first' => 'Thâu-chi̍t-ia̍h',
 'table_pager_last' => 'Siāng-bóe-ia̍h',
 'table_pager_limit' => 'Múi 1 ia̍h hián-sī $1 hāng',
-'table_pager_limit_label' => '每頁的項目:',
 'table_pager_limit_submit' => 'Lâi-khì',
-'table_pager_empty' => '無結果',
 
 # Auto-summaries
 'autosumm-blank' => 'Kā ia̍h ê loē-iông the̍h tiāu',
-'autosumm-replace' => '用"$1"共內容換掉',
 'autoredircomment' => 'Choán khì [[$1]]',
 'autosumm-new' => 'Sin ia̍h: $1...',
 
-# Live preview
-'livepreview-loading' => '當咧讀',
-'livepreview-ready' => '讀....好矣!',
-'livepreview-failed' => 'Live先看覓失敗!
-試一般的先看覓。',
-'livepreview-error' => '連接失敗: $1 "$2",
-試一般的先看覓。',
-
-# Friendlier slave lag warnings
-'lag-warn-normal' => '佇過去$1{{PLURAL:$1|秒|秒}}新改的,可能無寫佇這个清單。',
-'lag-warn-high' => '因為資料庫的過度延遲,過去$1{{PLURAL:$1|秒|秒}}內的修改無一定會顯示佇清單內底。',
-
 # Watchlist editor
 'watchlistedit-numitems' => 'Lí ê kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
-'watchlistedit-noitems' => '你的監視單無半項。',
-'watchlistedit-normal-title' => '改監視單',
-'watchlistedit-normal-legend' => '共文章標題對監視單徙走',
-'watchlistedit-normal-explain' => '你監視的文章標題顯示佇下跤。若欲徙走一个標題,點擊伊邊仔的框仔,閣點擊「{{int:Watchlistedit-normal-submit}}」。你嘛會當[[Special:EditWatchlist/raw|編輯原始監視清單]]。',
 'watchlistedit-normal-submit' => 'Mài kàm-sī',
 'watchlistedit-normal-done' => 'Í-keng ū {{PLURAL:$1| ia̍h| ia̍h}} ùi lí ê kám-sī-toaⁿ soá cháu:',
-'watchlistedit-raw-title' => '改進前的監視單',
-'watchlistedit-raw-legend' => '改進前的監視單',
-'watchlistedit-raw-explain' => '下跤是你監視文章的標題,你會當透過改這个表去加入抑是徙走標題;一逝一个標題。
-改了後,點擊 {{int:Watchlistedit-raw-submit}}。
-你嘛會當去用 [[Special:EditWatchlist|標準編輯器]]。',
-'watchlistedit-raw-titles' => '標題:',
-'watchlistedit-raw-submit' => '改監視單',
-'watchlistedit-raw-done' => '你的監視單有改新。',
-'watchlistedit-raw-added' => '已經加入{{PLURAL:$1|1个|$个}}標題:',
-'watchlistedit-raw-removed' => '已經徙走{{PLURAL:$1|1个|$个}}標題:',
 
 # Watchlist editing tools
-'watchlisttools-view' => '看相關的修改',
 'watchlisttools-edit' => 'Khoàⁿ koh kái kàm-sī-toaⁿ',
 'watchlisttools-raw' => 'Kái tshing-chheng ê kàm-sī-toaⁿ',
 
-# Signatures
-'signature' => '[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|留話]])',
-
 # Core parser functions
-'unknown_extension_tag' => '無清楚的擴展標籤 "$1"',
 'duplicate-defaultsort' => '\'\'\'Thê-chhíⁿ lí:\'\'\'Siat-piān ê pâi-lia̍t hong-sek "$2" thè-oāⁿ chìn-chêng ê siat-piān ê pâi-lia̍t hong-sek "$1".',
 
 # Special:Version
 'version' => 'Pán-pún',
-'version-extensions' => '已經裝的擴展',
-'version-specialpages' => '特殊頁',
-'version-parserhooks' => '語法鈎',
-'version-variables' => '變數',
-'version-antispam' => '防止廣告',
-'version-skins' => '皮',
-'version-other' => '其他',
-'version-mediahandlers' => '媒體處理器',
-'version-hooks' => '鈎',
-'version-extension-functions' => '擴展函數',
-'version-parser-extensiontags' => '語法擴展標籤',
-'version-parser-function-hooks' => '語法函數鈎',
-'version-hook-name' => '鈎名',
-'version-hook-subscribedby' => '用佇',
-'version-version' => '(版本 $1)',
-'version-license' => '授權',
-'version-poweredby-credits' => "這个 Wiki 是由 '''[//www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
-'version-poweredby-others' => '其他',
-'version-license-info' => 'MediaWiki是自由的軟體;你會當照自由軟體基金會所發佈的GNU通用公共授權條款規定,來發佈閣/抑修改本程式;無論你根據的是本授權的第二版抑是(你家己選擇的)日後的版本。
-
-MediaWiki是為著使用的目的才發佈,毋過無負任何擔保責任;也無對適售性抑是特定目的適用性的默示性擔保。詳情請看GNU通用公共授權。
-
-你應該有收著附佇本程式的[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU通用公共授權的副本];若無,請寫批到自由軟件基金會:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,抑是[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 上網閱覽]。',
-'version-software' => '已經安裝的軟體',
-'version-software-product' => '產品',
-'version-software-version' => '版本',
-'version-entrypoints' => '進入點網址',
-'version-entrypoints-header-entrypoint' => '進入點',
-'version-entrypoints-header-url' => '網址',
 
 # Special:FilePath
 'filepath' => 'Tóng-àn ê soàⁿ-lō·',
-'filepath-page' => '檔案:',
-'filepath-submit' => '來去',
-'filepath-summary' => '這个特殊頁會送回一个檔案的完整路徑。
-圖像會用完整的解析度顯示,其它的檔案類型嘛會用相關的程式啟動。',
-
-# Special:FileDuplicateSearch
-'fileduplicatesearch' => '揣有仝款的檔案',
-'fileduplicatesearch-summary' => '照亂數值去揣仝款的檔案。',
-'fileduplicatesearch-legend' => '揣仝款的',
-'fileduplicatesearch-filename' => '檔案名稱:',
-'fileduplicatesearch-submit' => '揣',
-'fileduplicatesearch-info' => '$1 × $2 像素<br />檔案大細:$3<br />MIME類型:$4',
-'fileduplicatesearch-result-1' => '檔案 "$1" 無有完全相仝的。',
-'fileduplicatesearch-result-n' => '檔案 "$1" 有{{PLURAL:$2|1个完全相仝的|$2个完全相仝的}}。',
-'fileduplicatesearch-noresults' => '揣無叫"$1"的檔案。',
 
 # Special:SpecialPages
 'specialpages' => 'Te̍k-sû-ia̍h',
-'specialpages-note' => '----
-* 一般的特殊頁。
-* <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' => '頁的清單',
-'specialpages-group-pagetools' => '頁的家私',
-'specialpages-group-wiki' => 'Wiki資料佮家私',
-'specialpages-group-redirects' => '共特殊頁轉向',
-'specialpages-group-spam' => '反垃圾工具',
-
-# Special:BlankPage
-'blankpage' => '空的頁',
-'intentionallyblankpage' => '這頁是刁持留空的。',
-
-# External image whitelist
-'external_image_whitelist' => ' #留佮這行仝款的字<pre>
-#佇下面(//的中間部份)拍正規表示式部份
-#遮會佮外部(已經超連結的)影相相配合
-#遐有相配合著會會顯示做影相,若無就只會顯示做連結
-#有 # 做頭的行會當做是註解
-#大小寫無差
-
-#佇這行面頂拍所有的正規表示式部份,留佮這行仝款的字</pre>',
-
-# Special:Tags
-'tags' => '有效的標籤',
-'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
-'tag-filter-submit' => '過濾器',
-'tags-title' => '標籤',
-'tags-intro' => '這頁是標籤的清單,標示編輯的動作佮意義。',
-'tags-tag' => '標籤名稱',
-'tags-display-header' => '佇修改清單的出現方式',
-'tags-description-header' => '意思的完整解說',
-'tags-hitcount-header' => '有貼標籤的修改',
-'tags-edit' => '修改',
-'tags-hitcount' => '$1 {{PLURAL:$1|改|改}}',
-
-# Special:ComparePages
-'comparepages' => '比並頁',
-'compare-selector' => '比並頁的修訂本',
-'compare-page1' => '第一頁',
-'compare-page2' => '第二頁',
-'compare-rev1' => '第一修訂本',
-'compare-rev2' => '第二修訂本',
-'compare-submit' => '比較',
-'compare-invalid-title' => '你指定的標題無適當。',
-'compare-title-not-exists' => '無你指定的標題',
-'compare-revision-not-exists' => '無你指定的修訂本',
-
-# Database error messages
-'dberr-header' => '這个Wiki遇著問題',
-'dberr-problems' => '失禮!
-這馬這个站有技術上的問題。',
-'dberr-again' => '先等幾分鐘,才閣載入',
-'dberr-info' => '(無法連接到資料庫伺服器: $1)',
-'dberr-usegoogle' => '佇這馬,你會當先透過 Google 揣。',
-'dberr-outofdate' => '請注意,in索引出來的內容可能毋是上新的。',
-'dberr-cachederror' => '這是你欲挃的頁的快取副本,而且可能毋是上新的。',
-
-# HTML forms
-'htmlform-invalid-input' => '你拍的內底有一寡問題。',
-'htmlform-select-badoption' => '你寫的數量,無適合。',
-'htmlform-int-invalid' => '你寫的毋是數量。',
-'htmlform-float-invalid' => '你寫的毋是數量。',
-'htmlform-int-toolow' => '你寫的數量低過上細的量 $1。',
-'htmlform-int-toohigh' => '你寫的數量超過上大的量 $1。',
-'htmlform-required' => '這个數量愛寫',
-'htmlform-submit' => '送出',
-'htmlform-reset' => '取消修改',
-'htmlform-selectorother-other' => '其他',
-
-# SQLite database support
-'sqlite-has-fts' => '帶全文搜揣的版本$1',
-'sqlite-no-fts' => '無帶全文搜揣的版本$1',
-
-# New logging system
-'logentry-delete-delete' => '$1刣掉頁面$3',
-'logentry-delete-restore' => '$1恢復頁面$3',
-'logentry-delete-event' => '$1已經改$3內底{{PLURAL:$5|項|項}}記錄的可見性:$4',
-'logentry-delete-revision' => '$1改$3內底{{PLURAL:$5|$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項紀錄|$5項紀錄}}的可見性:$4',
-'logentry-suppress-revision' => '$1私下改$3的{{PLURAL:$5|$5个修訂本|$5个修訂本}}的可見性:$4',
-'logentry-suppress-event-legacy' => '$1私下改頁$3可見性的記錄事件',
-'logentry-suppress-revision-legacy' => '$1私下改頁$3修訂本的可見性',
-'revdelete-content-hid' => '內容藏起來',
-'revdelete-summary-hid' => '編輯藏起的摘要',
-'revdelete-uname-hid' => '共用者名稱藏起來',
-'revdelete-content-unhid' => '恢復內容',
-'revdelete-summary-unhid' => '編輯恢復的摘要',
-'revdelete-uname-unhid' => '恢復用者名稱',
-'revdelete-restricted' => '已經共限制用佇管裡員',
-'revdelete-unrestricted' => '徙走對管裡員的限制',
-'logentry-move-move' => '$1共頁$3徙去$4',
-'logentry-move-move-noredirect' => '$1共頁面$3徙去$4,閣無留轉頁',
-'logentry-move-move_redir' => '$1透過轉向,共頁面$3徙去$4',
-'logentry-move-move_redir-noredirect' => '$1透過轉向,共$3頁面徙去$4,無留轉頁',
-'logentry-patrol-patrol' => '$1共$3頁的$4修訂本記做巡過',
-'logentry-patrol-patrol-auto' => '$1自動共頁面$3的版本$4記做巡過',
-'logentry-newusers-newusers' => '$1建立一个用者口座',
-'logentry-newusers-create' => '$1建立一个用者口座',
-'logentry-newusers-create2' => '$1建立口座$3',
-'logentry-newusers-autocreate' => '口座$1已經自動建立',
-'newuserlog-byemail' => '用電子批寄密碼',
-
-# Feedback
-'feedback-bugornote' => '若你欲詳細寫一个技術問題,請[$1 報告一隻臭蟲]。
-抑是,你會當用下跤簡單的表,你的意見會加佇頁面“[$3 $2]”,而且有你的用戶名佮你用的佗一種瀏覽器。',
-'feedback-subject' => '題目:',
-'feedback-message' => '信息:',
-'feedback-cancel' => '取消',
-'feedback-submit' => '送出回饋',
-'feedback-adding' => '當咧加回饋到頁面...',
-'feedback-error1' => '錯誤:對API送來的結果(無法判斷)。',
-'feedback-error2' => '錯誤:編輯失敗',
-'feedback-error3' => '錯誤:API 無回應',
-'feedback-thanks' => '多謝,你的回饋已經貼佇"[$2 $1]"的頁面。',
-'feedback-close' => '完成',
-'feedback-bugcheck' => '誠好,拄檢查過,彼無佇[$1發現過的臭蟲]內底。',
-'feedback-bugnew' => '我已經檢查過。報告一个新臭蟲。',
-
-# API errors
-'api-error-badaccess-groups' => '你無允准上載檔案到這个Wiki網站。',
-'api-error-badtoken' => '內部錯誤:標記失效。',
-'api-error-copyuploaddisabled' => '佇這个伺服器無用透過網址(URL)上載的功能。',
-'api-error-duplicate' => '佇網站內底另外有{{PLURAL:$1|[$2个]|[$2个]}}仝款的檔案。',
-'api-error-duplicate-archive' => '佇網站內底{{PLURAL:$1|[$2个]|[$2个]}}仝款的檔案,毋過已經刣掉。',
-'api-error-duplicate-archive-popup-title' => '仝款的{{PLURAL:$1|檔案|檔案}}已經共刣掉。',
-'api-error-duplicate-popup-title' => '仝款的 {{PLURAL:$1|檔案|檔案}}。',
-'api-error-empty-file' => '你送出來的檔案是空的。',
-'api-error-emptypage' => '袂當開空頁。',
-'api-error-fetchfileerror' => '內部錯誤:掠檔案的時陣有一寡問題。',
-'api-error-file-too-large' => '你送出來的檔案傷過大。',
-'api-error-filename-tooshort' => '檔案名傷短。',
-'api-error-filetype-banned' => '這類的檔案被禁止。',
-'api-error-filetype-missing' => '檔案名稱尾仔欠類型。',
-'api-error-hookaborted' => '你欲做的編輯因為擴展鈎(extension hook)去跳開。',
-'api-error-http' => '內部錯誤:連接袂到伺服器。',
-'api-error-illegal-filename' => '無合用的檔案名稱。',
-'api-error-internal-error' => '內部錯誤:佇處理你的上載的時陣,這个Wiki拄著一寡問題。',
-'api-error-invalid-file-key' => '內部錯誤:佇臨時囥位揣無檔案。',
-'api-error-missingparam' => '內部錯誤:請求欠參數。',
-'api-error-missingresult' => '內部錯誤:無確定拷備是毋是有成功。',
-'api-error-mustbeloggedin' => '你愛登入才通上載檔案。',
-'api-error-mustbeposted' => '內部錯誤:請求愛用HTTP POST。',
-'api-error-noimageinfo' => '上載有成功,毋過伺服器無予咱彼个檔案的任何資料。',
-'api-error-nomodule' => '內部錯誤:無掛上載套件。',
-'api-error-ok-but-empty' => '內部錯誤:伺服器無回應。',
-'api-error-overwrite' => '袂使覆寫已經佇咧的檔案',
-'api-error-stashfailed' => '內部錯誤:伺服器做無到保存臨時檔案。',
-'api-error-timeout' => '伺服器佇預期的時間內無回應。',
-'api-error-unclassified' => '有一个無啥清楚的錯誤。',
-'api-error-unknown-code' => '毋知的錯誤:"$1"。',
-'api-error-unknown-error' => '內部錯誤:佇欲上載你檔案的時陣有一寡問題。',
-'api-error-unknown-warning' => '毋知的警告:"$1"。',
-'api-error-unknownerror' => '毋知的錯誤:"$1"。',
-'api-error-uploaddisabled' => '佇這个Wiki袂當上載。',
-'api-error-verification-error' => '這个檔案可能已經毀掉,抑是檔案尾仔名稱毋著。',
-
-# Durations
-'duration-seconds' => '$1 {{PLURAL:$1|秒|秒}}',
-'duration-minutes' => '$1 {{PLURAL:$1|分鐘|分鐘}}',
-'duration-hours' => '$1 {{PLURAL:$1|點鐘|點鐘}}',
-'duration-days' => '$1 {{PLURAL:$1|工|工}}',
-'duration-weeks' => '$1 {{PLURAL:$1|禮拜|禮拜}}',
-'duration-years' => '$1 {{PLURAL:$1|冬|冬}}',
-'duration-decades' => '$1 {{PLURAL:$1|十冬|十冬}}',
-'duration-centuries' => '$1 {{PLURAL:$1|百年|百年}}',
-'duration-millennia' => '$1 {{PLURAL:$1|千年|千年}}',
 
 );
index ebabdf9..f75a514 100644 (file)
@@ -1056,7 +1056,6 @@ Seh to, dat de Versionsgeschicht vun’n Artikel vun de Historie her bi de Reeg
 
 # Diffs
 'history-title' => 'Versionshistorie vun „$1“',
-'difference' => '(Ünnerscheed twischen de Versionen)',
 'lineno' => 'Reeg $1:',
 'compareselectedversions' => 'Ünnerscheed twischen den utwählten Versionen wiesen',
 'showhideselectedversions' => 'Utwählt Versionen wiesen/versteken',
index 59a7423..f28e634 100644 (file)
@@ -1242,7 +1242,6 @@ Kiek de logboeken nao.',
 
 # Diffs
 'history-title' => 'Geschiedenisse van "$1"',
-'difference' => '(Verschil tussen bewarkingen)',
 'difference-multipage' => "(Verschil tussen pagina's)",
 'lineno' => 'Regel $1:',
 'compareselectedversions' => 'Vergeliek de ekeuzen versies',
index cdff247..cd3429b 100644 (file)
@@ -993,7 +993,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" को पुनरावलोकन इतिहास',
-'difference' => '(पुनरावलोकनहरुको बीचमा भिन्नता)',
 'difference-multipage' => '(पृष्ठहरुमा भिन्नता)',
 'lineno' => 'पंक्ति $1:',
 'compareselectedversions' => 'छानिएका संस्करणहरू दाँज्नुहोस्',
index 43de418..a53e07c 100644 (file)
@@ -377,8 +377,8 @@ $messages = array(
 'tog-fancysig' => 'Als wikitekst behandelen (zonder automatische verwijzing)',
 'tog-externaleditor' => 'Standaard een externe tekstbewerker gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
 'tog-externaldiff' => 'Standaard een extern vergelijkingsprogramma gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
-'tog-showjumplinks' => '“ga naar”-toegankelijkheidsverwijzingen inschakelen',
-'tog-uselivepreview' => '“live voorvertoning” gebruiken (vereist JavaScript – experimenteel)',
+'tog-showjumplinks' => '"ga naar"-toegankelijkheidsverwijzingen inschakelen',
+'tog-uselivepreview' => '"live voorvertoning" gebruiken (vereist JavaScript – experimenteel)',
 'tog-forceeditsummary' => 'Een melding geven bij een lege bewerkingssamenvatting',
 'tog-watchlisthideown' => 'Eigen bewerkingen op mijn volglijst verbergen',
 'tog-watchlisthidebots' => 'Botbewerkingen op mijn volglijst verbergen',
@@ -458,9 +458,9 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categorie|Categorieën}}',
-'category_header' => 'Pagina’s in categorie “$1”',
+'category_header' => 'Pagina’s in categorie "$1"',
 'subcategories' => 'Ondercategorieën',
-'category-media-header' => 'Media in categorie “$1”',
+'category-media-header' => 'Media in categorie "$1"',
 'category-empty' => "''Deze categorie bevat geen pagina’s of media.''",
 'hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}}',
 'hidden-category-category' => 'Verborgen categorieën',
@@ -631,8 +631,8 @@ Meer informatie is beschikbaar op de pagina [[Special:Version|softwareversie]].'
 'feed-unavailable' => 'Syndicatiefeeds zijn niet beschikbaar',
 'site-rss-feed' => '$1 RSS-feed',
 'site-atom-feed' => '$1 Atom-feed',
-'page-rss-feed' => '“$1” RSS-feed',
-'page-atom-feed' => '“$1” Atom-feed',
+'page-rss-feed' => '"$1" RSS-feed',
+'page-atom-feed' => '"$1" Atom-feed',
 'red-link-title' => '$1 (de pagina bestaat niet)',
 'sort-descending' => 'Aflopend sorteren',
 'sort-ascending' => 'Oplopend sorteren',
@@ -666,13 +666,13 @@ Een lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|{{in
 Mogelijk zit er een fout in de software.
 Het laatste verzoek aan de database was:
 <blockquote><tt>$1</tt></blockquote>
-vanuit de functie “<tt>$2</tt>”.
-De database gaf de volgende foutmelding “<tt>$3: $4</tt>”.',
+vanuit de functie "<tt>$2</tt>".
+De database gaf de volgende foutmelding "<tt>$3: $4</tt>".',
 'dberrortextcl' => 'Er is een syntaxisfout in het databaseverzoek opgetreden.
 Het laatste verzoek aan de database was:
-“$1”
-vanuit de functie “$2”.
-De database gaf de volgende foutmelding: “$3: $4”',
+"$1"
+vanuit de functie "$2".
+De database gaf de volgende foutmelding: "$3: $4"',
 'laggedslavemode' => "'''Waarschuwing:''' in deze pagina zijn recente wijzigingen mogelijk nog niet verwerkt.",
 'readonly' => 'Database geblokkeerd',
 'enterlockreason' => 'Geef een reden op voor de blokkade en geef op wanneer die waarschijnlijk wordt opgeheven',
@@ -695,7 +695,7 @@ Maak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAM
 'filecopyerror' => 'Bestand "$1" kon niet naar "$2" gekopieerd worden.',
 'filerenameerror' => '"$1" kon niet hernoemd worden naar "$2".',
 'filedeleteerror' => 'Bestand "$1" kon niet verwijderd worden.',
-'directorycreateerror' => 'Map “$1” kon niet aangemaakt worden.',
+'directorycreateerror' => 'De map "$1" kon niet aangemaakt worden.',
 'filenotfound' => 'Bestand "$1" kon niet gevonden worden.',
 'fileexistserror' => 'Schrijven naar bestand "$1" onmogelijk: het bestand bestaat al.',
 'unexpected' => 'Onverwachte waarde: "$1"="$2".',
@@ -740,6 +740,8 @@ De gegeven reden is ''$2''.",
 'filereadonlyerror' => 'Het was niet mogelijk het bestand "$1" aan te passen omdat de bestandsrepository "$2" op dit moment alleen-lezen is.
 
 De opgegeven reden is "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en tekst "$3"',
+'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
@@ -1150,6 +1152,12 @@ Deze parameters zijn weggelaten.',
 'parser-template-loop-warning' => 'Er is een kringloop in sjablonen geconstateerd: [[$1]]',
 'parser-template-recursion-depth-warning' => 'De recursiediepte voor sjablonen is overschreden ($1)',
 'language-converter-depth-warning' => 'De dieptelimiet voor de taalconvertor is overschreden ($1)',
+'node-count-exceeded-category' => "Pagina's waar het maximaal aantal nodes is overschreden",
+'node-count-exceeded-warning' => 'Op de pagina is het maximale aantal nodes overschreden',
+'expansion-depth-exceeded-category' => "Pagina's waar de expansiediepte is overschreden",
+'expansion-depth-exceeded-warning' => 'De pagina bevat te veel sjablonen',
+'parser-unstrip-loop-warning' => 'Er is een "unstrip"-lus gedetecteerd',
+'parser-unstrip-recursion-limit' => 'De recursielimiet ($1) voor "unstrip" is overschreden',
 
 # "Undo" feature
 'undo-success' => 'Deze bewerking kan ongedaan gemaakt worden.
@@ -1330,7 +1338,8 @@ Let op dat het gebruiken van de navigatieverwijzingen deze kolom opnieuw instelt
 
 # Diffs
 'history-title' => 'Geschiedenis van "$1"',
-'difference' => '(Verschil tussen bewerkingen)',
+'difference-title' => 'Verschil tussen versies van "$1"',
+'difference-title-multipage' => 'Verschil tussen pagina\'s "$1" en "$2"',
 'difference-multipage' => "(Verschil tussen pagina's)",
 'lineno' => 'Regel $1:',
 'compareselectedversions' => 'Geselecteerde versies vergelijken',
@@ -1794,7 +1803,7 @@ Aangewezen {{PLURAL:\$3|bestandstype is|bestandstypes zijn}} \$2.",
 'filetype-banned' => 'Het bestand dat u probeerde te uploaden was van een niet toegelaten bestandstype.',
 'verification-error' => 'De verificatie van het bestand dat u probeerde te uploaden is mislukt.',
 'hookaborted' => 'De wijziging die u probeerde te maken is afgebroken door een uitbreidingshook.',
-'illegal-filename' => 'Deze bestandsnaam is niet toegelaten.',
+'illegal-filename' => 'Deze bestandsnaam is niet toegestaan.',
 'overwrite' => 'Het overschrijven van een bestand bestand is niet toegestaan.',
 'unknown-error' => 'Er is een onbekende fout opgetreden.',
 'tmp-create-error' => 'Het was niet mogelijk een tijdelijk bestand aan te maken.',
@@ -1982,6 +1991,7 @@ Om beveiligingsreden is img_auth.php uitgeschakeld.',
 'http-curl-error' => 'Fout bij het ophalen van URL: $1',
 'http-host-unreachable' => 'De URL is niet bereikbaar.',
 'http-bad-status' => 'Er is een probleem opgetreden bij het HTTP-verzoek: $1 $2',
+'http-truncated-body' => 'De inhoud van het verzoek is slechts gedeeltelijk ontvangen.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Kon de URL niet bereiken',
@@ -3819,8 +3829,8 @@ Bevestig dat u de pagina opnieuw wilt aanmaken.',
 'livepreview-ready' => 'Bezig met laden… Klaar!',
 'livepreview-failed' => 'Live voorvertoning mislukt!
 Probeer de normale voorvertoning.',
-'livepreview-error' => 'Verbinden mislukt: $1 “$2”.
-Probeer normale voorvertoning.',
+'livepreview-error' => 'Verbinden mislukt: $1 "$2".
+Probeer normale voorvertoning te gebruiken.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Wijzigingen in de afgelopen {{PLURAL:$1|seconde|$1 seconden}} worden misschien niet weergegeven in deze lijst.',
index 2e403e9..8efb939 100644 (file)
@@ -918,6 +918,7 @@ Det siste elementet i blokkeringsloggen er oppgjeve nedanfor:',
 'note' => "'''Merk:'''",
 'previewnote' => "'''Hugsa at dette berre er ei førehandsvising.'''
 Endringane dine er ikkje lagra enno!",
+'continue-editing' => 'Endra vidare',
 'previewconflict' => 'Dette er ei førehandsvising av teksten i endringsboksen over, slik han vil sjå ut om du lagrar han',
 'session_fail_preview' => "'''Orsak! Endringa di kunne ikkje lagrast. Ver venleg og prøv ein gong til. Dersom det framleis ikkje går, prøv å logge deg ut og inn att.'''",
 'session_fail_preview_html' => "'''Beklagar! Endringa di kunne ikkje lagrast.'''
@@ -1119,7 +1120,7 @@ $1",
 'logdelete-success' => "'''Visinga av loggoppføringar er endra.'''",
 'logdelete-failure' => "'''Korleis loggen skal vera synleg kunne ikkje verta stilt inn:'''
 $1",
-'revdel-restore' => 'endra synlegheita',
+'revdel-restore' => 'endra synlegdomen',
 'revdel-restore-deleted' => 'sletta versjonar',
 'revdel-restore-visible' => 'synlege versjonar',
 'pagehist' => 'Sidehistorikk',
@@ -1139,7 +1140,7 @@ Sjekk gjerne loggføringa.',
 ** Brot på opphavsrettar
 ** Ikkje høveleg personleg informasjon
 ** Mogleg falskt sladder',
-'revdelete-otherreason' => 'Annan årsak, eller tilleggsårsak:',
+'revdelete-otherreason' => 'Anna årsak, eller tilleggsårsak:',
 'revdelete-reasonotherlist' => 'Annan grunn',
 'revdelete-edit-reasonlist' => 'Endre grunnar til sletting',
 'revdelete-offender' => 'Forfattar av denne versjonen:',
@@ -1147,7 +1148,7 @@ Sjekk gjerne loggføringa.',
 # Suppression log
 'suppressionlog' => 'Logg over historikkfjerningar',
 'suppressionlogtext' => 'Under er ei liste over slettingar og blokkeringar som er gøymde frå administratorane.
-Sjå [[Special:IPBlockList|blokkeringslista]] for oversikta over gjeldande blokkeringar.',
+Sjå [[Special:BlockList|blokkeringslista]] for oversikta over gjeldande blokkeringar.',
 
 # History merging
 'mergehistory' => 'Flett sidehistorikkar',
@@ -1180,7 +1181,6 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 
 # Diffs
 'history-title' => 'Historikken til «$1»',
-'difference' => '(Skilnad mellom versjonar)',
 'difference-multipage' => '(Skilnad mellom sider)',
 'lineno' => 'Line $1:',
 'compareselectedversions' => 'Samanlikn valde versjonar',
@@ -1983,8 +1983,8 @@ 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 side ($1)',
-'prevpage' => 'Førre side ($1)',
+'nextpage' => 'Neste sida ($1)',
+'prevpage' => 'Førre sida ($1)',
 'allpagesfrom' => 'Vis sider frå:',
 'allpagesto' => 'Vis sider til og med:',
 'allarticles' => 'Alle sider',
@@ -2244,8 +2244,8 @@ Her er dei noverande innstillingane for sida '''$1''':",
 'protect-othertime' => 'Anna tid:',
 'protect-othertime-op' => 'anna tid',
 'protect-existing-expiry' => 'Gjeldande utløpstid: $3 $2',
-'protect-otherreason' => 'Annan/ytterlegare årsak:',
-'protect-otherreason-op' => 'Annan årsak',
+'protect-otherreason' => 'Anna/ytterlegare årsak:',
+'protect-otherreason-op' => 'Anna årsak',
 'protect-dropdown' => '*Vanlege verneårsaker
 ** Gjenteke hærverk
 ** Gjenteke spam
@@ -3336,16 +3336,16 @@ Du må stadfeste at du verkeleg vil nyopprette denne sida.",
 'confirm-unwatch-top' => 'Fjern denne sida frå overvakingslista di?',
 
 # Multipage image navigation
-'imgmultipageprev' => '← førre side',
-'imgmultipagenext' => 'neste side →',
+'imgmultipageprev' => '← førre sida',
+'imgmultipagenext' => 'neste sida →',
 'imgmultigo' => 'Gå!',
 'imgmultigoto' => 'Gå til sida $1',
 
 # Table pager
 'ascending_abbrev' => 'stigande',
 'descending_abbrev' => 'synkande',
-'table_pager_next' => 'Neste side',
-'table_pager_prev' => 'Førre side',
+'table_pager_next' => 'Neste sida',
+'table_pager_prev' => 'Førre sida',
 'table_pager_first' => 'Fyrste side',
 'table_pager_last' => 'Siste side',
 'table_pager_limit' => 'Vis $1 element per side',
@@ -3527,8 +3527,17 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 # New logging system
 'logentry-delete-delete' => '$1 sletta sida $3',
 'logentry-delete-restore' => '$1 attoppretta sida $3',
+'logentry-delete-event' => '$1 endra synlegdomen av {{PLURAL:$5|éi loggoppføring|$5 loggoppføringar}} på $3: $4',
+'logentry-delete-revision' => '$1 endra synlegdomen av {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
+'logentry-delete-event-legacy' => '$1 endra synlegdomen av loggoppføringar på $3',
+'logentry-delete-revision-legacy' => '$1 endra synlegdomen av versjonar på sida $3',
+'logentry-suppress-delete' => '$1 gøymde sida $3',
 'revdelete-content-hid' => 'innhald gøymt',
 'revdelete-summary-hid' => 'endringsamandrag gøymt',
+'revdelete-uname-hid' => 'brukarnamn gøymt',
+'revdelete-content-unhid' => 'innhald gjort synleg',
+'revdelete-summary-unhid' => 'endringssamandrag gjort synleg',
+'revdelete-uname-unhid' => 'brukarnamn gjort synleg',
 'revdelete-restricted' => 'la til avgrensingar for administratorar',
 'revdelete-unrestricted' => 'fjerna avgrensingar for administratorar',
 'logentry-move-move' => '$1 flytte sida $3 til $4',
index e02b2fa..27c9388 100644 (file)
@@ -921,7 +921,6 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 
 # Diffs
 'history-title' => 'Revisjonshistorikk for «$1»',
-'difference' => '(Forskjell mellom revisjoner)',
 'difference-multipage' => '(Forskjell mellom sider)',
 'lineno' => 'Linje $1:',
 'compareselectedversions' => 'Sammenlign valgte revisjoner',
index d373e02..dbd94ff 100644 (file)
@@ -542,7 +542,6 @@ fetola tshenolo',
 
 # Diffs
 'history-title' => 'Histori ya diphetogo tša "$1"',
-'difference' => '(Phapang magareng ga dipoeletšo)',
 'lineno' => 'Mothalo $1:',
 'compareselectedversions' => 'Bapetša diphapang tšeo di kgethilwego',
 'editundo' => 'dirolla',
index 7a88814..89902ea 100644 (file)
@@ -1174,7 +1174,6 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori
 
 # Diffs
 'history-title' => 'Istoric de las versions de « $1 »',
-'difference' => '(Diferéncias entre las versions)',
 'difference-multipage' => '(Diferéncias entre las paginas)',
 'lineno' => 'Linha $1 :',
 'compareselectedversions' => 'Comparar las versions seleccionadas',
index ad8d236..f73ef25 100644 (file)
@@ -328,7 +328,7 @@ $messages = array(
 'january' => 'ଜାନୁଆରୀ',
 'february' => 'ଫେବୃଆରୀ',
 'march' => 'ମାର୍ଚ୍ଚ',
-'april' => 'à¬\8fପà­\8dରିଲ',
+'april' => 'à¬\85ପà­\8dରà­\87ଲ',
 'may_long' => 'ମେ',
 'june' => 'ଜୁନ',
 'july' => 'ଜୁଲାଇ',
@@ -340,7 +340,7 @@ $messages = array(
 'january-gen' => 'ଜାନୁଆରୀ',
 'february-gen' => 'ଫେବୃଆରୀ',
 'march-gen' => 'ମାର୍ଚ୍ଚ',
-'april-gen' => 'à¬\8fପà­\8dରିଲ',
+'april-gen' => 'à¬\85ପà­\8dରà­\87ଲ',
 'may-gen' => 'ମେ',
 'june-gen' => 'ଜୁନ',
 'july-gen' => 'ଜୁଲାଇ',
@@ -352,7 +352,7 @@ $messages = array(
 'jan' => 'ଜାନୁଆରୀ',
 'feb' => 'ଫେବୃଆରୀ',
 'mar' => 'ମାର୍ଚ୍ଚ',
-'apr' => 'à¬\8fପà­\8dରିଲ',
+'apr' => 'à¬\85ପà­\8dରà­\87ଲ',
 'may' => 'ମେ',
 'jun' => 'ଜୁନ',
 'jul' => 'ଜୁଲାଇ',
@@ -517,10 +517,10 @@ $1',
 'newmessageslink' => 'ନୂଆ ମେସେଜ',
 'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
-'editsection' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
-'editold' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
+'editsection' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
+'editold' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
 'viewsourceold' => 'ମୂଳାଧାର ଦେଖିବେ',
-'editlink' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
+'editlink' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
 'viewsourcelink' => 'ମୂଳାଧାର ଦେଖିବେ',
 'editsectionhint' => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ',
 'toc' => 'ଭିତର ଚିଜ',
@@ -1220,7 +1220,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" ପାଇଁ ସଙ୍କଳନ ଇତିହାସ',
-'difference' => '(ସଙ୍କଳନ ଭିତରେ ଥିବା ତଫାତ)',
 'difference-multipage' => '(ପୃଷ୍ଠା ଭିତରେ ଥିବା ତଫାତ)‌',
 'lineno' => '$1 କ ଧାଡ଼ି:',
 'compareselectedversions' => 'ବଛାହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ତଉଲିବେ',
@@ -2004,7 +2003,7 @@ A page is treated as disambiguation page if it uses a template which is linked f
 
 'brokenredirects' => 'ଭଙ୍ଗା ପୁନପ୍ରେରଣ',
 'brokenredirectstext' => 'ତଳଲିଖିତ ପୁନପ୍ରେରଣ ସବୁ ସ୍ଥିତିହିନ ପୃଷ୍ଠାମାନଙ୍କୁ ପୁନପ୍ରେରିତ ହୋଇଥାଏ :',
-'brokenredirects-edit' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
+'brokenredirects-edit' => "<big>'''ଏହାକୁ ବଦଳାନ୍ତୁ'''</big>",
 'brokenredirects-delete' => 'ଲିଭାଇବେ',
 
 'withoutinterwiki' => 'ଭାଷାର ଲିଙ୍କ ନଥିବା ପୃଷ୍ଠାମାନ',
@@ -2404,7 +2403,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'pagesize' => '(ବାଇଟ)',
 
 # Restrictions (nouns)
-'restriction-edit' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
+'restriction-edit' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
 'restriction-move' => 'ଘୁଞ୍ଚାଇବେ',
 'restriction-create' => 'ଗଢ଼ନ୍ତୁ',
 'restriction-upload' => 'ଅପଲୋଡ଼ କରନ୍ତୁ',
@@ -3729,7 +3728,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'tags-display-header' => 'ବଦଳ ତାଲିକାରେ ଦେଖଣା',
 'tags-description-header' => 'ଅର୍ଥର ପୁରା ବିବରଣୀ',
 'tags-hitcount-header' => 'ଚିହ୍ନିତ ବଦଳ',
-'tags-edit' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
+'tags-edit' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
 'tags-hitcount' => '$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}',
 
 # Special:ComparePages
index 2d4e482..4ed53d5 100644 (file)
@@ -693,7 +693,6 @@ $2',
 
 # Diffs
 'history-title' => '"$1" фарсы фæлтæрты истори',
-'difference' => '(Дыууæ фæлтæры ’хсæн хъауджы)',
 'lineno' => 'Рæнхъ $1:',
 'compareselectedversions' => 'Абарын æвзæрст фæлтæртæ',
 'editundo' => 'раивын',
index 0575161..213d8bb 100644 (file)
@@ -149,6 +149,7 @@ $messages = array(
 'category-subcat-count' => '{{ਕੁਲ   $2 ਸ਼੍ਰੇਣੀਆਂ ਵਿਚੌਂ , PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼ ਹੇਠ ਲਿਖੀ ਸ਼੍ਰੇਣੀ ਹੈ|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਨਿਮਿਨਲਿਖਿਤ {{PLURAL:$1|ਉਪ ਸ਼੍ਰੇਣੀ ਹੈ|$1ਉਪਸ਼੍ਰੇਣੀਆਂ ਹਨ}}  }}',
 'category-article-count' => '{{ ਕੁਲ $2 ਲੇਖਾਂ ਵਿਚੌਂ , PLURAL:$2| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼  ਨਿਮਨਲਿਖਿਤ  {{PLURAL:$1|ਲੇਖ ਹੈ|$1 ਲੇਖ ਹਨ}}, }}',
 'listingcontinuesabbrev' => 'ਅਗੇ.',
+'noindex-category' => 'ਕ੍ਰਮਸੂਚੀ ਰਹਿਤ ਸਫ਼ੇ',
 
 'about' => 'ਇਸ ਬਾਰੇ',
 'article' => 'ਸਮੱਗਰੀ ਪੇਜ',
@@ -471,7 +472,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 ਯਾ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਨ ਕਰ ਸਕਦੇ ਹੋ]</span>।',
 'updated' => '(ਅੱਪਡੇਟ)',
 'note' => "'''ਨੋਟ:'''",
-'previewnote' => "'''ਇਹ ਸਿਰਫ਼ ਇੱਕ ਝਲਕ ਹੈ; ਬਦਲਾਅ ਹਾਲੇ ਸੰਭਾਲੇ ਨਹੀਂ ਗਏ ਹਨ!'''",
+'previewnote' => 'ਇਹ ਸਿਰਫ਼ ਇੱਕ ਝਲਕ ਹੈ; ਬਦਲਾਅ ਹਾਲੇ ਸੰਭਾਲੇ ਨਹੀਂ ਗਏ ਹਨ!',
 'editing' => '$1 ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ',
 'editingsection' => '$1 (ਸ਼ੈਕਸ਼ਨ) ਸੋਧ',
 'editingcomment' => '$1 (ਟਿੱਪਣੀ) ਸੋਧ',
@@ -479,7 +480,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'yourtext' => 'ਤੁਹਾਡਾ ਟੈਕਸਟ',
 'storedversion' => 'ਸੰਭਾਲਿਆ ਵਰਜਨ',
 'yourdiff' => 'ਅੰਤਰ',
-'templatesused' => 'à¨\87ਸ à¨ªà©\87à¨\9c à¨\89ੱਤà©\87 à¨\9fà©\88ਪਲà©\87à¨\9f à¨µà¨°à¨¤à¨¿à¨\86 à¨\9cਾà¨\82ਦਾ à¨¹à©\88:',
+'templatesused' => 'à¨\87ਸ à¨¸à¨«à©\87 à¨¤à©\87 à¨ªà©\8dਰà©\8dਯà©\8bà¨\97ਿਤ {{PLURAL:$1|ਫਰਮਾ|ਫਰਮà©\87}}:',
 'templatesusedpreview' => "{{PLURAL:$1|ਟੈਪਲੇਟ|ਟੈਪਲੇਟ}} ਇਹ ਝਲਕ 'ਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ:",
 'templatesusedsection' => 'ਇਹ ਸ਼ੈਕਸ਼ਨ ਵਿੱਚ ਟੈਪਲੇਟ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
 'template-protected' => '(ਸੁਰੱਖਿਅਤ)',
@@ -490,6 +491,8 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ਖ਼ਬਰਦਾਰ: ਸੰਚੇ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ।ਕੁਝ ਸੰਚੇ ਛੁਟ ਜਾਣਗੇ।",
 'post-expand-template-inclusion-category' => 'ਉਹ ਪੰਨੇ ਜਿਥੇ ਸੰਚਿਆਂ ਦਾ ਅਕਾਰ ਨਿਣਮਿਤ ਹੱਦ ਤੌਂ ਵੱਧ ਹੈ।',
+'post-expand-template-argument-warning' => "'''ਖ਼ਬਰਦਾਰ'''ਇਸ ਸਫ਼ੇ ਤੇ ਕਿਸੇ ਫ਼ਰਮੇ ਵਿਚ ਘੱਟੋ ਘੱਟ ਇਕ ਸਁਘਟਕ ਐਸਾ ਹੈ ਜਿਸ ਦਾ ਵਿਸਤ੍ਰਿਤ ਰੂਪ ਬਹੁਤ ਵੱਡਾ ਹੈ।ਐਸੇ ਸਁਘਟਕਾਂ ਨੂਁ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
+'post-expand-template-argument-category' => 'ਐਸੇ ਸਫ਼ੇ ਜਿਨ੍ਹਾਂ ਵਿਚ ਫ਼ਰਮੇ ਦੇ ਸਁਘਟਕ ਛੁੱਟ ਗਏ ਹਨ ।',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'ਅਕਾਊਂਟ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ',
@@ -508,6 +511,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'last' => 'ਆਖਰੀ',
 'page_first' => 'ਪਹਿਲਾਂ',
 'page_last' => 'ਆਖਰੀ',
+'history-fieldset-title' => 'ਇਤਿਹਾਸ ਤੇ ਇਕ ਨਜ਼ਰ ਮਾਰੋ ।',
 'history-show-deleted' => 'ਕੇਵਲ ਮਿਟਾਏ ਗਏ',
 'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
@@ -541,7 +545,6 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 
 # Diffs
 'history-title' => '"$1" ਦੀ ਸ਼ੋਧ ਤਵਾਰੀਖ',
-'difference' => '(ਰੀਵਿਜ਼ਨ ਵਿੱਚ ਅੰਤਰ)',
 'lineno' => 'ਲਾਈਨ $1:',
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'editundo' => 'ਵਾਪਸ(undo)',
@@ -706,6 +709,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'recentchangeslinked-feed' => 'ਸਬੰਧਿਤ ਬਦਲਾਅ',
 'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ ਬਦਲਾਅ',
 'recentchangeslinked-title' => '"$1" ਨਾਲ ਸੰਬੰਧਿਤ ਬਦਲਾਅ',
+'recentchangeslinked-noresult' => 'ਜੁੜੇ ਹੋਏ ਸਫਿਆਂ ਤੇ ,ਦਿੱਤੇ ਸਮੇਂ ਵਿਚ ਕੁਝ ਨਹੀਂ ਬਦਲਿਆ ।',
 'recentchangeslinked-summary' => 'ਇਹ ਸੂਚੀ ਊਨ੍ਹਾਂ ਪੰਨਿਆਂ ,ਜੋ ਇਕ ਖਾਸ ਪੰਨੇ ਨਾਲ ਸੰਬੰਧਿਤ ਹਨ, (ਯਾ ਕਿਸੇ ਖਾਸ ਸ਼੍ਰੇਣੀ ਦੇ ਮੈਂਬਰਾਂ) ਦੇ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਵਾਂ ਨੂੰ ਦਰਸ਼ਾਂਦੀ ਹੈ [[Special:Watchlist|ਤੁਹਾਡੀ ਦ੍ਰਿਸ਼ਟੀ ਗੋਚਰ ਸੂਚੀ]] ਵਿਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅਖਰਾਂ ਵਿਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
 'recentchangeslinked-page' => 'ਸਫ਼ਾ ਨਾਂ:',
 'recentchangeslinked-to' => 'ਇਸ ਦੇ ਬਦਲੇ ਇਸ ਪੰਨੇ ਨਾਲ ਜੁੜੇ ਪੰਨਿਆਂ ਵਿਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
@@ -893,6 +897,7 @@ to upload files.',
 # Watchlist
 'watchlist' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ',
 'mywatchlist' => 'ਮੇਰੀ ਵਾਚ-ਲਿਸਟ',
+'watchlistfor2' => '$1 $2 ਲਈ',
 'watchnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
 'watch' => 'ਵਾਚ',
 'watchthispage' => 'ਇਹ ਪੇਜ ਵਾਚ ਕਰੋ',
@@ -968,6 +973,7 @@ to upload files.',
 
 # Contributions
 'contributions' => 'ਯੂਜ਼ਰ ਯੋਗਦਾਨ',
+'contributions-title' => '$੧ ਦਾ ਯੋਗਦਾਨ',
 'mycontris' => 'ਮੇਰਾ ਯੋਗਦਾਨ',
 'contribsub2' => '$1 ($2) ਲਈ',
 'uctop' => '(ਉੱਤੇ)',
@@ -976,6 +982,7 @@ to upload files.',
 
 'sp-contributions-newbies-sub' => 'ਨਵੇਂ ਅਕਾਊਂਟਾਂ ਲਈ',
 'sp-contributions-blocklog' => 'ਪਾਬੰਦੀ ਲਾਗ',
+'sp-contributions-uploads' => 'ਅਪਲੋਡ',
 'sp-contributions-logs' => 'ਲਾਗ',
 'sp-contributions-talk' => 'ਗੱਲਬਾਤ',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
@@ -995,6 +1002,7 @@ to upload files.',
 'whatlinkshere-next' => '{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}',
 'whatlinkshere-links' => '← ਲਿੰਕ',
 'whatlinkshere-hideredirs' => '$1 ਗੈਰਸਿਧਾ',
+'whatlinkshere-hidetrans' => '$1 ਇੱਥੇ ਕੀ ਕੀ ਜੁੜਦਾ ਹੈ।',
 'whatlinkshere-hidelinks' => '$1 ਲਿੰਕ',
 'whatlinkshere-hideimages' => '$1 ਸੰਬੰਧਿਤ ਚਿਤਰ',
 'whatlinkshere-filters' => 'ਫਿਲਟਰ',
@@ -1063,6 +1071,7 @@ to upload files.',
 # Thumbnails
 'thumbnail-more' => 'ਫੈਲਾਓ',
 'filemissing' => 'ਫਾਇਲ ਗੁੰਮ ਹੈ',
+'thumbnail_error' => 'ਅਁਗੂਠਾ ਝਲਕ ਬਨਾਉਣ ਵਿਚ ਗਲਤੀ ਹੋਈ ਹੈ : $1',
 
 # Special:Import
 'import' => 'ਪੇਜ ਇੰਪੋਰਟ ਕਰੋ',
index 34fd274..9f98566 100644 (file)
@@ -729,7 +729,6 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 
 # Diffs
 'history-title' => 'Amlat ning pamagbayu king "$1"',
-'difference' => '(Pamiyaliwa da reng pamibayu)',
 'lineno' => 'Gulis $1:',
 'compareselectedversions' => 'Pikumpara/piyanti la reng mepiling bersion',
 'editundo' => 'iurung',
index 341a17b..4fd4af0 100644 (file)
@@ -437,7 +437,6 @@ Léginde : ({{MediaWiki:Cur}}) = différinches aveuc el vérchon à ch'momint-ch
 
 # Diffs
 'history-title' => 'Histoère des cangemints éd "$1"',
-'difference' => '(Diférinche intre chés érvisions)',
 'lineno' => 'Line $1:',
 'compareselectedversions' => 'Compérer chés couésies contérbuchons',
 'editundo' => "n'poin foaire",
index d471b50..cf649e0 100644 (file)
@@ -57,259 +57,259 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'          => 'Gleecher unnerleine:',
-'tog-hideminor'          => 'Gleene Enneringe verschwinne losse',
-'tog-watchdefault'       => 'Vun mir gennerte Ardickele watsche',
-'tog-nocache'            => 'Bledder-Scheier ausmache',
-'tog-watchlisthideown'   => 'Mei Ardickele vun mei Watsch-Lischt verschwinne losse',
-'tog-watchlisthidebots'  => 'Enneringe vun Bots vun mei Watsch-Lischt verschwinne losse',
+'tog-underline' => 'Gleecher unnerleine:',
+'tog-hideminor' => 'Gleene Enneringe verschwinne losse',
+'tog-watchdefault' => 'Vun mir gennerte Ardickele watsche',
+'tog-nocache' => 'Bledder-Scheier ausmache',
+'tog-watchlisthideown' => 'Mei Ardickele vun mei Watsch-Lischt verschwinne losse',
+'tog-watchlisthidebots' => 'Enneringe vun Bots vun mei Watsch-Lischt verschwinne losse',
 'tog-watchlisthideminor' => 'Gleene Enneringe vun mei Watsch-Lischt verschwinne losse',
 
 'underline-always' => 'allfart',
-'underline-never'  => 'nie naett',
+'underline-never' => 'nie naett',
 
 # Dates
-'sunday'        => 'Sunndaag',
-'monday'        => 'Mundaag',
-'tuesday'       => 'Dinschdaag',
-'wednesday'     => 'Mittwoch',
-'thursday'      => 'Dunnerschdaag',
-'friday'        => 'Freidaag',
-'saturday'      => 'Samschdaag',
-'sun'           => 'Su',
-'mon'           => 'Mo',
-'tue'           => 'Di',
-'wed'           => 'Mi',
-'thu'           => 'Du',
-'fri'           => 'Fr',
-'sat'           => 'Sa',
-'january'       => 'Yenner',
-'february'      => 'Hanning',
-'march'         => 'Matz',
-'april'         => 'Abril',
-'may_long'      => 'Moi',
-'june'          => 'Yuni',
-'july'          => 'Yuli',
-'august'        => 'Aagscht',
-'september'     => 'September',
-'october'       => 'Oktower',
-'november'      => 'Nowember',
-'december'      => 'Disember',
-'january-gen'   => 'Yenner',
-'february-gen'  => 'Hanning',
-'march-gen'     => 'Matz',
-'april-gen'     => 'Abril',
-'may-gen'       => 'Moi',
-'june-gen'      => 'Tschuun',
-'july-gen'      => 'Tschulei',
-'august-gen'    => 'Aagscht',
+'sunday' => 'Sunndaag',
+'monday' => 'Mundaag',
+'tuesday' => 'Dinschdaag',
+'wednesday' => 'Mittwoch',
+'thursday' => 'Dunnerschdaag',
+'friday' => 'Freidaag',
+'saturday' => 'Samschdaag',
+'sun' => 'Su',
+'mon' => 'Mo',
+'tue' => 'Di',
+'wed' => 'Mi',
+'thu' => 'Du',
+'fri' => 'Fr',
+'sat' => 'Sa',
+'january' => 'Yenner',
+'february' => 'Hanning',
+'march' => 'Matz',
+'april' => 'Abril',
+'may_long' => 'Moi',
+'june' => 'Yuni',
+'july' => 'Yuli',
+'august' => 'Aagscht',
+'september' => 'September',
+'october' => 'Oktower',
+'november' => 'Nowember',
+'december' => 'Disember',
+'january-gen' => 'Yenner',
+'february-gen' => 'Hanning',
+'march-gen' => 'Matz',
+'april-gen' => 'Abril',
+'may-gen' => 'Moi',
+'june-gen' => 'Tschuun',
+'july-gen' => 'Tschulei',
+'august-gen' => 'Aagscht',
 'september-gen' => 'September',
-'october-gen'   => 'Oktower',
-'november-gen'  => 'Nowember',
-'december-gen'  => 'Disember',
-'jan'           => 'Yen.',
-'feb'           => 'Han.',
-'mar'           => 'Matz',
-'apr'           => 'Abr.',
-'may'           => 'Moi',
-'jun'           => 'Yuni',
-'jul'           => 'Yuli',
-'aug'           => 'Aug.',
-'sep'           => 'Sep.',
-'oct'           => 'Okt.',
-'nov'           => 'Nov.',
-'dec'           => 'Dis.',
+'october-gen' => 'Oktower',
+'november-gen' => 'Nowember',
+'december-gen' => 'Disember',
+'jan' => 'Yen.',
+'feb' => 'Han.',
+'mar' => 'Matz',
+'apr' => 'Abr.',
+'may' => 'Moi',
+'jun' => 'Yuni',
+'jul' => 'Yuli',
+'aug' => 'Aug.',
+'sep' => 'Sep.',
+'oct' => 'Okt.',
+'nov' => 'Nov.',
+'dec' => 'Dis.',
 
 # Categories related messages
-'pagecategories'                 => '{{PLURAL:$1|Abdeeling|Abdeelinge}}',
-'category_header'                => 'Bledder in Abdeeling „$1“',
-'subcategories'                  => 'Unnerabdeeling',
-'category-media-header'          => 'Media in Abdeeling „$1“',
-'category-empty'                 => "''Die Abdeeling hot zu daere Zeit kene Bledder oder Feils.''",
+'pagecategories' => '{{PLURAL:$1|Abdeeling|Abdeelinge}}',
+'category_header' => 'Bledder in Abdeeling „$1“',
+'subcategories' => 'Unnerabdeeling',
+'category-media-header' => 'Media in Abdeeling „$1“',
+'category-empty' => "''Die Abdeeling hot zu daere Zeit kene Bledder oder Feils.''",
 'category-article-count-limited' => '{{PLURAL:$1|Sell Blatt iss|Selle $1 Bledder sin}} in daer Abdeeling drin:',
-'category-file-count-limited'    => '{{PLURAL:$1|Sell Feil iss|Selle $1 Feils sin}} in daer Abdeeling drin:',
-'listingcontinuesabbrev'         => '(weider)',
+'category-file-count-limited' => '{{PLURAL:$1|Sell Feil iss|Selle $1 Feils sin}} in daer Abdeeling drin:',
+'listingcontinuesabbrev' => '(weider)',
 
-'about'         => 'Iwwer',
-'article'       => 'Blatt',
-'newwindow'     => '(in em nei Fenschder)',
-'cancel'        => 'Zerick',
+'about' => 'Iwwer',
+'article' => 'Blatt',
+'newwindow' => '(in em nei Fenschder)',
+'cancel' => 'Zerick',
 'moredotdotdot' => 'Mehner…',
-'mypage'        => 'Mei Blatt',
-'mytalk'        => 'Mei Gschwetz-Blatt',
-'anontalk'      => 'Gschwetz-Blatt fer die IP',
-'navigation'    => 'Faahre-Gnepp',
-'and'           => '&#32;unn',
+'mypage' => 'Mei Blatt',
+'mytalk' => 'Mei Gschwetz-Blatt',
+'anontalk' => 'Gschwetz-Blatt fer die IP',
+'navigation' => 'Faahre-Gnepp',
+'and' => '&#32;unn',
 
 # Cologne Blue skin
-'qbfind'         => 'Finne',
-'qbedit'         => 'Ennere',
-'qbpageoptions'  => 'Des Blatt',
-'qbpageinfo'     => 'Daade vun dem Blatt',
-'qbmyoptions'    => 'Mei Bledder',
+'qbfind' => 'Finne',
+'qbedit' => 'Ennere',
+'qbpageoptions' => 'Des Blatt',
+'qbpageinfo' => 'Daade vun dem Blatt',
+'qbmyoptions' => 'Mei Bledder',
 'qbspecialpages' => 'Besunnere Bledder',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-delete'  => 'Verwische',
-'vector-action-move'    => 'Ziehe',
+'vector-action-delete' => 'Verwische',
+'vector-action-move' => 'Ziehe',
 'vector-action-protect' => 'Schitze',
-'vector-view-create'    => 'Schtaerte',
-'vector-view-edit'      => 'Ennere',
-'vector-view-history'   => 'Gschicht zeige',
-'vector-view-view'      => 'Lese',
-'namespaces'            => 'Blatznaame',
-
-'errorpagetitle'   => 'Mischteek',
-'returnto'         => 'Zerick zum Blatt $1.',
-'tagline'          => 'Vun {{SITENAME}}',
-'help'             => 'Hilf',
-'search'           => 'Guck uff',
-'searchbutton'     => 'Guck uff',
-'go'               => 'Geh',
-'searcharticle'    => 'Blatt',
-'history'          => 'Gschicht',
-'history_short'    => 'Gschicht',
+'vector-view-create' => 'Schtaerte',
+'vector-view-edit' => 'Ennere',
+'vector-view-history' => 'Gschicht zeige',
+'vector-view-view' => 'Lese',
+'namespaces' => 'Blatznaame',
+
+'errorpagetitle' => 'Mischteek',
+'returnto' => 'Zerick zum Blatt $1.',
+'tagline' => 'Vun {{SITENAME}}',
+'help' => 'Hilf',
+'search' => 'Guck uff',
+'searchbutton' => 'Guck uff',
+'go' => 'Geh',
+'searcharticle' => 'Blatt',
+'history' => 'Gschicht',
+'history_short' => 'Gschicht',
 'printableversion' => 'Version zum Drucke',
-'permalink'        => 'Permanent Gleecher',
-'print'            => 'Drucke',
-'view'             => 'Aagucke',
-'edit'             => 'Ennere/Tscheensche',
-'create'           => 'Schtaerte',
-'editthispage'     => 'Des Blatt ennere',
+'permalink' => 'Permanent Gleecher',
+'print' => 'Drucke',
+'view' => 'Aagucke',
+'edit' => 'Ennere/Tscheensche',
+'create' => 'Schtaerte',
+'editthispage' => 'Des Blatt ennere',
 'create-this-page' => 'Blatt schtaerte',
-'delete'           => 'Verwische',
-'deletethispage'   => 'Des Blatt verwische',
-'protect'          => 'Schitze',
-'protect_change'   => 'tscheensche',
-'protectthispage'  => 'Des Blatt schitze',
-'newpage'          => 'Neies Blatt',
-'talkpage'         => 'Sell Blatt dischbediere',
+'delete' => 'Verwische',
+'deletethispage' => 'Des Blatt verwische',
+'protect' => 'Schitze',
+'protect_change' => 'tscheensche',
+'protectthispage' => 'Des Blatt schitze',
+'newpage' => 'Neies Blatt',
+'talkpage' => 'Sell Blatt dischbediere',
 'talkpagelinktext' => 'Gschwetz',
-'specialpage'      => 'Besunneres Blatt',
-'personaltools'    => 'Paerseenlich Gscharr',
-'articlepage'      => 'Inhalt vun dem Blatt aagucke',
-'talk'             => 'Dischbedutt',
-'views'            => 'Aasichte',
-'toolbox'          => 'Gscharr',
-'userpage'         => 'Yuuserblatt zeige',
-'projectpage'      => 'Projekt-Blatt aagucke',
-'imagepage'        => 'Feils zeige',
-'templatepage'     => 'Moddle zeige',
-'categorypage'     => 'Abeelingsblatt zeige',
-'viewtalkpage'     => 'Dischbedutt zeige',
-'otherlanguages'   => 'Annere Schprooche',
-'redirectedfrom'   => '(Weiterleitung vun $1)',
-'redirectpagesub'  => 'Weiderleiding',
-'lastmodifiedat'   => 'Des Blatt iss letscht gennert am $1 um $2 Uhr.',
-'protectedpage'    => 'Blatt mit Schutz',
-'jumpto'           => 'Gang nooch:',
+'specialpage' => 'Besunneres Blatt',
+'personaltools' => 'Paerseenlich Gscharr',
+'articlepage' => 'Inhalt vun dem Blatt aagucke',
+'talk' => 'Dischbedutt',
+'views' => 'Aasichte',
+'toolbox' => 'Gscharr',
+'userpage' => 'Yuuserblatt zeige',
+'projectpage' => 'Projekt-Blatt aagucke',
+'imagepage' => 'Feils zeige',
+'templatepage' => 'Moddle zeige',
+'categorypage' => 'Abeelingsblatt zeige',
+'viewtalkpage' => 'Dischbedutt zeige',
+'otherlanguages' => 'Annere Schprooche',
+'redirectedfrom' => '(Weiterleitung vun $1)',
+'redirectpagesub' => 'Weiderleiding',
+'lastmodifiedat' => 'Des Blatt iss letscht gennert am $1 um $2 Uhr.',
+'protectedpage' => 'Blatt mit Schutz',
+'jumpto' => 'Gang nooch:',
 'jumptonavigation' => 'Faahre-Gnepp',
-'jumptosearch'     => 'guck uff',
+'jumptosearch' => 'guck uff',
 
 # 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'            => 'Iwwer {{SITENAME}}',
-'aboutpage'            => 'Project:Iwwer_{{SITENAME}}',
-'copyright'            => 'Was do drin schdeht iss unner $1 verfiechbar',
-'copyrightpage'        => '{{ns:project}}:Urhewerrechte',
-'disclaimers'          => 'Impressum',
-'disclaimerpage'       => 'Project:Impressum',
-'edithelp'             => 'Hilf zum Ennere',
-'edithelppage'         => 'Help:Tscheensche',
-'helppage'             => 'Help:Hilf',
-'mainpage'             => 'Haaptblatt',
+'aboutsite' => 'Iwwer {{SITENAME}}',
+'aboutpage' => 'Project:Iwwer_{{SITENAME}}',
+'copyright' => 'Was do drin schdeht iss unner $1 verfiechbar',
+'copyrightpage' => '{{ns:project}}:Urhewerrechte',
+'disclaimers' => 'Impressum',
+'disclaimerpage' => 'Project:Impressum',
+'edithelp' => 'Hilf zum Ennere',
+'edithelppage' => 'Help:Tscheensche',
+'helppage' => 'Help:Hilf',
+'mainpage' => 'Haaptblatt',
 'mainpage-description' => 'Haaptblatt',
-'portal'               => 'Gmeeschafts-Portal',
-'portal-url'           => 'Project:Gmeeschafts-Portal',
-'privacy'              => 'Daadeschutz',
-'privacypage'          => 'Project:Daadeschutz',
+'portal' => 'Gmeeschafts-Portal',
+'portal-url' => 'Project:Gmeeschafts-Portal',
+'privacy' => 'Daadeschutz',
+'privacypage' => 'Project:Daadeschutz',
 
-'versionrequired'     => 'Muss Version $1 vun MediaWiki sei',
+'versionrequired' => 'Muss Version $1 vun MediaWiki sei',
 'versionrequiredtext' => 'Muss Version $1 vun MediaWiki sei, fer es Blatt zu yuuse.
 Guck aa [[Special:Version|Versionsblatt]]',
 
-'ok'                      => 'OK',
-'retrievedfrom'           => 'Vun „$1“',
-'youhavenewmessages'      => 'Du hast $1 uff deinem $2.',
-'newmessageslink'         => 'Neiichkeede',
-'newmessagesdifflink'     => 'Gschwetz-Blatt',
+'ok' => 'OK',
+'retrievedfrom' => 'Vun „$1“',
+'youhavenewmessages' => 'Du hast $1 uff deinem $2.',
+'newmessageslink' => 'Neiichkeede',
+'newmessagesdifflink' => 'Gschwetz-Blatt',
 'youhavenewmessagesmulti' => 'Du hascht neie Comments: $1',
-'editsection'             => 'Ennere',
-'editold'                 => 'Ennere',
-'editlink'                => 'ennere',
-'editsectionhint'         => 'Abschnitt ennere: $1',
-'toc'                     => 'Lischt vum Inhalt',
-'showtoc'                 => 'Zeige',
-'hidetoc'                 => 'Verschwinne losse',
-'collapsible-collapse'    => 'Zuklappe',
-'collapsible-expand'      => 'Uffklappe',
-'viewdeleted'             => '$1 zeige?',
-'feedlinks'               => 'Feed:',
-'site-rss-feed'           => 'RSS-Feed fer $1',
-'site-atom-feed'          => 'Atom-Feed fer $1',
-'page-rss-feed'           => 'RSS-Feed fer „$1“',
-'page-atom-feed'          => 'Atom-Feed fer „$1“',
-'red-link-title'          => '$1 (Blatt gebt es net)',
+'editsection' => 'Ennere',
+'editold' => 'Ennere',
+'editlink' => 'ennere',
+'editsectionhint' => 'Abschnitt ennere: $1',
+'toc' => 'Lischt vum Inhalt',
+'showtoc' => 'Zeige',
+'hidetoc' => 'Verschwinne losse',
+'collapsible-collapse' => 'Zuklappe',
+'collapsible-expand' => 'Uffklappe',
+'viewdeleted' => '$1 zeige?',
+'feedlinks' => 'Feed:',
+'site-rss-feed' => 'RSS-Feed fer $1',
+'site-atom-feed' => 'Atom-Feed fer $1',
+'page-rss-feed' => 'RSS-Feed fer „$1“',
+'page-atom-feed' => 'Atom-Feed fer „$1“',
+'red-link-title' => '$1 (Blatt gebt es net)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Blatt',
-'nstab-user'      => 'Yuuser-Blatt',
-'nstab-media'     => 'Media-Blatt',
-'nstab-special'   => 'Besunneres Blatt',
-'nstab-project'   => 'Project-Blatt',
-'nstab-image'     => 'Feil',
+'nstab-main' => 'Blatt',
+'nstab-user' => 'Yuuser-Blatt',
+'nstab-media' => 'Media-Blatt',
+'nstab-special' => 'Besunneres Blatt',
+'nstab-project' => 'Project-Blatt',
+'nstab-image' => 'Feil',
 'nstab-mediawiki' => 'Melding vum System',
-'nstab-template'  => 'Moddel',
-'nstab-help'      => 'Hilf',
-'nstab-category'  => 'Abdeeling',
+'nstab-template' => 'Moddel',
+'nstab-help' => 'Hilf',
+'nstab-category' => 'Abdeeling',
 
 # General errors
-'error'               => 'Mischteek',
-'databaseerror'       => 'Fehler in de Daadescheier',
-'missing-article'     => 'Sell Text fer „$1“ $2 iss in de Daadebank naett gfunne warre.
+'error' => 'Mischteek',
+'databaseerror' => 'Fehler in de Daadescheier',
+'missing-article' => 'Sell Text fer „$1“ $2 iss in de Daadebank naett gfunne warre.
 
 Des Blatt iss verleicht glescht adder gezoge warre.
 
 Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld des an en [[Special:ListUsers/sysop|Verwalter]] unn gebb die URL dezu aa.',
-'missingarticle-rev'  => '(Version: $1)',
+'missingarticle-rev' => '(Version: $1)',
 'missingarticle-diff' => '(Unnerschidd zwische Versione: $1, $2)',
-'internalerror'       => 'Interner Fehler',
-'internalerror_info'  => 'Interner Fehler: $1',
+'internalerror' => 'Interner Fehler',
+'internalerror_info' => 'Interner Fehler: $1',
 'ns-specialprotected' => 'Besunnere Bledder sinn net zum Ennere.',
 
 # Virus scanner
 'virus-unknownscanner' => 'Unbekannter Virus-Uffgucker:',
 
 # Login and logout pages
-'yourname'                => 'Yuuser-Naame:',
-'yourpassword'            => 'Paesswatt:',
-'yourpasswordagain'       => 'Paesswatt noch eemol:',
-'yourdomainname'          => 'Dei Domain:',
-'login'                   => 'Kumm nei',
+'yourname' => 'Yuuser-Naame:',
+'yourpassword' => 'Paesswatt:',
+'yourpasswordagain' => 'Paesswatt noch eemol:',
+'yourdomainname' => 'Dei Domain:',
+'login' => 'Kumm nei',
 'nav-login-createaccount' => 'Kumm nei',
-'userlogin'               => 'Kumm nei',
-'userloginnocreate'       => 'Kumm nei',
-'logout'                  => 'Geh naus',
-'userlogout'              => 'Geh naus',
-'gotaccountlink'          => 'Kumm nei',
-'createaccountmail'       => 'iwwer E-Mail',
-'createaccountreason'     => 'Grund:',
-'mailmypassword'          => 'Neies Paesswadd eposchde',
-'noemail'                 => 'Yuuser „$1“ hot ken E-Mail aagewwe.',
-'loginlanguagelabel'      => 'Schprooch: $1',
+'userlogin' => 'Kumm nei',
+'userloginnocreate' => 'Kumm nei',
+'logout' => 'Geh naus',
+'userlogout' => 'Geh naus',
+'gotaccountlink' => 'Kumm nei',
+'createaccountmail' => 'iwwer E-Mail',
+'createaccountreason' => 'Grund:',
+'mailmypassword' => 'Neies Paesswadd eposchde',
+'noemail' => 'Yuuser „$1“ hot ken E-Mail aagewwe.',
+'loginlanguagelabel' => 'Schprooch: $1',
 
 # Change password dialog
-'resetpass'                 => 'Paesswatt ennere',
-'oldpassword'               => 'Aldes Paesswatt:',
-'newpassword'               => 'Neies Paesswatt:',
-'resetpass_forbidden'       => 'Paesswatt iss net zu ennere',
+'resetpass' => 'Paesswatt ennere',
+'oldpassword' => 'Aldes Paesswatt:',
+'newpassword' => 'Neies Paesswatt:',
+'resetpass_forbidden' => 'Paesswatt iss net zu ennere',
 'resetpass-submit-loggedin' => 'Paesswatt ennere',
 
 # Special:PasswordReset
-'passwordreset'              => 'Paesswatt zerricksetze',
-'passwordreset-legend'       => 'Paesswatt zerricksetze',
-'passwordreset-username'     => 'Yuuser-Naame:',
+'passwordreset' => 'Paesswatt zerricksetze',
+'passwordreset-legend' => 'Paesswatt zerricksetze',
+'passwordreset-username' => 'Yuuser-Naame:',
 'passwordreset-emailelement' => 'Yuusernaame: $1
 Paesswatt fer nau: $2',
 
@@ -317,229 +317,228 @@ Paesswatt fer nau: $2',
 'changeemail-none' => '(ken)',
 
 # Edit page toolbar
-'bold_sample'     => 'Wadde fett gmarrickt',
-'bold_tip'        => 'Wadde fett gmarrickt',
-'link_sample'     => 'Gleecher-Titel',
-'link_tip'        => 'Gleecher',
-'extlink_sample'  => 'http://www.example.com Gleecher-Text',
-'extlink_tip'     => 'Gewebbgleecher (acht uff http://)',
+'bold_sample' => 'Wadde fett gmarrickt',
+'bold_tip' => 'Wadde fett gmarrickt',
+'link_sample' => 'Gleecher-Titel',
+'link_tip' => 'Gleecher',
+'extlink_sample' => 'http://www.example.com Gleecher-Text',
+'extlink_tip' => 'Gewebbgleecher (acht uff http://)',
 'headline_sample' => 'Iwwerschrift',
-'headline_tip'    => 'Iwwerschrift Level 2',
-'image_sample'    => 'Beeschpiel.jpg',
-'media_sample'    => 'Beeschpiel.ogg',
-'media_tip'       => 'Gleecher fer Feil',
+'headline_tip' => 'Iwwerschrift Level 2',
+'image_sample' => 'Beeschpiel.jpg',
+'media_sample' => 'Beeschpiel.ogg',
+'media_tip' => 'Gleecher fer Feil',
 
 # Edit pages
-'minoredit'              => 'Nur gleene Enneringe gemacht',
-'watchthis'              => 'Watsch des Blatt',
-'savearticle'            => 'Blatt beilege',
-'preview'                => 'Aagucke',
-'showdiff'               => 'Enneringe zeige',
-'blockednoreason'        => 'ken Grund gewwe',
-'loginreqlink'           => 'kumm nei',
-'newarticle'             => '(Nei)',
-'note'                   => "'''Hieweis:'''",
-'editing'                => '$1 ennere',
-'editingsection'         => 'Ennere vun $1 (Abschnitt)',
-'editingcomment'         => 'Ennere vun $1 (Neier Abschnitt)',
-'editconflict'           => 'Druwwel beim Ennere: $1',
-'yourdiff'               => 'Unnerschidde',
-'templatesused'          => '{{PLURAL:$1|Sell Moddel iss|Selle Moddle sinn}} gyuust vun dem Blatt:',
-'template-protected'     => '(geschitzt)',
+'minoredit' => 'Nur gleene Enneringe gemacht',
+'watchthis' => 'Watsch des Blatt',
+'savearticle' => 'Blatt beilege',
+'preview' => 'Aagucke',
+'showdiff' => 'Enneringe zeige',
+'blockednoreason' => 'ken Grund gewwe',
+'loginreqlink' => 'kumm nei',
+'newarticle' => '(Nei)',
+'note' => "'''Hieweis:'''",
+'editing' => '$1 ennere',
+'editingsection' => 'Ennere vun $1 (Abschnitt)',
+'editingcomment' => 'Ennere vun $1 (Neier Abschnitt)',
+'editconflict' => 'Druwwel beim Ennere: $1',
+'yourdiff' => 'Unnerschidde',
+'templatesused' => '{{PLURAL:$1|Sell Moddel iss|Selle Moddle sinn}} gyuust vun dem Blatt:',
+'template-protected' => '(geschitzt)',
 'template-semiprotected' => '(geschitzt fer neie Yuuser)',
 
 # "Undo" feature
 'undo-summary' => 'Enneringe $1 vun [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischbedutt]]) losgmacht.',
 
 # History pages
-'revisionasof'     => 'Version vum $2, $3 Uhr',
+'revisionasof' => 'Version vum $2, $3 Uhr',
 'previousrevision' => '← letscht Version',
-'nextrevision'     => 'Neiere Version →',
-'next'             => 'Neegschte',
-'last'             => 'Letscht',
-'page_first'       => 'Aafang',
-'page_last'        => 'End',
-'histfirst'        => 'Eldescht',
-'histlast'         => 'Letscht',
-'historysize'      => '({{PLURAL:$1|1 Beit|$1 Beit}})',
-'historyempty'     => '(leer)',
+'nextrevision' => 'Neiere Version →',
+'next' => 'Neegschte',
+'last' => 'Letscht',
+'page_first' => 'Aafang',
+'page_last' => 'End',
+'histfirst' => 'Eldescht',
+'histlast' => 'Letscht',
+'historysize' => '({{PLURAL:$1|1 Beit|$1 Beit}})',
+'historyempty' => '(leer)',
 
 # Revision deletion
-'rev-deleted-comment'        => '(Aamaericking iss weg geduh warre)',
-'rev-deleted-user'           => '(Yuuser-Naame gelöscht)',
-'rev-delundel'               => 'zeig/verschwinne losse',
-'rev-showdeleted'            => 'zeig',
-'revdelete-no-file'          => 'Sell Feil gebt es net.',
+'rev-deleted-comment' => '(Aamaericking iss weg geduh warre)',
+'rev-deleted-user' => '(Yuuser-Naame gelöscht)',
+'rev-delundel' => 'zeig/verschwinne losse',
+'rev-showdeleted' => 'zeig',
+'revdelete-no-file' => 'Sell Feil gebt es net.',
 'revdelete-show-file-submit' => 'Ya',
-'revdelete-hide-text'        => 'Text vun de Version verschwinne losse',
-'revdelete-radio-same'       => '(net ennere)',
-'revdelete-radio-set'        => 'Ya',
-'revdelete-radio-unset'      => 'Nee',
-'revdelete-log'              => 'Grund:',
-'pagehist'                   => 'Gschicht',
-'revdelete-otherreason'      => 'Annere Grind dezu:',
-'revdelete-reasonotherlist'  => 'Annere Grind',
-'revdelete-edit-reasonlist'  => "Grind fer's Lesche ennere",
-'revdelete-offender'         => 'Schreiwer fun daer Version:',
+'revdelete-hide-text' => 'Text vun de Version verschwinne losse',
+'revdelete-radio-same' => '(net ennere)',
+'revdelete-radio-set' => 'Ya',
+'revdelete-radio-unset' => 'Nee',
+'revdelete-log' => 'Grund:',
+'pagehist' => 'Gschicht',
+'revdelete-otherreason' => 'Annere Grind dezu:',
+'revdelete-reasonotherlist' => 'Annere Grind',
+'revdelete-edit-reasonlist' => "Grind fer's Lesche ennere",
+'revdelete-offender' => 'Schreiwer fun daer Version:',
 
 # History merging
 'mergehistory-reason' => 'Grund:',
 
 # Diffs
-'difference' => '(Unnerschidd zwische Versione)',
-'lineno'     => 'Lein $1:',
-'editundo'   => 'losmache',
+'lineno' => 'Lein $1:',
+'editundo' => 'losmache',
 
 # Search results
-'searchresults'                  => 'Results vum Uffgucke',
-'searchresults-title'            => 'Results vum Uffgucke fer „$1“',
-'searchsubtitle'                 => 'Du hoscht nooch \'\'\'[[:$1]]\'\'\' gsucht ([[Special:Prefixindex/$1|alle Bledder wu mit "$1" aafange]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Bledder wu uff "$1" zeige]])',
-'prevn'                          => '{{PLURAL:$1|letscht|letscht $1}}',
-'nextn'                          => 'neegschte {{PLURAL:$1|$1}}',
-'viewprevnext'                   => 'Zeige ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-new'                 => "'''Schtaert des Blatt „[[:$1|$1]]“ uf dem Wiki.'''",
-'searchhelp-url'                 => 'Help:Hilf',
-'searchprofile-everything'       => 'Abaddiche',
+'searchresults' => 'Results vum Uffgucke',
+'searchresults-title' => 'Results vum Uffgucke fer „$1“',
+'searchsubtitle' => 'Du hoscht nooch \'\'\'[[:$1]]\'\'\' gsucht ([[Special:Prefixindex/$1|alle Bledder wu mit "$1" aafange]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Bledder wu uff "$1" zeige]])',
+'prevn' => '{{PLURAL:$1|letscht|letscht $1}}',
+'nextn' => 'neegschte {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Zeige ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-new' => "'''Schtaert des Blatt „[[:$1|$1]]“ uf dem Wiki.'''",
+'searchhelp-url' => 'Help:Hilf',
+'searchprofile-everything' => 'Abaddiche',
 'searchprofile-articles-tooltip' => 'Uffgucke in $1',
-'searchprofile-project-tooltip'  => 'Uffgucke in $1',
-'searchprofile-images-tooltip'   => 'Nooch Feils uffgucke',
-'search-result-size'             => '$1 ({{PLURAL:$2|1 Wadd|$2 Wadde}})',
-'search-redirect'                => '(Weiderleiding vun „$1“)',
-'search-section'                 => '(Abschnitt $1)',
-'search-suggest'                 => 'Iss „$1“ gemeent?',
-'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:',
-'powersearch-redir'              => 'Lischt vun Weiterleidinge',
-'powersearch-field'              => 'Such fer',
-'powersearch-toggleall'          => 'All',
-'powersearch-togglenone'         => 'Ken',
-'search-external'                => 'Guck im Gewebb',
+'searchprofile-project-tooltip' => 'Uffgucke in $1',
+'searchprofile-images-tooltip' => 'Nooch Feils uffgucke',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Wadd|$2 Wadde}})',
+'search-redirect' => '(Weiderleiding vun „$1“)',
+'search-section' => '(Abschnitt $1)',
+'search-suggest' => 'Iss „$1“ gemeent?',
+'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:',
+'powersearch-redir' => 'Lischt vun Weiterleidinge',
+'powersearch-field' => 'Such fer',
+'powersearch-toggleall' => 'All',
+'powersearch-togglenone' => 'Ken',
+'search-external' => 'Guck im Gewebb',
 
 # Quickbar
 'qbsettings-none' => 'Ken',
 
 # Preferences page
-'preferences'              => 'paerseenlich Profil',
-'mypreferences'            => 'Mei Uffschtelling',
-'changepassword'           => 'Paesswatt ennere',
-'skin-preview'             => 'Aagucke',
-'prefs-personal'           => 'Yuuser Profile',
-'prefs-watchlist'          => 'Watsch-Lischt',
-'prefs-watchlist-days'     => 'Daage in de Watsch-Lischt:',
-'prefs-resetpass'          => 'Paesswatt ennere',
-'saveprefs'                => 'Uffstellinge beilege',
-'resetprefs'               => 'Ausduh',
-'prefs-editing'            => 'Ennere',
-'columns'                  => 'Kallems:',
-'searchresultshead'        => 'Guck uff',
-'recentchangesdays-max'    => 'Max. $1 {{PLURAL:$1|Daag|Daag}}',
-'timezoneregion-africa'    => 'Afrikaa',
-'timezoneregion-america'   => 'Amerikaa',
-'timezoneregion-asia'      => 'Asie',
+'preferences' => 'paerseenlich Profil',
+'mypreferences' => 'Mei Uffschtelling',
+'changepassword' => 'Paesswatt ennere',
+'skin-preview' => 'Aagucke',
+'prefs-personal' => 'Yuuser Profile',
+'prefs-watchlist' => 'Watsch-Lischt',
+'prefs-watchlist-days' => 'Daage in de Watsch-Lischt:',
+'prefs-resetpass' => 'Paesswatt ennere',
+'saveprefs' => 'Uffstellinge beilege',
+'resetprefs' => 'Ausduh',
+'prefs-editing' => 'Ennere',
+'columns' => 'Kallems:',
+'searchresultshead' => 'Guck uff',
+'recentchangesdays-max' => 'Max. $1 {{PLURAL:$1|Daag|Daag}}',
+'timezoneregion-africa' => 'Afrikaa',
+'timezoneregion-america' => 'Amerikaa',
+'timezoneregion-asia' => 'Asie',
 'timezoneregion-australia' => 'Australie',
-'timezoneregion-europe'    => 'Eiropaa',
-'prefs-namespaces'         => 'Blatznaame',
-'prefs-files'              => 'Feils',
-'prefs-custom-css'         => 'CSS vum Yuuser',
-'prefs-custom-js'          => 'JavaScript vum Yuuser',
-'youremail'                => 'E-Poschde:',
-'username'                 => 'Yuuser-Naame:',
-'uid'                      => 'Yuuser-ID:',
-'prefs-memberingroups'     => 'Mitglied vun de {{PLURAL:$1|Yuuser-Druppe|Yuuser-Druppe}}:',
-'yourlanguage'             => 'Schprooch:',
-'yourgender'               => 'Geschlecht:',
-'gender-female'            => 'Weiblich',
-'email'                    => 'E-Poschde',
-'prefs-signature'          => 'Unnerschrift',
-'prefs-diffs'              => 'Unnerschidd vun Versione',
+'timezoneregion-europe' => 'Eiropaa',
+'prefs-namespaces' => 'Blatznaame',
+'prefs-files' => 'Feils',
+'prefs-custom-css' => 'CSS vum Yuuser',
+'prefs-custom-js' => 'JavaScript vum Yuuser',
+'youremail' => 'E-Poschde:',
+'username' => 'Yuuser-Naame:',
+'uid' => 'Yuuser-ID:',
+'prefs-memberingroups' => 'Mitglied vun de {{PLURAL:$1|Yuuser-Druppe|Yuuser-Druppe}}:',
+'yourlanguage' => 'Schprooch:',
+'yourgender' => 'Geschlecht:',
+'gender-female' => 'Weiblich',
+'email' => 'E-Poschde',
+'prefs-signature' => 'Unnerschrift',
+'prefs-diffs' => 'Unnerschidd vun Versione',
 
 # User rights
 'userrights-editusergroup' => 'Mitgliedschaft vun Yuuser ennere',
-'userrights-groupsmember'  => 'Mitglied vun:',
-'userrights-reason'        => 'Grund:',
+'userrights-groupsmember' => 'Mitglied vun:',
+'userrights-reason' => 'Grund:',
 
 # Groups
-'group'       => 'Druppe:',
-'group-user'  => 'Yuuser',
-'group-bot'   => 'Waddefresser',
+'group' => 'Druppe:',
+'group-user' => 'Yuuser',
+'group-bot' => 'Waddefresser',
 'group-sysop' => 'Verwalter',
-'group-all'   => '(all)',
+'group-all' => '(all)',
 
-'group-user-member'  => '{{GENDER:$1|Yuuser}}',
-'group-bot-member'   => '{{GENDER:$1|Waddefresser}}',
+'group-user-member' => '{{GENDER:$1|Yuuser}}',
+'group-bot-member' => '{{GENDER:$1|Waddefresser}}',
 'group-sysop-member' => '{{GENDER:$1|Verwalter}}',
 
-'grouppage-user'  => '{{ns:project}}:Yuuser',
-'grouppage-bot'   => '{{ns:project}}:Waddefresser',
+'grouppage-user' => '{{ns:project}}:Yuuser',
+'grouppage-bot' => '{{ns:project}}:Waddefresser',
 'grouppage-sysop' => '{{ns:project}}:Verwalter',
 
 # Rights
-'right-read'     => 'Bledder lese',
-'right-edit'     => 'Bledder ennere',
-'right-move'     => 'Bledder ziehe',
+'right-read' => 'Bledder lese',
+'right-edit' => 'Bledder ennere',
+'right-move' => 'Bledder ziehe',
 'right-movefile' => 'Feils ziehe',
-'right-upload'   => 'Feils nuffdraage',
+'right-upload' => 'Feils nuffdraage',
 'right-writeapi' => 'Yuus vun write API',
-'right-delete'   => 'Bledder lesche',
+'right-delete' => 'Bledder lesche',
 
 # User rights log
 'rightsnone' => '(ken)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read'     => 'es Blatt zu lese',
-'action-edit'     => 'des Blatt zu ennere',
-'action-move'     => 'des Blatt zu ziehe',
+'action-read' => 'es Blatt zu lese',
+'action-edit' => 'des Blatt zu ennere',
+'action-move' => 'des Blatt zu ziehe',
 'action-movefile' => 'Des Feil ziehe',
-'action-upload'   => 'Des Feil ufflaade',
-'action-delete'   => 'des Blatt zu verwische',
+'action-upload' => 'Des Feil ufflaade',
+'action-delete' => 'des Blatt zu verwische',
 
 # Recent changes
-'nchanges'                  => '$1 {{PLURAL:$1|Ennering|Enneringe}}',
-'recentchanges'             => 'Was mer letscht geduh henn',
+'nchanges' => '$1 {{PLURAL:$1|Ennering|Enneringe}}',
+'recentchanges' => 'Was mer letscht geduh henn',
 'recentchanges-label-minor' => 'Gleene Ennering',
-'recentchanges-label-bot'   => 'Ennering vun em Waddefresser',
-'rcshowhideminor'           => 'Gleene Enneringe $1',
-'rcshowhidebots'            => 'Bots $1',
-'rcshowhideanons'           => 'IP-Yuuser $1',
-'rcshowhidemine'            => 'Mei Ardickele $1',
-'rclinks'                   => 'Zeig die letscht $1 Enneringe vun de letscht $2 Daag.<br />$3',
-'diff'                      => 'Unnerschidd',
-'hist'                      => 'Gschicht',
-'hide'                      => 'verschwinne losse',
-'show'                      => 'zeige',
-'minoreditletter'           => 'g',
-'newpageletter'             => 'N',
-'boteditletter'             => 'W',
-'rc_categories_any'         => 'All',
-'rc-change-size-new'        => '$1 {{PLURAL:$1|Beit|Beit}} nooch daer Ennering',
-'newsectionsummary'         => 'Neier Abschnitt /* $1 */',
+'recentchanges-label-bot' => 'Ennering vun em Waddefresser',
+'rcshowhideminor' => 'Gleene Enneringe $1',
+'rcshowhidebots' => 'Bots $1',
+'rcshowhideanons' => 'IP-Yuuser $1',
+'rcshowhidemine' => 'Mei Ardickele $1',
+'rclinks' => 'Zeig die letscht $1 Enneringe vun de letscht $2 Daag.<br />$3',
+'diff' => 'Unnerschidd',
+'hist' => 'Gschicht',
+'hide' => 'verschwinne losse',
+'show' => 'zeige',
+'minoreditletter' => 'g',
+'newpageletter' => 'N',
+'boteditletter' => 'W',
+'rc_categories_any' => 'All',
+'rc-change-size-new' => '$1 {{PLURAL:$1|Beit|Beit}} nooch daer Ennering',
+'newsectionsummary' => 'Neier Abschnitt /* $1 */',
 
 # Recent changes linked
-'recentchangeslinked'      => 'Was on verlinkde Bledder geduh warre iss',
+'recentchangeslinked' => 'Was on verlinkde Bledder geduh warre iss',
 'recentchangeslinked-page' => 'Blatt:',
 
 # Upload
-'upload'             => 'Nuffdraage',
-'uploadbtn'          => 'Feil nuffdraage',
-'uploadlogpage'      => 'Feil-Lochbuch',
-'filename'           => 'Feilnaame',
-'badfilename'        => 'Daer Feilnaame iss gennert warre nooch „$1“.',
-'savefile'           => 'Feil beilege',
-'uploadedimage'      => 'hot „[[$1]]“ uffglaade',
-'overwroteimage'     => 'hot e neie Version vun „[[$1]]“ uffglaade',
-'uploaddisabled'     => 'Ufflaade verbodde',
+'upload' => 'Nuffdraage',
+'uploadbtn' => 'Feil nuffdraage',
+'uploadlogpage' => 'Feil-Lochbuch',
+'filename' => 'Feilnaame',
+'badfilename' => 'Daer Feilnaame iss gennert warre nooch „$1“.',
+'savefile' => 'Feil beilege',
+'uploadedimage' => 'hot „[[$1]]“ uffglaade',
+'overwroteimage' => 'hot e neie Version vun „[[$1]]“ uffglaade',
+'uploaddisabled' => 'Ufflaade verbodde',
 'uploaddisabledtext' => 'Es Ufflaade vun Feils iss verbodde.',
-'watchthisupload'    => 'Watsch des Blatt',
+'watchthisupload' => 'Watsch des Blatt',
 
-'upload-file-error'   => 'Interner Fehler',
+'upload-file-error' => 'Interner Fehler',
 'upload-unknown-size' => 'Unbekannte Grees',
-'upload-http-error'   => 'En HTTP-Fehler iss kumme: $1',
+'upload-http-error' => 'En HTTP-Fehler iss kumme: $1',
 
 # File backend
 'backend-fail-backup' => 'Des Feil $1 iss net zwettgmacht warre.',
@@ -550,41 +549,41 @@ Paesswatt fer nau: $2',
 'upload_source_file' => ' (e Feil uff deim Waddefresser)',
 
 # Special:ListFiles
-'imgfile'         => 'Feil',
-'listfiles'       => 'Lischt vun Feils',
-'listfiles_date'  => 'Datum',
-'listfiles_name'  => 'Naame',
-'listfiles_user'  => 'Yuuser',
-'listfiles_size'  => 'Grees',
+'imgfile' => 'Feil',
+'listfiles' => 'Lischt vun Feils',
+'listfiles_date' => 'Datum',
+'listfiles_name' => 'Naame',
+'listfiles_user' => 'Yuuser',
+'listfiles_size' => 'Grees',
 'listfiles_count' => 'Versione',
 
 # File description page
-'file-anchor-link'    => 'Feil',
-'filehist'            => 'Versione vun Feils',
-'filehist-deleteall'  => 'All Versione lösche',
-'filehist-deleteone'  => 'Sell Version verwische',
-'filehist-revert'     => 'zerick',
-'filehist-datetime'   => 'Version vum',
-'filehist-thumb'      => 'Glee Pikder',
-'filehist-user'       => 'Yuuser',
+'file-anchor-link' => 'Feil',
+'filehist' => 'Versione vun Feils',
+'filehist-deleteall' => 'All Versione lösche',
+'filehist-deleteone' => 'Sell Version verwische',
+'filehist-revert' => 'zerick',
+'filehist-datetime' => 'Version vum',
+'filehist-thumb' => 'Glee Pikder',
+'filehist-user' => 'Yuuser',
 'filehist-dimensions' => 'Grees',
-'filehist-filesize'   => 'Grees vum Feil',
-'filehist-comment'    => 'Aamaericking',
-'imagelinks'          => 'Yuus vun dem Feil',
-'shared-repo-from'    => 'vun $1',
+'filehist-filesize' => 'Grees vum Feil',
+'filehist-comment' => 'Aamaericking',
+'imagelinks' => 'Yuus vun dem Feil',
+'shared-repo-from' => 'vun $1',
 
 # File reversion
 'filerevert-comment' => 'Grund:',
-'filerevert-submit'  => 'Zerick',
+'filerevert-submit' => 'Zerick',
 
 # File deletion
-'filedelete'                  => 'Lösche „$1“',
-'filedelete-comment'          => 'Grund:',
-'filedelete-submit'           => 'Verwische',
-'filedelete-nofile'           => "'''„$1“''' gebt es net.",
-'filedelete-otherreason'      => 'Annere Grind dezu:',
+'filedelete' => 'Lösche „$1“',
+'filedelete-comment' => 'Grund:',
+'filedelete-submit' => 'Verwische',
+'filedelete-nofile' => "'''„$1“''' gebt es net.",
+'filedelete-otherreason' => 'Annere Grind dezu:',
 'filedelete-reason-otherlist' => 'Annerer Gund',
-'filedelete-edit-reasonlist'  => "Grind fer's Lesche ennere",
+'filedelete-edit-reasonlist' => "Grind fer's Lesche ennere",
 
 # MIME search
 'download' => 'Runnerlaade',
@@ -599,327 +598,327 @@ Paesswatt fer nau: $2',
 'randomredirect' => 'Random Weiderleiding',
 
 # Statistics
-'statistics'              => 'Nummere',
+'statistics' => 'Nummere',
 'statistics-header-pages' => 'Nummere vun Bledder',
 'statistics-header-edits' => 'Nummere vun Enneringe',
 'statistics-header-users' => 'Nummere vun Yuuser',
-'statistics-pages'        => 'Bledder',
+'statistics-pages' => 'Bledder',
 
-'doubleredirects'       => 'Zweefache Weiderleidinge',
+'doubleredirects' => 'Zweefache Weiderleidinge',
 'double-redirect-fixer' => 'Xqbot',
 
-'brokenredirects'        => 'Kaputte Weiderleidinge',
-'brokenredirects-edit'   => 'ennere',
+'brokenredirects' => 'Kaputte Weiderleidinge',
+'brokenredirects-edit' => 'ennere',
 'brokenredirects-delete' => 'verwische',
 
 'withoutinterwiki-submit' => 'Zeig',
 
 # Miscellaneous special pages
-'nbytes'            => '$1 {{PLURAL:$1|Beit|Beit}}',
-'ncategories'       => '$1 {{PLURAL:$1|Abdeeling|Abdeelinge}}',
-'nlinks'            => '{{PLURAL:$1|1 Gleecher|$1 Gleecher}}',
-'nimagelinks'       => 'Gyuust uff $1 {{PLURAL:$1|Blatt|Bledder}}',
-'ntransclusions'    => 'gyuust uff $1 {{PLURAL:$1|Blatt|Bledder}}',
-'shortpages'        => 'Glee Bledder',
-'longpages'         => 'Grosse Bledder',
-'listusers'         => 'Lischt vun Yuuser',
-'usereditcount'     => '$1 {{PLURAL:$1|Ennering|Enneringe}}',
-'newpages'          => 'Neie Bledder',
+'nbytes' => '$1 {{PLURAL:$1|Beit|Beit}}',
+'ncategories' => '$1 {{PLURAL:$1|Abdeeling|Abdeelinge}}',
+'nlinks' => '{{PLURAL:$1|1 Gleecher|$1 Gleecher}}',
+'nimagelinks' => 'Gyuust uff $1 {{PLURAL:$1|Blatt|Bledder}}',
+'ntransclusions' => 'gyuust uff $1 {{PLURAL:$1|Blatt|Bledder}}',
+'shortpages' => 'Glee Bledder',
+'longpages' => 'Grosse Bledder',
+'listusers' => 'Lischt vun Yuuser',
+'usereditcount' => '$1 {{PLURAL:$1|Ennering|Enneringe}}',
+'newpages' => 'Neie Bledder',
 'newpages-username' => 'Yuuser-Naame:',
-'ancientpages'      => 'Eldere Bledder',
-'move'              => 'Ziehe',
-'movethispage'      => 'Blatt ziehe',
-'pager-newer-n'     => '{{PLURAL:$1|neegscht|neegscht $1}}',
-'pager-older-n'     => '{{PLURAL:$1|letscht|letscht $1}}',
+'ancientpages' => 'Eldere Bledder',
+'move' => 'Ziehe',
+'movethispage' => 'Blatt ziehe',
+'pager-newer-n' => '{{PLURAL:$1|neegscht|neegscht $1}}',
+'pager-older-n' => '{{PLURAL:$1|letscht|letscht $1}}',
 
 # Book sources
 'booksources-go' => 'Uffgucke',
 
 # Special:Log
-'specialloguserlabel'  => 'Yuuser:',
+'specialloguserlabel' => 'Yuuser:',
 'speciallogtitlelabel' => 'Titel:',
-'log'                  => 'Logbicher',
+'log' => 'Logbicher',
 
 # Special:AllPages
-'allpages'          => 'Alle Bledder',
-'alphaindexline'    => '$1 bis $2',
-'nextpage'          => 'Neegschtes Blatt ($1)',
-'prevpage'          => 'Letscht Blatt ($1)',
-'allarticles'       => 'Alle Bledder',
-'allinnamespace'    => 'Alle Bledder (Blatznaame: $1)',
+'allpages' => 'Alle Bledder',
+'alphaindexline' => '$1 bis $2',
+'nextpage' => 'Neegschtes Blatt ($1)',
+'prevpage' => 'Letscht Blatt ($1)',
+'allarticles' => 'Alle Bledder',
+'allinnamespace' => 'Alle Bledder (Blatznaame: $1)',
 'allnotinnamespace' => 'Alle Bledder (net vun $1 Blatznaame)',
-'allpagesprev'      => 'Letscht',
-'allpagesnext'      => 'Neegschte',
-'allpagessubmit'    => 'Zeige',
-'allpages-bad-ns'   => '{{SITENAME}} hot ken Blatznaame „$1“.',
+'allpagesprev' => 'Letscht',
+'allpagesnext' => 'Neegschte',
+'allpagessubmit' => 'Zeige',
+'allpages-bad-ns' => '{{SITENAME}} hot ken Blatznaame „$1“.',
 
 # Special:Categories
 'categories' => 'Abdeelinge',
 
 # Special:LinkSearch
-'linksearch'    => 'Gewebbgleecher uffgucke',
+'linksearch' => 'Gewebbgleecher uffgucke',
 'linksearch-ns' => 'Blatznaame:',
 'linksearch-ok' => 'Uffgucke',
 
 # Special:ListUsers
-'listusers-submit'   => 'Zeig',
+'listusers-submit' => 'Zeig',
 'listusers-noresult' => 'Ken Yuuser gfunne.',
 
 # Special:ActiveUsers
-'activeusers-hidebots'   => 'Waddefresser verschwinne losse',
+'activeusers-hidebots' => 'Waddefresser verschwinne losse',
 'activeusers-hidesysops' => 'Verwalter verschwinne losse',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Logbuch vun neie Yuuser',
 
 # Special:ListGroupRights
-'listgrouprights'              => 'Rechte vun Yuuser-Druppe',
-'listgrouprights-group'        => 'Druppe',
-'listgrouprights-rights'       => 'Rechte',
-'listgrouprights-helppage'     => 'Help:Rechte vun Druppe',
-'listgrouprights-members'      => '(Lischt vun Mitglieder)',
-'listgrouprights-addgroup'     => 'Yuuser zu {{PLURAL:$2|daer Druppe|denne Druppe}} dezu duh: $1',
+'listgrouprights' => 'Rechte vun Yuuser-Druppe',
+'listgrouprights-group' => 'Druppe',
+'listgrouprights-rights' => 'Rechte',
+'listgrouprights-helppage' => 'Help:Rechte vun Druppe',
+'listgrouprights-members' => '(Lischt vun Mitglieder)',
+'listgrouprights-addgroup' => 'Yuuser zu {{PLURAL:$2|daer Druppe|denne Druppe}} dezu duh: $1',
 'listgrouprights-addgroup-all' => 'Yuuser zu alle Druppe dezu duh',
 
 # E-mail user
-'emailuser'       => 'E-Poschd fer den Yuuser',
+'emailuser' => 'E-Poschd fer den Yuuser',
 'defemailsubject' => '{{SITENAME}} - E-Poschde vun Yuuser „$1“',
-'emailusername'   => 'Yuuser-Naame:',
-'emailfrom'       => 'Vun:',
-'emailto'         => 'Fer:',
-'emailsend'       => 'Schicke',
-'emailsent'       => 'E-Poscht naus gschickt',
+'emailusername' => 'Yuuser-Naame:',
+'emailfrom' => 'Vun:',
+'emailto' => 'Fer:',
+'emailsend' => 'Schicke',
+'emailsent' => 'E-Poscht naus gschickt',
 
 # Watchlist
-'watchlist'         => 'Mei Watsch-Lischt',
-'mywatchlist'       => 'Mei Watsch-Lischt',
-'watchlistfor2'     => 'Vun $1 $2',
-'watch'             => 'watsche',
-'watchthispage'     => 'watsch des Blatt',
-'unwatch'           => 'Nimmi watsche',
-'unwatchthispage'   => 'Nimmi watsche',
-'notanarticle'      => 'Ken Blatt',
+'watchlist' => 'Mei Watsch-Lischt',
+'mywatchlist' => 'Mei Watsch-Lischt',
+'watchlistfor2' => 'Vun $1 $2',
+'watch' => 'watsche',
+'watchthispage' => 'watsch des Blatt',
+'unwatch' => 'Nimmi watsche',
+'unwatchthispage' => 'Nimmi watsche',
+'notanarticle' => 'Ken Blatt',
 'watchlist-details' => '{{PLURAL:$1|$1 Blatt|$1 Bledder}} uff dei Watch-Lischt, ohne Gschwetz-Bledder',
 'watchlistcontains' => 'Dei Watsch-Lischt hot $1 {{PLURAL:$1|Blatt|Bledder}}.',
-'wlshowlast'        => 'Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder $3.',
+'wlshowlast' => 'Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder $3.',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Watsche…',
+'watching' => 'Watsche…',
 'unwatching' => 'Nimmi watsche...',
 
-'enotif_newpagetext'           => 'Sell iss en neies Blatt.',
+'enotif_newpagetext' => 'Sell iss en neies Blatt.',
 'enotif_impersonal_salutation' => '{{SITENAME}}-Yuuser',
-'changed'                      => 'gennert',
+'changed' => 'gennert',
 
 # Delete
-'deletepage'             => 'Blatt lesche',
-'exblank'                => 'Blatt war leer',
-'delete-confirm'         => 'Lesche vun „$1“',
-'delete-legend'          => 'Verwische',
-'deletedtext'            => '"$1" iss gelescht warre.
+'deletepage' => 'Blatt lesche',
+'exblank' => 'Blatt war leer',
+'delete-confirm' => 'Lesche vun „$1“',
+'delete-legend' => 'Verwische',
+'deletedtext' => '"$1" iss gelescht warre.
 Guck $2 fer e Lischt vun de letscht Leschunge.',
-'dellogpage'             => 'Lischt vun gelöschte Bledder',
-'deletecomment'          => 'Grund:',
-'deleteotherreason'      => 'Annre Grind:',
-'deletereasonotherlist'  => 'Annerer Grund',
+'dellogpage' => 'Lischt vun gelöschte Bledder',
+'deletecomment' => 'Grund:',
+'deleteotherreason' => 'Annre Grind:',
+'deletereasonotherlist' => 'Annerer Grund',
 'delete-edit-reasonlist' => "Grind fer's Lesche ennere",
 
 # Protect
-'prot_1movedto2'            => 'hot „[[$1]]“ nooch „[[$2]]“ gezoge',
-'protectcomment'            => 'Grund:',
-'protect-default'           => 'All Yuuser',
-'protect-level-sysop'       => 'Nur Verwalter',
-'protect-expiring'          => 'bis $2, $3 Uhr (UTC)',
+'prot_1movedto2' => 'hot „[[$1]]“ nooch „[[$2]]“ gezoge',
+'protectcomment' => 'Grund:',
+'protect-default' => 'All Yuuser',
+'protect-level-sysop' => 'Nur Verwalter',
+'protect-expiring' => 'bis $2, $3 Uhr (UTC)',
 'protect-expiry-indefinite' => 'fer immer',
-'protect-othertime'         => 'Annere Zeit:',
-'protect-othertime-op'      => 'annere Zeit',
-'protect-otherreason'       => 'Annerer Grund:',
-'protect-otherreason-op'    => 'Annerer Grund',
-'protect-expiry-options'    => '1 Schtund:1 hour,1 Daag:1 day,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Munede:6 months,1 Yaar:1 year,Fer immer:infinite',
-'minimum-size'              => 'Min. Grees',
-'maximum-size'              => 'Max. Grees:',
-'pagesize'                  => '(Beit)',
+'protect-othertime' => 'Annere Zeit:',
+'protect-othertime-op' => 'annere Zeit',
+'protect-otherreason' => 'Annerer Grund:',
+'protect-otherreason-op' => 'Annerer Grund',
+'protect-expiry-options' => '1 Schtund:1 hour,1 Daag:1 day,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Munede:6 months,1 Yaar:1 year,Fer immer:infinite',
+'minimum-size' => 'Min. Grees',
+'maximum-size' => 'Max. Grees:',
+'pagesize' => '(Beit)',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Ennere/Tscheensche',
-'restriction-move'   => 'Ziehe',
+'restriction-edit' => 'Ennere/Tscheensche',
+'restriction-move' => 'Ziehe',
 'restriction-create' => 'Schtaerte',
 'restriction-upload' => 'Ufflaade',
 
 # Undelete
-'undeleteviewlink'          => 'aagucke',
-'undeletecomment'           => 'Grund:',
-'undelete-search-submit'    => 'Guck uff',
+'undeleteviewlink' => 'aagucke',
+'undeletecomment' => 'Grund:',
+'undelete-search-submit' => 'Guck uff',
 'undelete-show-file-submit' => 'Ya',
 
 # Namespace form on various pages
-'namespace'      => 'Blatznaame:',
+'namespace' => 'Blatznaame:',
 'blanknamespace' => '(Bledder)',
 
 # Contributions
-'contributions'       => 'Ardickele vum Yuuser',
+'contributions' => 'Ardickele vum Yuuser',
 'contributions-title' => 'Ardickele vun „$1“',
-'mycontris'           => 'Mei Ardickele',
-'contribsub2'         => 'Fer $1 ($2)',
-'uctop'               => '(ewwerscht)',
-'month'               => 'unn Munet:',
-'year'                => 'bis Yaahr:',
-
-'sp-contributions-talk'     => 'Gschwetz',
-'sp-contributions-search'   => 'Guck fer Ardickel',
+'mycontris' => 'Mei Ardickele',
+'contribsub2' => 'Fer $1 ($2)',
+'uctop' => '(ewwerscht)',
+'month' => 'unn Munet:',
+'year' => 'bis Yaahr:',
+
+'sp-contributions-talk' => 'Gschwetz',
+'sp-contributions-search' => 'Guck fer Ardickel',
 'sp-contributions-username' => 'IP-Adress odder Yuusernaame:',
-'sp-contributions-submit'   => 'Guck uff',
+'sp-contributions-submit' => 'Guck uff',
 
 # What links here
-'whatlinkshere'            => 'Was doher zeigt',
-'whatlinkshere-page'       => 'Blatt:',
-'isredirect'               => 'Weiderleidingsblatt',
-'isimage'                  => 'Gleecher fer Feil',
-'whatlinkshere-prev'       => '{{PLURAL:$1|letscht|letscht $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|neegschter|neegschte $1}}',
-'whatlinkshere-links'      => '← Gleecher',
+'whatlinkshere' => 'Was doher zeigt',
+'whatlinkshere-page' => 'Blatt:',
+'isredirect' => 'Weiderleidingsblatt',
+'isimage' => 'Gleecher fer Feil',
+'whatlinkshere-prev' => '{{PLURAL:$1|letscht|letscht $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|neegschter|neegschte $1}}',
+'whatlinkshere-links' => '← Gleecher',
 'whatlinkshere-hideredirs' => 'Weiderleidinge $1',
-'whatlinkshere-hidelinks'  => 'Gleecher $1',
+'whatlinkshere-hidelinks' => 'Gleecher $1',
 'whatlinkshere-hideimages' => 'Feil Gleecher $1',
 
 # Block/unblock
-'block'              => 'Yuuser aabinne',
-'blockip'            => 'Yuuser aabinne',
-'blockip-title'      => 'Yuuser aabinne',
-'blockip-legend'     => 'Yuuser aabinne',
+'block' => 'Yuuser aabinne',
+'blockip' => 'Yuuser aabinne',
+'blockip-title' => 'Yuuser aabinne',
+'blockip-legend' => 'Yuuser aabinne',
 'ipadressorusername' => 'IP-Adress odder Yuusernaame:',
-'ipbreason'          => 'Grund:',
+'ipbreason' => 'Grund:',
 'ipbreasonotherlist' => 'Annerer Grund',
-'ipbsubmit'          => 'Daen Yuuser aabinne',
-'ipbother'           => 'Annere Zeit (englisch):',
-'ipboptions'         => '2 Schtund:2 hours,1 Daag:1 day,3 Daag:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Monate:6 months,1 Yaar:1 year,Fer immer:infinite',
-'ipbotheroption'     => 'Anneres',
-'ipbotherreason'     => 'Annerer Grund:',
-'blocklist-reason'   => 'Grund',
+'ipbsubmit' => 'Daen Yuuser aabinne',
+'ipbother' => 'Annere Zeit (englisch):',
+'ipboptions' => '2 Schtund:2 hours,1 Daag:1 day,3 Daag:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Monate:6 months,1 Yaar:1 year,Fer immer:infinite',
+'ipbotheroption' => 'Anneres',
+'ipbotherreason' => 'Annerer Grund:',
+'blocklist-reason' => 'Grund',
 'ipblocklist-submit' => 'Guck uff',
-'infiniteblock'      => 'fer immer',
-'blocklink'          => 'Aabinne',
-'contribslink'       => 'Ardickele',
-'proxyblocksuccess'  => 'Geduh.',
+'infiniteblock' => 'fer immer',
+'blocklink' => 'Aabinne',
+'contribslink' => 'Ardickele',
+'proxyblocksuccess' => 'Geduh.',
 
 # Move page
-'move-page'               => '„$1“ ziehe',
-'move-page-legend'        => 'Blatt ziehe',
-'movearticle'             => 'Blatt ziehe:',
-'move-watch'              => 'watsch des Blatt',
-'movepagebtn'             => 'Blatt ziehe',
-'pagemovedsub'            => 'Blatt iss gezoge warre',
-'movepage-moved'          => "'''Es Blatt „$1“ iss gezoge warre uff „$2“'''",
-'movedto'                 => 'gezoge uff',
-'movereason'              => 'Grund:',
-'revertmove'              => 'zerick ziehe',
+'move-page' => '„$1“ ziehe',
+'move-page-legend' => 'Blatt ziehe',
+'movearticle' => 'Blatt ziehe:',
+'move-watch' => 'watsch des Blatt',
+'movepagebtn' => 'Blatt ziehe',
+'pagemovedsub' => 'Blatt iss gezoge warre',
+'movepage-moved' => "'''Es Blatt „$1“ iss gezoge warre uff „$2“'''",
+'movedto' => 'gezoge uff',
+'movereason' => 'Grund:',
+'revertmove' => 'zerick ziehe',
 'delete_and_move_confirm' => 'Ya, es Blatt lösche',
 
 # Export
-'export'          => 'Bledder exportiere',
-'export-addcat'   => 'Dezu duh',
-'export-addns'    => 'Dezu duh',
+'export' => 'Bledder exportiere',
+'export-addcat' => 'Dezu duh',
+'export-addns' => 'Dezu duh',
 'export-download' => 'As XML-Feil annelege',
 
 # Namespace 8 related
-'allmessagesname'               => 'Naame',
+'allmessagesname' => 'Naame',
 'allmessages-filter-unmodified' => 'Net gennert',
-'allmessages-filter-all'        => 'All',
-'allmessages-filter-modified'   => 'Gennert',
-'allmessages-language'          => 'Schprooch:',
-'allmessages-filter-submit'     => 'Los',
+'allmessages-filter-all' => 'All',
+'allmessages-filter-modified' => 'Gennert',
+'allmessages-language' => 'Schprooch:',
+'allmessages-filter-submit' => 'Los',
 
 # Thumbnails
 'thumbnail-more' => 'greeser mache',
 
 # Special:Import
 'import-upload-filename' => 'Feilnaame:',
-'import-comment'         => 'Aamaerricking:',
-'import-revision-count'  => '– {{PLURAL:$1|1 Version|$1 Versione}}',
+'import-comment' => 'Aamaerricking:',
+'import-revision-count' => '– {{PLURAL:$1|1 Version|$1 Versione}}',
 
 # Import log
-'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|Version|Versione}}',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|Version|Versione}}',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|Version|Versione}} vun $2',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Dei Yuuser-Blatt',
-'tooltip-pt-mytalk'              => 'Dei Gschwetz-Blatt',
-'tooltip-pt-preferences'         => 'Mei Uffschtelling',
-'tooltip-pt-mycontris'           => 'Lischt vun deine Ardickel',
-'tooltip-pt-login'               => 'Du kannscht Dich aamelde, awwer du muschts net',
-'tooltip-pt-logout'              => 'Geh naus',
-'tooltip-ca-talk'                => 'Iwwer sell Blatt dischbediere',
-'tooltip-ca-edit'                => 'Du kannscht des Blatt ennere. Bitte brauch de Aaguck-Gnopp vor em Speichere.',
-'tooltip-ca-history'             => 'Ledschde Versione vun dem Blattt',
-'tooltip-ca-protect'             => 'Des Blatt schitze',
-'tooltip-ca-delete'              => 'Des Blatt verwische',
-'tooltip-ca-move'                => 'Des Blatt ziehe',
-'tooltip-search'                 => 'Guck uff {{SITENAME}}',
-'tooltip-search-go'              => 'Geh zu dem Blatt mit genaa dem Naame, wenns es gebbt.',
-'tooltip-search-fulltext'        => 'Guck nooch Bledder mit denne Wadde',
-'tooltip-p-logo'                 => 'Haaptblatt',
-'tooltip-n-mainpage'             => 'Zum Haaptblatt geh',
+'tooltip-pt-userpage' => 'Dei Yuuser-Blatt',
+'tooltip-pt-mytalk' => 'Dei Gschwetz-Blatt',
+'tooltip-pt-preferences' => 'Mei Uffschtelling',
+'tooltip-pt-mycontris' => 'Lischt vun deine Ardickel',
+'tooltip-pt-login' => 'Du kannscht Dich aamelde, awwer du muschts net',
+'tooltip-pt-logout' => 'Geh naus',
+'tooltip-ca-talk' => 'Iwwer sell Blatt dischbediere',
+'tooltip-ca-edit' => 'Du kannscht des Blatt ennere. Bitte brauch de Aaguck-Gnopp vor em Speichere.',
+'tooltip-ca-history' => 'Ledschde Versione vun dem Blattt',
+'tooltip-ca-protect' => 'Des Blatt schitze',
+'tooltip-ca-delete' => 'Des Blatt verwische',
+'tooltip-ca-move' => 'Des Blatt ziehe',
+'tooltip-search' => 'Guck uff {{SITENAME}}',
+'tooltip-search-go' => 'Geh zu dem Blatt mit genaa dem Naame, wenns es gebbt.',
+'tooltip-search-fulltext' => 'Guck nooch Bledder mit denne Wadde',
+'tooltip-p-logo' => 'Haaptblatt',
+'tooltip-n-mainpage' => 'Zum Haaptblatt geh',
 'tooltip-n-mainpage-description' => 'Haaptblatt bsuche',
-'tooltip-n-portal'               => 'Iwwers Projekt, was de duhn kannscht, wo de ebbes finnscht',
-'tooltip-n-recentchanges'        => 'D Lischt vun de letschte Enneringe in dem Wiki',
-'tooltip-n-randompage'           => 'Ennich Ardickel',
-'tooltip-n-help'                 => 'Hilf-Blatt zeige',
-'tooltip-t-whatlinkshere'        => 'Lischt vun all die Bledder, wu do her zeige',
-'tooltip-t-recentchangeslinked'  => 'Letschte Enneringe in Bledder, wu vun do verlinkt sinn',
-'tooltip-feed-rss'               => 'RSS-Feed fer des Blatt',
-'tooltip-feed-atom'              => 'Atom-Feed fer des Blatt',
-'tooltip-t-contributions'        => 'Lischt von Ardickele vun dem Yuuser zeige',
-'tooltip-t-emailuser'            => 'Dem Yuuser e E-Poschd schicke',
-'tooltip-t-upload'               => 'Feils nuffdraage',
-'tooltip-t-specialpages'         => 'Lischt vun alle besunnere Bledder',
-'tooltip-t-print'                => 'Des Blatt fer zum Drucke',
-'tooltip-t-permalink'            => 'En permanent Gleecher zu derre Version vun dem Blatt',
-'tooltip-ca-nstab-main'          => 'Inhalt vun dem Blatt aagucke',
-'tooltip-ca-nstab-user'          => 'Yuuserblatt zeige',
-'tooltip-ca-nstab-special'       => 'Sell iss en besunneres Blatt. Du kannscht es Blatt net ennere.',
-'tooltip-ca-nstab-image'         => 'Feil zeige',
-'tooltip-ca-nstab-template'      => 'Moddel aagucke',
-'tooltip-save'                   => 'Enneringe beilege',
+'tooltip-n-portal' => 'Iwwers Projekt, was de duhn kannscht, wo de ebbes finnscht',
+'tooltip-n-recentchanges' => 'D Lischt vun de letschte Enneringe in dem Wiki',
+'tooltip-n-randompage' => 'Ennich Ardickel',
+'tooltip-n-help' => 'Hilf-Blatt zeige',
+'tooltip-t-whatlinkshere' => 'Lischt vun all die Bledder, wu do her zeige',
+'tooltip-t-recentchangeslinked' => 'Letschte Enneringe in Bledder, wu vun do verlinkt sinn',
+'tooltip-feed-rss' => 'RSS-Feed fer des Blatt',
+'tooltip-feed-atom' => 'Atom-Feed fer des Blatt',
+'tooltip-t-contributions' => 'Lischt von Ardickele vun dem Yuuser zeige',
+'tooltip-t-emailuser' => 'Dem Yuuser e E-Poschd schicke',
+'tooltip-t-upload' => 'Feils nuffdraage',
+'tooltip-t-specialpages' => 'Lischt vun alle besunnere Bledder',
+'tooltip-t-print' => 'Des Blatt fer zum Drucke',
+'tooltip-t-permalink' => 'En permanent Gleecher zu derre Version vun dem Blatt',
+'tooltip-ca-nstab-main' => 'Inhalt vun dem Blatt aagucke',
+'tooltip-ca-nstab-user' => 'Yuuserblatt zeige',
+'tooltip-ca-nstab-special' => 'Sell iss en besunneres Blatt. Du kannscht es Blatt net ennere.',
+'tooltip-ca-nstab-image' => 'Feil zeige',
+'tooltip-ca-nstab-template' => 'Moddel aagucke',
+'tooltip-save' => 'Enneringe beilege',
 
 # Attribution
-'siteuser'  => '{{SITENAME}}-Yuuser $1',
-'others'    => 'annere',
+'siteuser' => '{{SITENAME}}-Yuuser $1',
+'others' => 'annere',
 'siteusers' => '{{SITENAME}}-{{PLURAL:$2|Yuuser|Yuuser}} $1',
 
 # Info page
-'pageinfo-header-edits'     => 'Enneringe',
+'pageinfo-header-edits' => 'Enneringe',
 'pageinfo-header-watchlist' => 'Watsch-Lischt',
-'pageinfo-subjectpage'      => 'Blatt',
-'pageinfo-talkpage'         => 'Gschwetz-Blatt',
+'pageinfo-subjectpage' => 'Blatt',
+'pageinfo-talkpage' => 'Gschwetz-Blatt',
 
 # Browsing diffs
 'nextdiff' => 'Zum neegschte Versionsunnerschidd →',
 
 # Media information
 'widthheightpage' => '$1 × $2, {{PLURAL:$3|1 Blatt|$3 Bledder}}',
-'file-info-size'  => '$1 × $2 Pixel, Daadegrees: $3, MIME-Typ: $4',
+'file-info-size' => '$1 × $2 Pixel, Daadegrees: $3, MIME-Typ: $4',
 
 # Special:NewFiles
 'showhidebots' => '(Bots $1)',
-'noimages'     => 'Keene Feils gfunne.',
-'ilsubmit'     => 'Guck uff',
+'noimages' => 'Keene Feils gfunne.',
+'ilsubmit' => 'Guck uff',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|$1 Sekund|$1 Sekunde}}',
 'minutes' => '{{PLURAL:$1|$1 Minudd|$1 Minudde}}',
-'hours'   => '{{PLURAL:$1|ee Schtund|$1 Schtunde}}',
-'days'    => '{{PLURAL:$1|een Daag|$1 Daag}}',
-'ago'     => 'vor $1',
+'hours' => '{{PLURAL:$1|ee Schtund|$1 Schtunde}}',
+'days' => '{{PLURAL:$1|een Daag|$1 Daag}}',
+'ago' => 'vor $1',
 
 # Metadata
 'metadata' => 'Metadaade',
 
 # EXIF tags
-'exif-imagelength'  => 'Leng',
-'exif-software'     => 'Geyuust Software',
-'exif-usercomment'  => 'Anmaerrickinge vun Yuuser',
-'exif-gpsaltitude'  => 'Heech',
-'exif-writer'       => 'Schreiwer',
+'exif-imagelength' => 'Leng',
+'exif-software' => 'Geyuust Software',
+'exif-usercomment' => 'Anmaerrickinge vun Yuuser',
+'exif-gpsaltitude' => 'Heech',
+'exif-writer' => 'Schreiwer',
 'exif-languagecode' => 'Schprooch',
 
 'exif-subjectdistance-value' => '$1 Meter',
@@ -933,8 +932,8 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'all',
 'namespacesall' => 'all',
-'monthsall'     => 'all',
-'limitall'      => 'all',
+'monthsall' => 'all',
+'limitall' => 'all',
 
 # Scary transclusion
 'scarytranscludetoolong' => '[URL iss zu lang]',
@@ -943,31 +942,31 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'confirm_purge_button' => 'OK',
 
 # action=watch/unwatch
-'confirm-watch-button'   => 'OK',
+'confirm-watch-button' => 'OK',
 'confirm-unwatch-button' => 'OK',
 
 # Separators for various lists, etc.
 'ellipsis' => '…',
-'percent'  => '$1&nbsp;%',
+'percent' => '$1&nbsp;%',
 
 # Multipage image navigation
 'imgmultipageprev' => '← letscht Blatt',
 'imgmultipagenext' => 'neegschtes Blatt →',
-'imgmultigo'       => 'OK',
-'imgmultigoto'     => 'Geh zu Blatt $1',
+'imgmultigo' => 'OK',
+'imgmultigoto' => 'Geh zu Blatt $1',
 
 # Table pager
-'ascending_abbrev'         => 'uff',
-'descending_abbrev'        => 'ab',
-'table_pager_next'         => 'Neegschtes Blatt',
-'table_pager_prev'         => 'Letscht Blatt',
-'table_pager_first'        => 'Erschtes Blatt',
-'table_pager_last'         => 'Letscht Blatt',
+'ascending_abbrev' => 'uff',
+'descending_abbrev' => 'ab',
+'table_pager_next' => 'Neegschtes Blatt',
+'table_pager_prev' => 'Letscht Blatt',
+'table_pager_first' => 'Erschtes Blatt',
+'table_pager_last' => 'Letscht Blatt',
 'table_pager_limit_submit' => 'Geh los',
 
 # Auto-summaries
 'autosumm-blank' => 'Des Blatt iss leer gmacht worre.',
-'autosumm-new'   => 'Des Blatt is gschtaert warre: „$1“',
+'autosumm-new' => 'Des Blatt is gschtaert warre: „$1“',
 
 # Live preview
 'livepreview-loading' => 'Laade…',
@@ -976,38 +975,38 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'watchlistedit-normal-title' => 'Watsch-Lischt ennere',
 
 # Special:Version
-'version'                  => 'Version',
-'version-specialpages'     => 'Besunnere Bledder',
-'version-other'            => 'Anneres',
-'version-mediahandlers'    => 'Media-Haendlers',
-'version-version'          => '(Version $1)',
+'version' => 'Version',
+'version-specialpages' => 'Besunnere Bledder',
+'version-other' => 'Anneres',
+'version-mediahandlers' => 'Media-Haendlers',
+'version-version' => '(Version $1)',
 'version-poweredby-others' => 'annere',
 'version-software-version' => 'Version',
 
 # Special:FilePath
-'filepath'        => 'Feilpaad',
-'filepath-page'   => 'Feil:',
+'filepath' => 'Feilpaad',
+'filepath-page' => 'Feil:',
 'filepath-submit' => 'Geh',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'Feilnaame:',
-'fileduplicatesearch-submit'   => 'Uffgucke',
+'fileduplicatesearch-submit' => 'Uffgucke',
 
 # Special:SpecialPages
-'specialpages'                 => 'Besunnere Bledder',
-'specialpages-group-other'     => 'Annere besunnere Bledder',
-'specialpages-group-login'     => 'Kumm nei',
-'specialpages-group-users'     => 'Yuuser unn Rechte',
-'specialpages-group-pages'     => 'Lischde vun Bledder',
+'specialpages' => 'Besunnere Bledder',
+'specialpages-group-other' => 'Annere besunnere Bledder',
+'specialpages-group-login' => 'Kumm nei',
+'specialpages-group-users' => 'Yuuser unn Rechte',
+'specialpages-group-pages' => 'Lischde vun Bledder',
 'specialpages-group-pagetools' => 'Gscharr fer Bledder',
 'specialpages-group-redirects' => 'Besunnere Bledder wu weiderleide',
-'specialpages-group-spam'      => 'Spam-Gscharr',
+'specialpages-group-spam' => 'Spam-Gscharr',
 
 # Special:BlankPage
 'blankpage' => 'Leeres Blatt',
 
 # Special:Tags
-'tags-edit'     => 'ennere',
+'tags-edit' => 'ennere',
 'tags-hitcount' => '$1 {{PLURAL:$1|Ennering|Enneringe}}',
 
 # Special:ComparePages
@@ -1015,7 +1014,7 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 'compare-page2' => 'Blatt 2',
 
 # HTML forms
-'htmlform-reset'               => 'Enneringe losmache',
+'htmlform-reset' => 'Enneringe losmache',
 'htmlform-selectorother-other' => 'Annere',
 
 # Feedback
index bac0984..00b7cdc 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Als-Holder
  * @author M-sch
+ * @author Manuae
  * @author SPS
  * @author Xqt
  */
@@ -19,380 +20,394 @@ $messages = array(
 # User preference toggles
 'tog-showtoolbar' => "Werkzaich zum Bearwaide zaische (dodezu braucht's JavaScript)",
 
-'underline-always'  => 'Immer',
-'underline-never'   => 'Garnet',
+'underline-always' => 'Immer',
+'underline-never' => 'Garnet',
 'underline-default' => 'Des nemme, was em Broweser gsaacht hoscht.',
 
 # Dates
-'january'       => 'Jänner',
-'february'      => 'Fewwer',
-'march'         => 'März',
-'april'         => 'Abril',
-'may_long'      => 'Mai',
-'june'          => 'Juni',
-'july'          => 'Juli',
-'august'        => 'Auguscht',
-'september'     => 'Sebdember',
-'october'       => 'Ogdower',
-'november'      => 'November',
-'december'      => 'Dezember',
-'january-gen'   => 'Jänner',
-'february-gen'  => 'Fewwer',
-'march-gen'     => 'März',
-'april-gen'     => 'Abril',
-'may-gen'       => 'Mai',
-'june-gen'      => 'Juni',
-'july-gen'      => 'Juli',
-'august-gen'    => 'Auguscht',
+'january' => 'Jänner',
+'february' => 'Fewwer',
+'march' => 'März',
+'april' => 'Abril',
+'may_long' => 'Mai',
+'june' => 'Juni',
+'july' => 'Juli',
+'august' => 'Auguscht',
+'september' => 'Sebdember',
+'october' => 'Ogdower',
+'november' => 'November',
+'december' => 'Dezember',
+'january-gen' => 'Jänner',
+'february-gen' => 'Fewwer',
+'march-gen' => 'März',
+'april-gen' => 'Abril',
+'may-gen' => 'Mai',
+'june-gen' => 'Juni',
+'july-gen' => 'Juli',
+'august-gen' => 'Auguscht',
 'september-gen' => 'Sebdember',
-'october-gen'   => 'Ogdower',
-'november-gen'  => 'November',
-'december-gen'  => 'Dezember',
-'jan'           => 'Jän',
-'feb'           => 'Few',
-'mar'           => 'Mär',
-'apr'           => 'Abr',
-'may'           => 'Mai',
-'jun'           => 'Jun',
-'jul'           => 'Jul',
-'aug'           => 'Aug',
-'sep'           => 'Seb',
-'oct'           => 'Ogd',
-'nov'           => 'Nov',
-'dec'           => 'Dez',
+'october-gen' => 'Ogdower',
+'november-gen' => 'November',
+'december-gen' => 'Dezember',
+'jan' => 'Jän',
+'feb' => 'Few',
+'mar' => 'Mär',
+'apr' => 'Abr',
+'may' => 'Mai',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Aug',
+'sep' => 'Seb',
+'oct' => 'Ogd',
+'nov' => 'Nov',
+'dec' => 'Dez',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Kadegorie|Kadegorie}}',
-'category_header'        => 'Saide in de Kadegorie „$1“',
-'subcategories'          => 'Unnerkadegorie',
-'category-media-header'  => 'Medie in de Kadegorie „$1“',
-'hidden-categories'      => '{{PLURAL:$1|Versteckelte Kadegorie|Versteckelte Kadegorie}}',
-'category-subcat-count'  => '{{PLURAL:$2|Die Kategorie hot die Unnerkategorie:|{{PLURAL:$1|Die Unnerkategori isch eni vun insgsamt $2 Unnerkategorie in derre Kategorie:|S werre $1 vun insgsamt $2 Unnerkategorie in derre Kategorie aagezeicht:}}}}',
+'pagecategories' => '{{PLURAL:$1|Kadegorie|Kadegorie}}',
+'category_header' => 'Saide in de Kadegorie „$1“',
+'subcategories' => 'Unnerkadegorie',
+'category-media-header' => 'Medie in de Kadegorie „$1“',
+'hidden-categories' => '{{PLURAL:$1|Versteckelte Kadegorie|Versteckelte Kadegorie}}',
+'category-subcat-count' => '{{PLURAL:$2|Die Kategorie hot die Unnerkategorie:|{{PLURAL:$1|Die Unnerkategori isch eni vun insgsamt $2 Unnerkategorie in derre Kategorie:|S werre $1 vun insgsamt $2 Unnerkategorie in derre Kategorie aagezeicht:}}}}',
 'category-article-count' => "{{PLURAL:$2|In derre Kadegorie hot's numme die Said.|Die {{PLURAL:$1|Said|$1 Saide}} gebbt's in derre Kadegorie, vun insgsamt $2.}}",
 'listingcontinuesabbrev' => '(Forts.)',
 
-'about'      => 'Iwwer',
-'newwindow'  => '(werd im e naie Fenschter uffgmacht)',
-'cancel'     => 'Abbreche',
-'mytalk'     => 'Gebabbel mit dir',
+'about' => 'Iwwer',
+'newwindow' => '(werd im e naie Fenschter uffgmacht)',
+'cancel' => 'Abbreche',
+'mytalk' => 'Gebabbel mit dir',
 'navigation' => 'Navigation',
 
 # Cologne Blue skin
-'qbfind'      => 'Finne',
-'qbedit'      => 'Bearwaide',
+'qbfind' => 'Finne',
+'qbedit' => 'Bearwaide',
 'qbmyoptions' => 'Mai Saide',
 
 # Vector skin
 'vector-action-move' => 'Verschiewe',
-'vector-view-edit'   => 'Bearwaide',
-
-'errorpagetitle'   => 'Fehler',
-'returnto'         => 'Zrick zu $1.',
-'tagline'          => 'Vun {{SITENAME}}',
-'help'             => 'Hilfe',
-'search'           => 'Suche',
-'searchbutton'     => 'Suche',
-'go'               => 'Adiggel',
-'searcharticle'    => 'Suche',
-'history'          => 'Gschicht vun de Said',
-'history_short'    => 'Versione',
+'vector-view-edit' => 'Bearwaide',
+
+'errorpagetitle' => 'Fehler',
+'returnto' => 'Zrick zu $1.',
+'tagline' => 'Vun {{SITENAME}}',
+'help' => 'Hilfe',
+'search' => 'Suche',
+'searchbutton' => 'Suche',
+'go' => 'Adiggel',
+'searcharticle' => 'Suche',
+'history' => 'Gschicht vun de Said',
+'history_short' => 'Versione',
 'printableversion' => 'Druck-Aasicht',
-'permalink'        => 'Permanentlink',
-'print'            => 'Ausdrugge',
-'edit'             => 'Bearwaide',
-'create'           => 'Aaleche',
-'editthispage'     => 'Die Said bearwaide',
-'delete'           => 'Lesche',
-'undelete_short'   => '{{PLURAL:$1|ä Ännerung|$1 Ännerunge}} widderherschdelle',
-'protect'          => 'schitze',
-'protect_change'   => 'ännere',
-'unprotect'        => 'Widder freigewwe',
-'newpage'          => 'Naie Said',
-'talkpage'         => 'Iwwer die Said dischbediere',
+'permalink' => 'Permanentlink',
+'print' => 'Ausdrugge',
+'edit' => 'Bearwaide',
+'create' => 'Aaleche',
+'editthispage' => 'Die Said bearwaide',
+'delete' => 'Lesche',
+'undelete_short' => '{{PLURAL:$1|ä Ännerung|$1 Ännerunge}} widderherschdelle',
+'protect' => 'schitze',
+'protect_change' => 'ännere',
+'unprotect' => 'Widder freigewwe',
+'newpage' => 'Naie Said',
+'talkpage' => 'Iwwer die Said dischbediere',
 'talkpagelinktext' => 'Dischbediere',
-'personaltools'    => 'Perseenliche Werkzeische',
-'talk'             => 'Dischbediere',
-'views'            => 'Wievielmol aageguckt',
-'toolbox'          => 'Werkzaich',
-'otherlanguages'   => 'In annere Sproche',
-'redirectedfrom'   => '(Wairrerglaidet vun $1)',
-'redirectpagesub'  => 'Wairerlaidungssaid',
-'lastmodifiedat'   => 'Die Said isch zum ledschde Mol gänneret woore am $1, am $2.',
-'viewcount'        => 'Die Seid isch bis jetzerd {{PLURAL:$1|$1|$1}} mol uffgerufe worre.',
-'jumpto'           => 'Spring zu:',
+'personaltools' => 'Perseenliche Werkzeische',
+'talk' => 'Dischbediere',
+'views' => 'Wievielmol aageguckt',
+'toolbox' => 'Werkzaich',
+'otherlanguages' => 'In annere Sproche',
+'redirectedfrom' => '(Wairrerglaidet vun $1)',
+'redirectpagesub' => 'Wairerlaidungssaid',
+'lastmodifiedat' => 'Die Said isch zum ledschde Mol gänneret woore am $1, am $2.',
+'viewcount' => 'Die Seid isch bis jetzerd {{PLURAL:$1|$1|$1}} mol uffgerufe worre.',
+'jumpto' => 'Spring zu:',
 'jumptonavigation' => 'Navigation',
-'jumptosearch'     => 'Suche',
+'jumptosearch' => 'Suche',
 
 # 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'            => 'Iwwer {{SITENAME}}',
-'aboutpage'            => 'Project:Iwwer',
-'copyright'            => 'Was do drin schdeht isch unner $1 verfiechbar.',
-'copyrightpage'        => '{{ns:project}}:Urhewerrecht',
-'currentevents'        => 'Was grad so bassiert isch',
-'disclaimers'          => 'Hafdungsausschluß',
-'disclaimerpage'       => 'Project:Impressum',
-'edithelp'             => 'Hilf fer s Bearwaide',
-'edithelppage'         => 'Help:Ännere',
-'helppage'             => 'Help:Inhalt',
-'mainpage'             => 'Hääptsaid',
+'aboutsite' => 'Iwwer {{SITENAME}}',
+'aboutpage' => 'Project:Iwwer',
+'copyright' => 'Was do drin schdeht isch unner $1 verfiechbar.',
+'copyrightpage' => '{{ns:project}}:Urhewerrecht',
+'currentevents' => 'Was grad so bassiert isch',
+'disclaimers' => 'Hafdungsausschluß',
+'disclaimerpage' => 'Project:Impressum',
+'edithelp' => 'Hilf fer s Bearwaide',
+'edithelppage' => 'Help:Ännere',
+'helppage' => 'Help:Inhalt',
+'mainpage' => 'Hääptsaid',
 'mainpage-description' => 'Startseid',
-'portal'               => '{{SITENAME}}-Pordal',
-'privacy'              => 'Dadeschutz',
-'privacypage'          => 'Project:Daadeschutz',
+'portal' => '{{SITENAME}}-Pordal',
+'privacy' => 'Dadeschutz',
+'privacypage' => 'Project:Daadeschutz',
 
 'badaccess' => 'Kää ausraichende Recht',
 
-'retrievedfrom'       => 'Vun "$1"',
-'youhavenewmessages'  => 'Du hoscht $1 ($2).',
-'newmessageslink'     => 'naie Nochrichte',
+'retrievedfrom' => 'Vun "$1"',
+'youhavenewmessages' => 'Du hoscht $1 ($2).',
+'newmessageslink' => 'naie Nochrichte',
 'newmessagesdifflink' => 'letschte Ännerung',
-'editsection'         => 'bearwaide',
-'editold'             => 'bearwaide',
-'editlink'            => 'bearwaide',
-'viewsourcelink'      => 'Quell aagucke',
-'editsectionhint'     => 'Abschnitt ännere: $1',
-'toc'                 => 'Inhald',
-'showtoc'             => 'zaiche',
-'hidetoc'             => 'versteggeln',
-'site-rss-feed'       => '$1 RSS Feed',
-'site-atom-feed'      => '$1 Atom Feed',
-'page-rss-feed'       => '"$1" RSS Feed',
-'page-atom-feed'      => '"$1" Atom Feed',
-'red-link-title'      => '$1 (Said gebbt s nid)',
+'editsection' => 'bearwaide',
+'editold' => 'bearwaide',
+'editlink' => 'bearwaide',
+'viewsourcelink' => 'Quell aagucke',
+'editsectionhint' => 'Abschnitt ännere: $1',
+'toc' => 'Inhald',
+'showtoc' => 'zaiche',
+'hidetoc' => 'versteggeln',
+'site-rss-feed' => '$1 RSS Feed',
+'site-atom-feed' => '$1 Atom Feed',
+'page-rss-feed' => '"$1" RSS Feed',
+'page-atom-feed' => '"$1" Atom Feed',
+'red-link-title' => '$1 (Said gebbt s nid)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Said',
-'nstab-user'      => 'Benutzersaid',
-'nstab-media'     => 'Media',
-'nstab-special'   => 'Spezialsaid',
-'nstab-project'   => 'Pordal',
-'nstab-image'     => 'Datei',
+'nstab-main' => 'Said',
+'nstab-user' => 'Benutzersaid',
+'nstab-media' => 'Media',
+'nstab-special' => 'Spezialsaid',
+'nstab-project' => 'Pordal',
+'nstab-image' => 'Datei',
 'nstab-mediawiki' => 'Mitdeelung',
-'nstab-template'  => 'Vorlaach',
-'nstab-help'      => 'Hilfe',
-'nstab-category'  => 'Kadegorie',
+'nstab-template' => 'Vorlaach',
+'nstab-help' => 'Hilfe',
+'nstab-category' => 'Kadegorie',
 
 # General errors
-'missing-article'    => 'De Text fer „$1“ $2 isch in de Datebank nit gfunne worre.
+'missing-article' => 'De Text fer „$1“ $2 isch in de Datebank nit gfunne worre.
 
 Normalerwais hääßt des, dass die Said glescht woore isch.
 
 Wenn s des nit isch, hoscht villaicht en Fehler in de Datebank gfunne.
 Bitte meld des an e [[Special:ListUsers/sysop|Adminischtrator]], un gebb d URL dezu aa.',
 'missingarticle-rev' => '(Versionsnummer#: $1)',
-'badtitletext'       => 'De Titel vun de aageforderte Said isch nid giltich, leer, odder e nid giltiche Link vun eme annere Wiki.
+'badtitletext' => 'De Titel vun de aageforderte Said isch nid giltich, leer, odder e nid giltiche Link vun eme annere Wiki.
 S kann sai, dass es ää odder meh Zaiche drin hot, wu im Titel vun de Said nid gebraucht werre därfe.',
-'viewsource'         => 'Quelltekschd betrachde',
+'viewsource' => 'Quelltekschd betrachde',
 
 # Login and logout pages
-'yourname'                => 'Benutzername:',
-'yourpassword'            => 'Passwort:',
-'remembermypassword'      => 'Mai Passwort uff dem Computer merke (hechschtens fer $1 {{PLURAL:$1|Dach|Dach}})',
-'login'                   => 'Omelde',
+'yourname' => 'Benutzername:',
+'yourpassword' => 'Passwort:',
+'remembermypassword' => 'Mai Passwort uff dem Computer merke (hechschtens fer $1 {{PLURAL:$1|Dach|Dach}})',
+'login' => 'Omelde',
 'nav-login-createaccount' => 'Aamelde / Benutzerkonto aaleche',
-'userlogin'               => 'Omelde / Benutzerkonto anleche',
-'logout'                  => 'Abmelde',
-'userlogout'              => 'Abmelde',
-'nologinlink'             => 'E Benutzerkonto aaleche',
-'mailmypassword'          => 'Nais Passwort per E-Mail schicke',
+'userlogin' => 'Omelde / Benutzerkonto anleche',
+'logout' => 'Abmelde',
+'userlogout' => 'Abmelde',
+'nologinlink' => 'E Benutzerkonto aaleche',
+'mailmypassword' => 'Nais Passwort per E-Mail schicke',
 
 # Edit page toolbar
-'bold_sample'     => 'Fette Schrift',
-'bold_tip'        => 'Fette Schrift',
-'italic_sample'   => 'Kursive Schrift',
-'italic_tip'      => 'Kursive Schrift',
-'link_sample'     => 'Stichwort',
-'link_tip'        => 'Interner Link',
-'extlink_sample'  => 'http://www.example.com Linktext',
-'extlink_tip'     => 'Externer Link (uff http:// Acht gewwe)',
+'bold_sample' => 'Fette Schrift',
+'bold_tip' => 'Fette Schrift',
+'italic_sample' => 'Kursive Schrift',
+'italic_tip' => 'Kursive Schrift',
+'link_sample' => 'Stichwort',
+'link_tip' => 'Interner Link',
+'extlink_sample' => 'http://www.example.com Linktext',
+'extlink_tip' => 'Externer Link (uff http:// Acht gewwe)',
 'headline_sample' => 'Abschnitts-Iwwerschrift',
-'headline_tip'    => 'Iwwerschrift Ewene 2',
-'nowiki_sample'   => 'Gebb do en Text ai, wu nit formatiert wird',
-'nowiki_tip'      => 'Wiki-Formatierunge ignoriere',
-'image_tip'       => 'Bildverwais',
-'media_tip'       => 'Dateilink',
-'sig_tip'         => 'Dai Unnerschrift mit ener Zaitaagab',
-'hr_tip'          => 'Horizontale Linie (sparsam verwenne)',
+'headline_tip' => 'Iwwerschrift Ewene 2',
+'nowiki_sample' => 'Gebb do en Text ai, wu nit formatiert wird',
+'nowiki_tip' => 'Wiki-Formatierunge ignoriere',
+'image_tip' => 'Bildverwais',
+'media_tip' => 'Dateilink',
+'sig_tip' => 'Dai Unnerschrift mit ener Zaitaagab',
+'hr_tip' => 'Horizontale Linie (sparsam verwenne)',
 
 # Edit pages
-'summary'                          => 'Zammefassung:',
-'subject'                          => 'Betreff:',
-'minoredit'                        => 'Des ischt e klänni Bearwaidung',
-'watchthis'                        => 'Die Said beowachde',
-'savearticle'                      => 'Said schbeichere',
-'preview'                          => 'Vorschau',
-'showpreview'                      => 'Vorschau zaische',
-'showlivepreview'                  => 'Live-Vorschau',
-'showdiff'                         => 'Ännerunge zaische',
-'anoneditwarning'                  => "'''Warnung:''' Du bischt nit aagemeldt. Dai IP-Adress werd in de Gschicht vun dem Artikel gspaichert.",
-'summary-preview'                  => 'Zammefassung:',
-'newarticle'                       => '(Nai)',
-'newarticletext'                   => "Du bisch eme Link nogange zu re Said, wu s no gar nit gebbt.
+'summary' => 'Zammefassung:',
+'subject' => 'Betreff:',
+'minoredit' => 'Des ischt e klänni Bearwaidung',
+'watchthis' => 'Die Said beowachde',
+'savearticle' => 'Said schbeichere',
+'preview' => 'Voaschau',
+'showpreview' => 'Vorschau zaische',
+'showlivepreview' => 'Live-Vorschau',
+'showdiff' => 'Ännerunge zaische',
+'anoneditwarning' => "'''Warnung:''' Du bischt nit aagemeldt. Dai IP-Adress werd in de Gschicht vun dem Artikel gspaichert.",
+'summary-preview' => 'Zammefassung:',
+'newarticle' => '(Nai)',
+'newarticletext' => "Du bisch eme Link nogange zu re Said, wu s no gar nit gebbt.
 Zum die Said aaleche, kannscht do in dem Käschtel unne aafange mid schraiwe (guck[[{{MediaWiki:Helppage}}|Hilfe]] fer meh Informatione).
 Wenn do nid hin hoscht welle, no druck in Daim Browser uff '''Zrick'''.",
-'noarticletext'                    => 'Uff derre Said gebbt\'s noch kää Text. Du kannscht uff annere Saide [[Special:Search/{{PAGENAME}}|den Aitrach suche]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbuchaidrach suche, wu dezu ghert],
+'noarticletext' => 'Uff derre Said gebbt\'s noch kää Text. Du kannscht uff annere Saide [[Special:Search/{{PAGENAME}}|den Aitrach suche]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbuchaidrach suche, wu dezu ghert],
 orrer [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said bearwaide]</span>.',
-'previewnote'                      => "'''Denk dran, dass des numme e Vorschau isch.'''
+'previewnote' => "'''Denk dran, dass des numme e Vorschau isch.'''
 Dai Ännerunge sinn no nid gspaichert worre!",
-'editing'                          => 'Am $1 bearwaide',
-'editingsection'                   => '$1 bearwaide (Abschnitt)',
-'copyrightwarning'                 => "Bitte gebb acht, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlicht werre (guck $1 fer mehr Details).
+'editing' => 'Am $1 bearwaide',
+'editingsection' => '$1 bearwaide (Abschnitt)',
+'yourtext' => 'Doin Tegschd',
+'yourdiff' => 'Unaschied',
+'copyrightwarning' => "Bitte gebb acht, dass alle Baidräch zu {{SITENAME}} unner $2 vereffentlicht werre (guck $1 fer mehr Details).
 Wenn du nit willhsct, dass deswu du gschriwwe hoscht, gänneret un kopiert werre kann, dann duu s do nit naischraiwe.<br />
 du gebbscht do au zu, dass Du des selwerscht gschriwwe hoscht orrer vun ere effentliche, fraie Quell ('''public domain''')orrer vun ere ähnliche fraie Quell her hoscht.
 '''SCHRAIB DO NIX NAI, WAS URHEWERRECHTKLICH GSCHITZT ISCH!'''",
-'templatesused'                    => '{{PLURAL:$1|Vorlach wu uff derre Said gebraucht werd|Vorlache wu uff derre Said gebraucht werre}}:',
-'templatesusedpreview'             => '{{PLURAL:$1|Vorlach wu in derre Vorschau gebraucht werd|Vorlache wu in derre Vorschau gebraucht werre}}:',
-'template-protected'               => '(gschitzt)',
-'template-semiprotected'           => '(halb-gschitzt)',
-'hiddencategories'                 => 'Die Said ghert zu {{PLURAL:$1|1 versteckelte Kategorie|$1 versteckelte Kategorie}}:',
+'templatesused' => '{{PLURAL:$1|Vorlach wu uff derre Said gebraucht werd|Vorlache wu uff derre Said gebraucht werre}}:',
+'templatesusedpreview' => '{{PLURAL:$1|Vorlach wu in derre Vorschau gebraucht werd|Vorlache wu in derre Vorschau gebraucht werre}}:',
+'template-protected' => '(gschitzt)',
+'template-semiprotected' => '(halb-gschitzt)',
+'hiddencategories' => 'Die Said ghert zu {{PLURAL:$1|1 versteckelte Kategorie|$1 versteckelte Kategorie}}:',
 'permissionserrorstext-withaction' => 'Du därfscht nid $2, aus {{PLURAL:$1|dem Grund|denne Grind}}:',
-'moveddeleted-notice'              => 'Die Said isch glescht worre.
+'moveddeleted-notice' => 'Die Said isch glescht worre.
 De Leschaidrach fer die Said isch do unne aagewwe als Quell.',
 
 # History pages
-'viewpagelogs'           => 'D Lochbiecher fer die Said aagucke',
-'currentrev-asof'        => 'Aktuelle Version vun $1',
-'revisionasof'           => 'Version vun $1',
-'previousrevision'       => '← Ältere Versione',
-'nextrevision'           => 'Naier Version →',
-'currentrevisionlink'    => 'Aktuell Version',
-'cur'                    => 'jetzert',
-'next'                   => 'Negschte',
-'last'                   => 'vorich',
-'histlegend'             => "Du kannscht zwää Versione auswähle un verglaiche.<br />
+'viewpagelogs' => 'D Lochbiecher fer die Said aagucke',
+'currentrev-asof' => 'Aktuelle Version vun $1',
+'revisionasof' => 'Version vun $1',
+'previousrevision' => '← Ältere Versione',
+'nextrevision' => 'Naier Version →',
+'currentrevisionlink' => 'Aktuell Version',
+'cur' => 'jetzert',
+'next' => 'Negschte',
+'last' => 'vorich',
+'histlegend' => "Du kannscht zwää Versione auswähle un verglaiche.<br />
 Erklärung: '''({{int:cur}})''' = Unnerschied zu jetzert,
 '''({{int:last}})''' = Unnerschied zu de voriche Version, '''{{int:minoreditletter}}''' = klenni Ännerung.",
 'history-fieldset-title' => 'In de Versionsgschicht suche',
-'histfirst'              => 'Ältschte',
-'histlast'               => 'Naischte',
+'histfirst' => 'Ältschte',
+'histlast' => 'Naischte',
 
 # Revision deletion
-'rev-delundel'     => 'zaich/versteckel',
+'rev-delundel' => 'zaich/versteckel',
+'revdelete-show-file-submit' => 'Ja',
+'revdelete-radio-set' => 'Ja',
+'revdelete-radio-unset' => 'Nä',
 'revdelete-submit' => 'Uff die aussgewählt {{PLURAL:$1|Version|Versione}} owende',
-'revdel-restore'   => 'Sichtbarkeit ännere',
+'revdel-restore' => 'Sichtbarkeit ännere',
 
 # Merge log
 'revertmerge' => 'Zammefiehrung rickgängich mache',
 
 # Diffs
-'history-title'           => 'Versionsgschicht vun "$1"',
-'difference'              => '(Unnerschied zwische de Versione)',
-'lineno'                  => 'Zail $1:',
+'history-title' => 'Versionsgschicht vun "$1"',
+'lineno' => 'Zail $1:',
 'compareselectedversions' => 'Die Versione mitenonner vergleiche',
-'editundo'                => 'zerick',
+'editundo' => 'zerick',
 
 # Search results
-'searchresults'             => 'Ergebnis suche',
-'searchresults-title'       => 'Ergebnis suche fer "$1"',
-'searchresulttext'          => 'Fer mehr Informatione iwwer d Such in {{SITENAME}}, guck emol uff [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle'            => 'Du hoscht no \'\'\'[[:$1]]\'\'\' gesucht ([[Special:Prefixindex/$1|alle Saide wo mit "$1" aafange]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Saide wo uf "$1" verlinkt sin]])',
-'searchsubtitleinvalid'     => "Du hoscht '''$1''' gsucht",
-'notitlematches'            => 'Kää Saidetitel gfunne',
-'notextmatches'             => 'Kää Iwwerainstimmunge mit Inhalde',
-'prevn'                     => 'voriche {{PLURAL:$1|$1}}',
-'nextn'                     => 'negschte {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Gugg ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 Word|$2 Wärder}})',
-'search-redirect'           => '(Wairerlaitung $1)',
-'search-section'            => '(Abschnitt $1)',
-'search-suggest'            => 'Hoscht gemäänt: $1',
-'search-interwiki-caption'  => 'Schweschterprojekt',
-'search-interwiki-default'  => '$1 Ergebnis:',
-'search-interwiki-more'     => '(meh)',
-'search-mwsuggest-enabled'  => 'mid Vorschläch',
+'searchresults' => 'Ergebnis suche',
+'searchresults-title' => 'Ergebnis suche fer "$1"',
+'searchresulttext' => 'Fer mehr Informatione iwwer d Such in {{SITENAME}}, guck emol uff [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => 'Du hoscht no \'\'\'[[:$1]]\'\'\' gesucht ([[Special:Prefixindex/$1|alle Saide wo mit "$1" aafange]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle Saide wo uf "$1" verlinkt sin]])',
+'searchsubtitleinvalid' => "Du hoscht '''$1''' gsucht",
+'notitlematches' => 'Kää Saidetitel gfunne',
+'notextmatches' => 'Kää Iwwerainstimmunge mit Inhalde',
+'prevn' => 'voriche {{PLURAL:$1|$1}}',
+'nextn' => 'negschte {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Gugg ($1 {{int:pipe-separator}} $2) ($3)',
+'searchprofile-everything' => 'Alles',
+'search-result-size' => '$1 ({{PLURAL:$2|1 Word|$2 Wärder}})',
+'search-redirect' => '(Wairerlaitung $1)',
+'search-section' => '(Abschnitt $1)',
+'search-suggest' => 'Hoscht gemäänt: $1',
+'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',
-'powersearch-ns'            => 'In de Namensraim suche:',
-'powersearch-redir'         => 'Wairerlaitunge aazaiche',
-'powersearch-field'         => 'Suche noch',
-'powersearch-togglenone'    => 'Kään',
+'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',
+'powersearch-ns' => 'In de Namensraim suche:',
+'powersearch-redir' => 'Wairerlaitunge aazaiche',
+'powersearch-field' => 'Suche noch',
+'powersearch-togglenone' => 'Kään',
 
 # Quickbar
 'qbsettings-none' => 'Kään',
 
 # Preferences page
-'preferences'   => 'Optione',
+'preferences' => 'Optione',
 'mypreferences' => 'Mai Aistellunge',
-'saveprefs'     => 'Oischdellunge schbeichere',
-'resetprefs'    => 'Oischdellunge verwerfe',
+'saveprefs' => 'Oischdellunge schbeichere',
+'resetprefs' => 'Oischdellunge verwerfe',
 'guesstimezone' => 'Aus em Browser iwwernemme',
+'gender-unknown' => 'Ghoim gkalde',
 
 # Groups
-'group'            => 'Grubb:',
-'group-bot'        => 'Bots',
-'group-sysop'      => 'Adminischdradore',
+'group' => 'Grubb:',
+'group-bot' => 'Bots',
+'group-sysop' => 'Adminischdradore',
 'group-bureaucrat' => 'Birokrade',
-'group-all'        => '(alle)',
+'group-all' => '(alle)',
 
-'group-bot-member'        => 'Bot',
-'group-sysop-member'      => 'Adminischdrador',
+'group-bot-member' => 'Bot',
+'group-sysop-member' => 'Adminischdrador',
 'group-bureaucrat-member' => 'Birokrad',
 
 'grouppage-sysop' => '{{ns:project}}:Adminischtratore',
 
 # User rights log
-'rightslog'  => 'Benutzerrecht-Logbuch',
+'rightslog' => 'Benutzerrecht-Logbuch',
 'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'die Said bearwaide',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|Ännerung|Ännerunge}}',
-'recentchanges'                  => 'Was zuletschd gemacht worre isch',
-'recentchanges-legend'           => 'Optione vun de Aazaich',
+'nchanges' => '$1 {{PLURAL:$1|Ännerung|Ännerunge}}',
+'recentchanges' => 'Was zuletschd gemacht worre isch',
+'recentchanges-legend' => 'Optione vun de Aazaich',
 'recentchanges-feed-description' => 'Di letschte Ännerunge vun {{SITENAME}} in des Feed aigewwe.',
-'rcnote'                         => "Aagezaicht {{PLURAL:$1|werd '''1''' Ännerung|werre die letschte '''$1''' Ännerunge}} {{PLURAL:$2|vum letschte Dach|in de letschte '''$2''' Dache}} (Stand: $4, $5)",
-'rclistfrom'                     => 'Zeich die letschte Ännerunge ab $1',
-'rcshowhideminor'                => 'Klenne Ännerunge $1',
-'rcshowhidebots'                 => 'Bots $1',
-'rcshowhideliu'                  => 'Aagemeldte Benutzer $1',
-'rcshowhideanons'                => 'Nit aagemeldte Benutzer $1',
-'rcshowhidemine'                 => 'Mai Bearwaidunge $1',
-'rclinks'                        => 'Zeich die letschte $1 Ännerunge in de letschte $2 Dache<br />$3',
-'diff'                           => 'Unnerschied',
-'hist'                           => 'Gschicht',
-'hide'                           => 'versteggeln',
-'show'                           => 'zaiche',
-'minoreditletter'                => 'k',
-'newpageletter'                  => 'N',
-'boteditletter'                  => 'B',
-'rc-enhanced-expand'             => "Details zaische (dodezu braucht's JavaScript)",
-'rc-enhanced-hide'               => 'Details versteckeln',
+'rcnote' => "Aagezaicht {{PLURAL:$1|werd '''1''' Ännerung|werre die letschte '''$1''' Ännerunge}} {{PLURAL:$2|vum letschte Dach|in de letschte '''$2''' Dache}} (Stand: $4, $5)",
+'rclistfrom' => 'Zeich die letschte Ännerunge ab $1',
+'rcshowhideminor' => 'Klenne Ännerunge $1',
+'rcshowhidebots' => 'Bots $1',
+'rcshowhideliu' => 'Aagemeldte Benutzer $1',
+'rcshowhideanons' => 'Nit aagemeldte Benutzer $1',
+'rcshowhidemine' => 'Mai Bearwaidunge $1',
+'rclinks' => 'Zeich die letschte $1 Ännerunge in de letschte $2 Dache<br />$3',
+'diff' => 'Unnerschied',
+'hist' => 'Gschicht',
+'hide' => 'versteggeln',
+'show' => 'zaiche',
+'minoreditletter' => 'k',
+'newpageletter' => 'N',
+'boteditletter' => 'B',
+'rc-enhanced-expand' => "Details zaische (dodezu braucht's JavaScript)",
+'rc-enhanced-hide' => 'Details versteckeln',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Was on verlinkde Saide gemacht worre isch',
-'recentchangeslinked-feed'    => 'Was on verlinkde Seide gemacht worre isch',
+'recentchangeslinked' => 'Was on verlinkde Saide gemacht worre isch',
+'recentchangeslinked-feed' => 'Was on verlinkde Seide gemacht worre isch',
 'recentchangeslinked-toolbox' => 'Was on verlinkde Seide gemacht worre isch',
-'recentchangeslinked-title'   => 'Ännerunge an Saide, wu „$1“ druf verlinkt',
+'recentchangeslinked-title' => 'Ännerunge an Saide, wu „$1“ druf verlinkt',
 'recentchangeslinked-summary' => "Des isch e Lischt vun Ännerunge, wu erscht gmacht worre sin an Saide, die wu vun ere bstimmte Said verlinkt sin (odder die wu zu ere bstimmte Kadegorie ghere).
 Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
-'recentchangeslinked-page'    => 'Saide:',
-'recentchangeslinked-to'      => 'Zaisch Ännerunge uff Saide, wu do her verlinkt sinn',
+'recentchangeslinked-page' => 'Saide:',
+'recentchangeslinked-to' => 'Zaisch Ännerunge uff Saide, wu do her verlinkt sinn',
 
 # Upload
-'upload'        => 'Hochlade',
-'uploadbtn'     => 'Datei hochlade',
+'upload' => 'Hochlade',
+'uploadbtn' => 'Datei hochlade',
 'uploadlogpage' => 'Dateie-Logbuch',
-'savefile'      => 'Datei schbeichere',
+'savefile' => 'Datei schbeichere',
 'uploadedimage' => 'hot „[[$1]]“ hochglade',
 
+# Lock manager
+'lockmanager-notlocked' => '„$1“ hod ned uffgmachd were kenne, die isch ganed gschberd gwesd.',
+'lockmanager-fail-closelock' => 'Die gbscherd Dadai „$1“ hod ned gschlosse were kenne.',
+'lockmanager-fail-deletelock' => 'Die gbscherd Dadai „$1“ hod ned gleschd were kenne.',
+'lockmanager-fail-acquirelock' => '„$1“ komma ned schberre.',
+'lockmanager-fail-openlock' => 'Die gschberd Dadai „$1“ komma ned uffmache.',
+'lockmanager-fail-releaselock' => '„$1“ konn ned fraigewe werre.',
+
 # File description page
-'file-anchor-link'          => 'Datei',
-'filehist'                  => 'Dateigschicht',
-'filehist-help'             => 'Drick uff e Zaidpunkt zum aazääche, wie s dort ausgsähne hot.',
-'filehist-current'          => 'aktuell',
-'filehist-datetime'         => 'Zaidpunkt',
-'filehist-thumb'            => 'Vorschaubild',
-'filehist-thumbtext'        => 'Vorschaubild fer Version vum $1',
-'filehist-user'             => 'Benutzer',
-'filehist-dimensions'       => 'Moß',
-'filehist-comment'          => 'Kommentar',
-'imagelinks'                => 'Dateilinks',
-'linkstoimage'              => 'Die {{PLURAL:$1|Said verwaist|$1 Saire verwaise}} uff die Datei:',
-'sharedupload'              => 'Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.',
+'file-anchor-link' => 'Datei',
+'filehist' => 'Dateigschicht',
+'filehist-help' => 'Drick uff e Zaidpunkt zum aazääche, wie s dort ausgsähne hot.',
+'filehist-current' => 'aktuell',
+'filehist-datetime' => 'Zaidpunkt',
+'filehist-thumb' => 'Vorschaubild',
+'filehist-thumbtext' => 'Vorschaubild fer Version vum $1',
+'filehist-user' => 'Benutzer',
+'filehist-dimensions' => 'Moß',
+'filehist-comment' => 'Kommentar',
+'imagelinks' => 'Dateilinks',
+'linkstoimage' => 'Die {{PLURAL:$1|Said verwaist|$1 Saire verwaise}} uff die Datei:',
+'sharedupload' => 'Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.',
 'uploadnewversion-linktext' => 'E naiere Version vun derre Datei hochlade',
 
 # File deletion
@@ -404,36 +419,36 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 # Statistics
 'statistics' => 'Statischtike',
 
-'brokenredirects-edit'   => 'bearwaide',
+'brokenredirects-edit' => 'bearwaide',
 'brokenredirects-delete' => 'lesche',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|Byte|Bytes}}',
-'nmembers'      => '$1 {{PLURAL:$1|Mitglied|Mitglieder}}',
-'prefixindex'   => 'Alle Saide (mid Präfix)',
-'newpages'      => 'Naie Saide',
-'move'          => 'Verschiewe',
-'movethispage'  => 'Die Said verschiewe',
+'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}',
+'nmembers' => '$1 {{PLURAL:$1|Mitglied|Mitglieder}}',
+'prefixindex' => 'Alle Saide (mid Präfix)',
+'newpages' => 'Naie Saide',
+'move' => 'Verschiewe',
+'movethispage' => 'Die Said verschiewe',
 'pager-newer-n' => '{{PLURAL:$1|negschte 1|negschte $1}}',
 'pager-older-n' => '{{PLURAL:$1|vorich 1|voriche $1}}',
 
 # Book sources
-'booksources'               => 'Buchquelle',
+'booksources' => 'Buchquelle',
 'booksources-search-legend' => 'No Buchquelle suche',
-'booksources-go'            => 'Geh',
+'booksources-go' => 'Geh',
 
 # Special:Log
 'log' => 'Logbiecher',
 
 # Special:AllPages
-'allpages'       => 'Alle Saide',
+'allpages' => 'Alle Saide',
 'alphaindexline' => 'vun $1 bis $2',
-'prevpage'       => 'Voriche Said ($1)',
-'allpagesfrom'   => 'Saide aazaische wu aafange mid:',
-'allpagesto'     => 'Saide aazaische wu ufhere mid:',
-'allarticles'    => 'Alle Saide',
-'allpagesprev'   => 'Voriche',
-'allpagesnext'   => 'Negschte',
+'prevpage' => 'Voriche Said ($1)',
+'allpagesfrom' => 'Saide aazaische wu aafange mid:',
+'allpagesto' => 'Saide aazaische wu ufhere mid:',
+'allarticles' => 'Alle Saide',
+'allpagesprev' => 'Voriche',
+'allpagesnext' => 'Negschte',
 'allpagessubmit' => 'Zaische',
 
 # Special:LinkSearch
@@ -450,134 +465,135 @@ Saide uff [[Special:Watchlist|Dainer Beowachdungslischt]] sin '''fett'''.",
 'emailsend' => 'Abschigge',
 
 # Watchlist
-'watchlist'         => 'Beowachdungslischd',
-'mywatchlist'       => 'Mai Beowachdungslischd',
-'addedwatchtext'    => "Die Said \"[[:\$1]]\" isch zu Dainer [[Special:Watchlist|Beowachdungslischt]] zugefiecht worre.
+'watchlist' => 'Beowachdungslischd',
+'mywatchlist' => 'Mai Beowachdungslischd',
+'addedwatchtext' => "Die Said \"[[:\$1]]\" isch zu Dainer [[Special:Watchlist|Beowachdungslischt]] zugefiecht worre.
 Zukimftiche Ännerunge an derre Said un de Dischbediersaid, wu dezu ghert, werre doo aagezaicht, un d Said werd '''fett''' aagezaicht in de [[Special:RecentChanges|Letschte Ännerunge]] fer dass es ääfacher isch zum finne.",
-'removedwatchtext'  => 'D Said "[[:$1]]" isch aus [[Special:Watchlist|Dainer Beowachdungslischt]] rausgenumme worre.',
-'watch'             => 'Beowachde',
-'watchthispage'     => 'Die Said beowachde',
-'unwatch'           => 'Nimmi beowachde',
+'removedwatchtext' => 'D Said "[[:$1]]" isch aus [[Special:Watchlist|Dainer Beowachdungslischt]] rausgenumme worre.',
+'watch' => 'Beowachde',
+'watchthispage' => 'Die Said beowachde',
+'unwatch' => 'Nimmi beowachde',
 'watchlist-details' => 'S hot {{PLURAL:$1|$1 Said|$1 Saide}} uff Dainer Beowachdungslischt, Dischbediersaide zelle nid.',
-'wlshowlast'        => 'Die letschte $1 Stunne $2 Dache $3 zaiche',
+'wlshowlast' => 'Die letschte $1 Stunne $2 Dache $3 zaiche',
 'watchlist-options' => 'Optione vun de Beowachdungslischt',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Beowachde ...',
+'watching' => 'Beowachde ...',
 'unwatching' => 'Nimmi beowachde ...',
 
 'enotif_reset' => 'Alle Seide als bsuchd margiere',
 
 # Delete
-'deletepage'            => 'Said lesche',
-'confirm'               => 'Bestädiche',
-'delete-legend'         => 'Lesche',
-'confirmdeletetext'     => 'Du bisch debai e Said z lesche mid alle Versione.
+'deletepage' => 'Said lesche',
+'confirm' => 'Bestädiche',
+'delete-legend' => 'Lesche',
+'confirmdeletetext' => 'Du bisch debai e Said z lesche mid alle Versione.
 Bitte du bstätiche, dass Du des wllscht du, dass Du verstehsch, was des hääßt, un dass Du des machscht in Iwweraistimmung mit de [[{{MediaWiki:Policy-url}}|Richtline]].',
-'actioncomplete'        => 'Aktion fertich',
-'deletedtext'           => '"$1" isch gelescht worre.
+'actioncomplete' => 'Aktion fertich',
+'deletedtext' => '"$1" isch gelescht worre.
 Guck $2 fer e Lischt vun de letschte Leschunge.',
-'dellogpage'            => 'Leschlogbuch',
-'deletecomment'         => 'Grund:',
-'deleteotherreason'     => 'Annere/zusätzliche Grund:',
+'dellogpage' => 'Leschlogbuch',
+'deletecomment' => 'Grund:',
+'deleteotherreason' => 'Annere/zusätzliche Grund:',
 'deletereasonotherlist' => 'Annere Grund',
 
 # Rollback
 'rollbacklink' => 'Zericksetze',
 
 # Protect
-'protectlogpage'              => 'Saideschutz-Logbuch',
-'protectedarticle'            => 'hot "[[$1]]" gschitzt',
-'modifiedarticleprotection'   => 'hot de Schutzstatus vun "[[$1]]" gännert',
-'protectcomment'              => 'Grund:',
-'protectexpiry'               => 'Bis:',
-'protect_expiry_invalid'      => 'Zaidraum isch nid gildich.',
-'protect_expiry_old'          => 'Zaidraum licht in de Vergangehääd.',
-'protect-text'                => "Du kannscht de Schutzstatus vun de Said '''$1''' aagucke un ännere.",
-'protect-locked-access'       => "Dai Benutzerkonto hot ken Recht zum de Schutzstatus vun ener Said ze ännere.
+'protectlogpage' => 'Saideschutz-Logbuch',
+'protectedarticle' => 'hot "[[$1]]" gschitzt',
+'modifiedarticleprotection' => 'hot de Schutzstatus vun "[[$1]]" gännert',
+'protectcomment' => 'Grund:',
+'protectexpiry' => 'Bis:',
+'protect_expiry_invalid' => 'Zaidraum isch nid gildich.',
+'protect_expiry_old' => 'Zaidraum licht in de Vergangehääd.',
+'protect-text' => "Du kannscht de Schutzstatus vun de Said '''$1''' aagucke un ännere.",
+'protect-locked-access' => "Dai Benutzerkonto hot ken Recht zum de Schutzstatus vun ener Said ze ännere.
 Do hot s di aktuelle Aistellunge vun de Said '''$1''':",
-'protect-cascadeon'           => 'Die Said isch gschitzt, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
+'protect-cascadeon' => 'Die Said isch gschitzt, wail se {{PLURAL:$1|zu derre Said ghert|zu denne Saide ghert}}, wu e Kaskadesperrung gelt.
 Der Schutzstatus vun derre Said kannscht ännere, awwer des hot kää Aifluss uff d Kaskadesperrung.',
-'protect-default'             => 'Alle Benutzer erlääwe',
-'protect-fallback'            => '«$1»-Berechdichung nedich',
+'protect-default' => 'Alle Benutzer erlääwe',
+'protect-fallback' => '«$1»-Berechdichung nedich',
 'protect-level-autoconfirmed' => 'Naie un nid aagemeldte Benutzer sperre',
-'protect-level-sysop'         => 'Numme Adminischtratore',
-'protect-summary-cascade'     => 'Kaskade',
-'protect-expiring'            => 'bis $1 (UTC)',
-'protect-cascade'             => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrt.',
-'protect-cantedit'            => 'Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.',
-'restriction-type'            => 'Berechdichung:',
-'restriction-level'           => 'Schutzewene:',
+'protect-level-sysop' => 'Numme Adminischtratore',
+'protect-summary-cascade' => 'Kaskade',
+'protect-expiring' => 'bis $1 (UTC)',
+'protect-cascade' => 'Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrt.',
+'protect-cantedit' => 'Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.',
+'restriction-type' => 'Berechdichung:',
+'restriction-level' => 'Schutzewene:',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Bearwaide',
 'restriction-move' => 'Verschiewe',
 
 # Undelete
-'undelete'      => 'Widderherschdelle',
-'undeletebtn'   => 'Widderherschdelle',
-'undeletelink'  => 'aagucke/wirrer herstelle',
+'undelete' => 'Widderherschdelle',
+'undeletebtn' => 'Widderherschdelle',
+'undeletelink' => 'aagucke/wirrer herstelle',
 'undeletereset' => 'Zuricksetze',
+'undelete-show-file-submit' => 'Ja',
 
 # Namespace form on various pages
-'namespace'      => 'Nomensraum',
-'invert'         => 'Auswahl umkehre',
+'namespace' => 'Nomensraum',
+'invert' => 'Auswahl umkehre',
 'blanknamespace' => '(Haaptsaid)',
 
 # Contributions
-'contributions'       => 'Was der gemacht hot',
+'contributions' => 'Was der gemacht hot',
 'contributions-title' => 'Benutzerbaidräch vun $1',
-'mycontris'           => 'Was isch gemacht hab',
-'contribsub2'         => 'Fer $1 ($2)',
-'uctop'               => '(aktuell)',
-'month'               => 'un Monet (un frieher):',
-'year'                => 'Ab em Johr (un frieher):',
+'mycontris' => 'Was isch gemacht hab',
+'contribsub2' => 'Fer $1 ($2)',
+'uctop' => '(aktuell)',
+'month' => 'un Monet (un frieher):',
+'year' => 'Ab em Johr (un frieher):',
 
-'sp-contributions-newbies'  => 'Zaich numme Baidräch vun naie Benutzerkonte',
+'sp-contributions-newbies' => 'Zaich numme Baidräch vun naie Benutzerkonte',
 'sp-contributions-blocklog' => 'Sperrlogbuch',
-'sp-contributions-talk'     => 'Dischbediere',
-'sp-contributions-search'   => 'No Baidräch suche',
+'sp-contributions-talk' => 'Dischbediere',
+'sp-contributions-search' => 'No Baidräch suche',
 'sp-contributions-username' => 'IP-Adress orrer Benutzername:',
-'sp-contributions-submit'   => 'Suche',
+'sp-contributions-submit' => 'Suche',
 
 # What links here
-'whatlinkshere'            => 'Was doher zeischt',
-'whatlinkshere-title'      => 'Saide wu uff "$1" verlinke',
-'whatlinkshere-page'       => 'Said:',
-'linkshere'                => "Die Saide verlinke zu '''[[:$1]]''':",
-'isredirect'               => 'Wairerlaitungsaid',
-'istemplate'               => 'Vorlacheaibindung',
-'isimage'                  => 'Bildlink',
-'whatlinkshere-prev'       => '{{PLURAL:$1|vorich|voriche $1}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|negscht|negschte $1}}',
-'whatlinkshere-links'      => '← Links',
+'whatlinkshere' => 'Was doher zeischt',
+'whatlinkshere-title' => 'Saide wu uff "$1" verlinke',
+'whatlinkshere-page' => 'Said:',
+'linkshere' => "Die Saide verlinke zu '''[[:$1]]''':",
+'isredirect' => 'Wairerlaitungsaid',
+'istemplate' => 'Vorlacheaibindung',
+'isimage' => 'Bildlink',
+'whatlinkshere-prev' => '{{PLURAL:$1|vorich|voriche $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|negscht|negschte $1}}',
+'whatlinkshere-links' => '← Links',
 'whatlinkshere-hideredirs' => '$1 Wairerlaitunge',
-'whatlinkshere-hidetrans'  => '$1 Vorlacheaibindunge',
-'whatlinkshere-hidelinks'  => '$1 Links',
-'whatlinkshere-filters'    => 'Filter',
+'whatlinkshere-hidetrans' => '$1 Vorlacheaibindunge',
+'whatlinkshere-hidelinks' => '$1 Links',
+'whatlinkshere-filters' => 'Filter',
 
 # Block/unblock
-'blockip'                  => 'Benutzer bloggiere',
-'ipbsubmit'                => 'Benutzer bloggiere',
-'ipboptions'               => '2 Stunne:2 hours,1 Dach:1 day,3 Dache:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Monet:1 month,3 Monet:3 months,6 Monet:6 months,1 Johr:1 year,Fer immer:infinite',
-'ipusubmit'                => 'Die Adreß freigewwe',
-'ipblocklist'              => 'Gsperrte IP-Adresse un Benutzername',
-'blocklink'                => 'sperre',
-'unblocklink'              => 'Sperr uffhewwe',
-'change-blocklink'         => 'Sperr ännere',
-'contribslink'             => 'Baidräch',
-'blocklogpage'             => 'Sperrlogbuch',
-'blocklogentry'            => 'hot [[$1]] gsperrt fer e Zaidraum vun $2 $3',
-'unblocklogentry'          => 'hot d Sperr vun $1 uffghowwe',
+'blockip' => 'Benutzer bloggiere',
+'ipbsubmit' => 'Benutzer bloggiere',
+'ipboptions' => '2 Stunne:2 hours,1 Dach:1 day,3 Dache:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Monet:1 month,3 Monet:3 months,6 Monet:6 months,1 Johr:1 year,Fer immer:infinite',
+'ipusubmit' => 'Die Adreß freigewwe',
+'ipblocklist' => 'Gsperrte IP-Adresse un Benutzername',
+'blocklink' => 'sperre',
+'unblocklink' => 'Sperr uffhewwe',
+'change-blocklink' => 'Sperr ännere',
+'contribslink' => 'Baidräch',
+'blocklogpage' => 'Sperrlogbuch',
+'blocklogentry' => 'hot [[$1]] gsperrt fer e Zaidraum vun $2 $3',
+'unblocklogentry' => 'hot d Sperr vun $1 uffghowwe',
 'block-log-flags-nocreate' => 'Aaleche vun Benutzerkonte isch gsperrt',
 
 # Developer tools
-'lockbtn'   => 'Dadebonk schberre',
+'lockbtn' => 'Dadebonk schberre',
 'unlockbtn' => 'Dadebonk freigewwe',
 
 # Move page
 'move-page-legend' => 'Said verschiewe',
-'movepagetext'     => "Mid dem Format kannscht ener Said e naie Name gewwe, debai werre alle alde Versione uff de nai Name verschowe.
+'movepagetext' => "Mid dem Format kannscht ener Said e naie Name gewwe, debai werre alle alde Versione uff de nai Name verschowe.
 Aus em Alde Name werd e Wairerlaidungssaid´zum naie Name.
 Wairerlaidungssaide, wu uff de ald Name umlaire, kannscht automatisch aktualisiere.
 Wenn De des nid willsch, no guck uff [[Special:DoubleRedirects|doppelte]] orrer [[Special:BrokenRedirects|kaputte Wairerlaidunge]].
@@ -595,25 +611,26 @@ bitte mach des numme, wenn Du die Folche vun derre Aktion kannsch abschätze.",
 * Du wählsch unne d Option, se nid z verschiewe.
 
 In denne Fäll misst mer d Dischbediersaid vun Hand kopiere.",
-'movearticle'      => 'Said verschiewe:',
-'newtitle'         => 'Zum naie Titel:',
-'move-watch'       => 'Die Said beowachde',
-'movepagebtn'      => 'Said verschiewe',
-'pagemovedsub'     => 'Verschiewung hot geklappt',
-'movepage-moved'   => '\'\'\'"$1" isch verschowe worre uff "$2"\'\'\'',
-'articleexists'    => 'E Said mid dem Name gebbt s schun, orrer de Name, wu du gewählt hoscht, isch nid gildich.
+'movearticle' => 'Said verschiewe:',
+'newtitle' => 'Zum naie Titel:',
+'move-watch' => 'Die Said beowachde',
+'movepagebtn' => 'Said verschiewe',
+'pagemovedsub' => 'Verschiewung hot geklappt',
+'movepage-moved' => '\'\'\'"$1" isch verschowe worre uff "$2"\'\'\'',
+'articleexists' => 'E Said mid dem Name gebbt s schun, orrer de Name, wu du gewählt hoscht, isch nid gildich.
 Bitte nemm e annere Name.',
-'talkexists'       => "'''Die Said selwerschd, isch verschowe worre, awwer d Dischbediersaid hot nid kenne verschowe werre, wail s schun enni gebbt mid dem Name.
+'talkexists' => "'''Die Said selwerschd, isch verschowe worre, awwer d Dischbediersaid hot nid kenne verschowe werre, wail s schun enni gebbt mid dem Name.
 Bitte duu se vun Hand zammefiehre.'''",
-'movedto'          => 'verschowe uff',
-'movetalk'         => 'Dischbediersaid, wu dezu ghert, verschiewe',
-'movelogpage'      => 'Verschiewungs-Logbuch',
-'movereason'       => 'Grund:',
-'revertmove'       => 'Zerick verschiewe',
-'delete_and_move'  => 'Lesche un Verschiewe',
+'movedto' => 'verschowe uff',
+'movetalk' => 'Dischbediersaid, wu dezu ghert, verschiewe',
+'movelogpage' => 'Verschiewungs-Logbuch',
+'movereason' => 'Grund:',
+'revertmove' => 'Zerick verschiewe',
+'delete_and_move' => 'Lesche un Verschiewe',
+'delete_and_move_confirm' => 'Ja, Said lesche',
 
 # Export
-'export'        => 'Saide exportiere',
+'export' => 'Saide exportiere',
 'export-submit' => 'Seide exbordiere',
 
 # Thumbnails
@@ -623,76 +640,76 @@ Bitte duu se vun Hand zammefiehre.'''",
 'import-interwiki-submit' => 'Impordiere',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Dai Benutzersaid',
-'tooltip-pt-mytalk'               => 'Dai Dischbedier-Said',
-'tooltip-pt-preferences'          => 'Dai Aistellunge',
-'tooltip-pt-watchlist'            => 'D Lischt vun Saide, die wu du beowachde dusch',
-'tooltip-pt-mycontris'            => 'Lischt vun Daine Baidräch',
-'tooltip-pt-login'                => 'Du kannscht Dich aamelde, awwer du muscht s nit',
-'tooltip-pt-logout'               => 'Abmelde',
-'tooltip-ca-talk'                 => 'Iwwer d Inhaltssaid dischbediere',
-'tooltip-ca-edit'                 => 'Du kannscht die Said bearwaide.
+'tooltip-pt-userpage' => 'Dai Benutzersaid',
+'tooltip-pt-mytalk' => 'Dai Dischbedier-Said',
+'tooltip-pt-preferences' => 'Dai Aistellunge',
+'tooltip-pt-watchlist' => 'D Lischt vun Saide, die wu du beowachde dusch',
+'tooltip-pt-mycontris' => 'Lischt vun Daine Baidräch',
+'tooltip-pt-login' => 'Du kannscht Dich aamelde, awwer du muscht s nit',
+'tooltip-pt-logout' => 'Abmelde',
+'tooltip-ca-talk' => 'Iwwer d Inhaltssaid dischbediere',
+'tooltip-ca-edit' => 'Du kannscht die Said bearwaide.
 Bitte brauch de Vorschau-Knopp vor em Schbaichere',
-'tooltip-ca-addsection'           => 'E naie Abschnitt aaleche',
-'tooltip-ca-viewsource'           => 'Die Said isch gschitzt.
+'tooltip-ca-addsection' => 'E naie Abschnitt aaleche',
+'tooltip-ca-viewsource' => 'Die Said isch gschitzt.
 Du kannscht awwer de Quelltext aagucke',
-'tooltip-ca-history'              => 'Ledschde Versione vun derre Said',
-'tooltip-ca-protect'              => 'Die Said schitze',
-'tooltip-ca-delete'               => 'Die Said lesche',
-'tooltip-ca-move'                 => 'Die Said verschiewe',
-'tooltip-ca-watch'                => 'Die Said zu Dainere Beowachdungslischt zufieche',
-'tooltip-ca-unwatch'              => 'Die Said aus Dainer Beowachdunschlischde rausnemme',
-'tooltip-search'                  => 'Durchsuch {{SITENAME}}',
-'tooltip-search-go'               => 'Geh zu ere Said mit genää dem Namme, wenn s se gebbt',
-'tooltip-search-fulltext'         => 'Such in de Said noch dem Text',
-'tooltip-p-logo'                  => 'Haubdsaid',
-'tooltip-n-mainpage'              => 'Uff d Hääptsaid geh',
-'tooltip-n-mainpage-description'  => 'Haubdsaid aagucke',
-'tooltip-n-portal'                => 'Iwwer s Projekt, was de duu kannscht, wo de ebbes finnscht',
-'tooltip-n-currentevents'         => 'hinnergundsinformatione finne iwwer naie Eraichnis',
-'tooltip-n-recentchanges'         => 'D Lischt vun de letschte Ännerunge in dem Wiki',
-'tooltip-n-randompage'            => 'E zufälliche Said lade',
-'tooltip-n-help'                  => 'De Ort zum rausfinne',
-'tooltip-t-whatlinkshere'         => 'Lischt vun alle Wikisaide, wo do her verlinkt sin',
-'tooltip-t-recentchangeslinked'   => 'Letschte Ännerunge in Saide, wu vun do verlinkt sin',
-'tooltip-feed-rss'                => 'RSS feed fer die Said',
-'tooltip-feed-atom'               => 'Atom feed fer die Said',
-'tooltip-t-contributions'         => 'Die letschte Baidräch vun däm Benutzer aagucke',
-'tooltip-t-emailuser'             => 'Dem Benutzer e E-Mail schicke',
-'tooltip-t-upload'                => 'Dateie nuflade',
-'tooltip-t-specialpages'          => 'Lischt vun alle Spezialsaide',
-'tooltip-t-print'                 => 'Druckversion vun derre Said',
-'tooltip-t-permalink'             => 'E dauerhafte Link zu derre Version vun de Said',
-'tooltip-ca-nstab-main'           => 'D Inhaldssaid aagucke',
-'tooltip-ca-nstab-user'           => 'D Benutzersaid aagucke',
-'tooltip-ca-nstab-special'        => 'Des isch e Spezialsaid, du kannscht d Said sälwerscht nit ännere',
-'tooltip-ca-nstab-project'        => 'D Projektsaid aagucke',
-'tooltip-ca-nstab-image'          => 'D Dateisaid aaugucke',
-'tooltip-ca-nstab-template'       => 'Vorlach aagucke',
-'tooltip-ca-nstab-category'       => 'D Kategoriesaid aagucke',
-'tooltip-minoredit'               => 'Des als klenne Ännerung markiere',
-'tooltip-save'                    => 'Dai Ännerunge spaichere',
-'tooltip-preview'                 => 'Guck Daine Ännerunge in de Vorschau aa, vor Du uff Spaichere driksch!',
-'tooltip-diff'                    => 'Guck, welle Ännerunge Du im Text gmacht hoscht',
+'tooltip-ca-history' => 'Ledschde Versione vun derre Said',
+'tooltip-ca-protect' => 'Die Said schitze',
+'tooltip-ca-delete' => 'Die Said lesche',
+'tooltip-ca-move' => 'Die Said verschiewe',
+'tooltip-ca-watch' => 'Die Said zu Dainere Beowachdungslischt zufieche',
+'tooltip-ca-unwatch' => 'Die Said aus Dainer Beowachdunschlischde rausnemme',
+'tooltip-search' => 'Durchsuch {{SITENAME}}',
+'tooltip-search-go' => 'Geh zu ere Said mit genää dem Namme, wenn s se gebbt',
+'tooltip-search-fulltext' => 'Such in de Said noch dem Text',
+'tooltip-p-logo' => 'Haubdsaid',
+'tooltip-n-mainpage' => 'Uff d Hääptsaid geh',
+'tooltip-n-mainpage-description' => 'Haubdsaid aagucke',
+'tooltip-n-portal' => 'Iwwer s Projekt, was de duu kannscht, wo de ebbes finnscht',
+'tooltip-n-currentevents' => 'hinnergundsinformatione finne iwwer naie Eraichnis',
+'tooltip-n-recentchanges' => 'D Lischt vun de letschte Ännerunge in dem Wiki',
+'tooltip-n-randompage' => 'E zufälliche Said lade',
+'tooltip-n-help' => 'De Ort zum rausfinne',
+'tooltip-t-whatlinkshere' => 'Lischt vun alle Wikisaide, wo do her verlinkt sin',
+'tooltip-t-recentchangeslinked' => 'Letschte Ännerunge in Saide, wu vun do verlinkt sin',
+'tooltip-feed-rss' => 'RSS feed fer die Said',
+'tooltip-feed-atom' => 'Atom feed fer die Said',
+'tooltip-t-contributions' => 'Die letschte Baidräch vun däm Benutzer aagucke',
+'tooltip-t-emailuser' => 'Dem Benutzer e E-Mail schicke',
+'tooltip-t-upload' => 'Dateie nuflade',
+'tooltip-t-specialpages' => 'Lischt vun alle Spezialsaide',
+'tooltip-t-print' => 'Druckversion vun derre Said',
+'tooltip-t-permalink' => 'E dauerhafte Link zu derre Version vun de Said',
+'tooltip-ca-nstab-main' => 'D Inhaldssaid aagucke',
+'tooltip-ca-nstab-user' => 'D Benutzersaid aagucke',
+'tooltip-ca-nstab-special' => 'Des isch e Spezialsaid, du kannscht d Said sälwerscht nit ännere',
+'tooltip-ca-nstab-project' => 'D Projektsaid aagucke',
+'tooltip-ca-nstab-image' => 'D Dateisaid aaugucke',
+'tooltip-ca-nstab-template' => 'Vorlach aagucke',
+'tooltip-ca-nstab-category' => 'D Kategoriesaid aagucke',
+'tooltip-minoredit' => 'Des als klenne Ännerung markiere',
+'tooltip-save' => 'Dai Ännerunge spaichere',
+'tooltip-preview' => 'Guck Daine Ännerunge in de Vorschau aa, vor Du uff Spaichere driksch!',
+'tooltip-diff' => 'Guck, welle Ännerunge Du im Text gmacht hoscht',
 'tooltip-compareselectedversions' => 'D Unnerschied zwische denne zwai ausgwehlte Versione aagucke',
-'tooltip-watch'                   => 'Die Said zu Dainer Beowachdunglischd zufieche',
-'tooltip-rollback'                => '„Zericksetze“ maxcht alle Bearwaidunge vum letschte Bearwaider rickgängich',
-'tooltip-undo'                    => '„Zerick“ macht numme die Ännerung rickgängich un zaicht d Vorschau aa.
+'tooltip-watch' => 'Die Said zu Dainer Beowachdunglischd zufieche',
+'tooltip-rollback' => '„Zericksetze“ maxcht alle Bearwaidunge vum letschte Bearwaider rickgängich',
+'tooltip-undo' => '„Zerick“ macht numme die Ännerung rickgängich un zaicht d Vorschau aa.
 Du kannscht e Grund in dr Zammfassung aagewwe',
 
 # Browsing diffs
 'previousdiff' => '← Ältere Bearwaidung',
-'nextdiff'     => 'Naiere Bearwaidung →',
+'nextdiff' => 'Naiere Bearwaidung →',
 
 # Media information
 'file-info-size' => '$1 × $2 Pixels, Dateigreß: $3, MIME-Type: $4',
-'file-nohires'   => 'Ke hechere Ufflesung verfiechbar.',
-'svg-long-desc'  => 'SVG-Datei, Basisgreß $1 × $2 Pixels, Dateigreß: $3',
+'file-nohires' => 'Ke hechere Ufflesung verfiechbar.',
+'svg-long-desc' => 'SVG-Datei, Basisgreß $1 × $2 Pixels, Dateigreß: $3',
 'show-big-image' => 'Gsamte Ergebnis',
 
 # Special:NewFiles
 'showhidebots' => '(Bots $1)',
-'ilsubmit'     => 'Such',
+'ilsubmit' => 'Such',
 
 # Bad image list
 'bad_image_list' => 'Format:
@@ -702,12 +719,12 @@ De erscht Link muss e Link zu ere unerwinschte Datei sai.
 Annere Links in der glaiche Zail werre als Ausnahme behannelt, d. h. Saide, wu d Datei drin vorkumme därft.',
 
 # Metadata
-'metadata'          => 'Metadata',
-'metadata-help'     => 'Die Datei hot waitere Informatione, wahrschainlich vun de Digitalkamera oder vum Scanner, mit dem wu sie gmacht worre sinn.
+'metadata' => 'Metadata',
+'metadata-help' => 'Die Datei hot waitere Informatione, wahrschainlich vun de Digitalkamera oder vum Scanner, mit dem wu sie gmacht worre sinn.
 Wenn die Datei verännert worre isch, dann kann s sai, dass die zusätzlich Information fer die verännert Datei nimmi richtich isch.',
-'metadata-expand'   => 'Erwaiterte Details aazaiche',
+'metadata-expand' => 'Erwaiterte Details aazaiche',
 'metadata-collapse' => 'Erwaiterte Details versteckeln',
-'metadata-fields'   => 'Die EXIF-Metadate werre in de Bild-Bschraiwung ach aagezeicht, wenn d Metadate-Tabelle versteckelt isch.
+'metadata-fields' => 'Die EXIF-Metadate werre in de Bild-Bschraiwung ach aagezeicht, wenn d Metadate-Tabelle versteckelt isch.
 Annere Metadate sinn standardmäßig versteckelt.
 * make
 * model
@@ -726,18 +743,18 @@ Annere Metadate sinn standardmäßig versteckelt.
 'exif-gaincontrol-0' => 'Kään',
 
 # External editor support
-'edit-externally'      => 'Die Datei bearwaide mit ener externe Aawendung',
+'edit-externally' => 'Die Datei bearwaide mit ener externe Aawendung',
 'edit-externally-help' => '(Guck uff [//www.mediawiki.org/wiki/Manual:External_editors Installationsaawisige] fer meh Informatione)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'alle',
 'namespacesall' => 'alle',
-'monthsall'     => 'alle',
+'monthsall' => 'alle',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Die wichdiche Ännerunge aagucke',
 'watchlisttools-edit' => 'D Beowachdunglischt aagucke un bearwaide',
-'watchlisttools-raw'  => 'ime große Textfeld bearwaide',
+'watchlisttools-raw' => 'ime große Textfeld bearwaide',
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsaide',
@@ -745,4 +762,7 @@ Annere Metadate sinn standardmäßig versteckelt.
 # Special:Tags
 'tags-edit' => 'bearwaide',
 
+# Feedback
+'feedback-close' => 'Erledischd',
+
 );
index 0ab1cda..99e8c65 100644 (file)
@@ -974,6 +974,7 @@ Strony użytkownika zawierające CSS i JavaScript powinny zaczynać się małą
 'note' => "'''Uwaga:'''",
 'previewnote' => "'''To jest tylko podgląd'''
 Zmiany nie zostały jeszcze zapisane!",
+'continue-editing' => 'Kontynuuj edycję',
 'previewconflict' => 'Podgląd odnosi się do tekstu z górnego pola edycji. Tak będzie wyglądać strona, jeśli zdecydujesz się ją zapisać.',
 'session_fail_preview' => "'''Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.
 Spróbuj jeszcze raz.
@@ -1211,7 +1212,7 @@ Proszę sprawdzić rejestr operacji.',
 # Suppression log
 'suppressionlog' => 'Rejestr utajniania',
 'suppressionlogtext' => 'Poniżej znajduje się lista usunięć i blokad utajnionych przed administratorami.
-Zobacz [[Special:BlockList|rejestr blokowania adresów IP]], jeśli chcesz sprawdzić aktualne zakazy i blokady.',
+Zobacz [[Special:BlockList|rejestr blokad]], jeśli chcesz sprawdzić aktualne zakazy i blokady.',
 
 # History merging
 'mergehistory' => 'Scalanie historii stron',
@@ -1246,7 +1247,6 @@ Użycie linków nawigacyjnych kasuje wybór w kolumnie.',
 
 # Diffs
 'history-title' => 'Historia edycji „$1”',
-'difference' => '(Różnice między wersjami)',
 'difference-multipage' => '(Różnica między stronami)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'porównaj wybrane wersje',
@@ -2603,8 +2603,8 @@ Podaj powód (np. umieszczając nazwy stron, na których dopuszczono się wandal
 'ipb-confirm' => 'Potwierdzam blokadę',
 'badipaddress' => 'Niepoprawny adres IP',
 'blockipsuccesssub' => 'Zablokowanie powiodło się',
-'blockipsuccesstext' => '{{GENDER:$1|Użytkownik|Użytkowniczka}} [[Special:Contributions/$1|$1]] {{GENDER:$1|został zablokowany|została zablokowana}}.<br />
-Przejdź do [[Special:BlockList|listy zablokowanych adresów IP]], by przejrzeć blokady.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] {{GENDER:$1|został zablokowany|została zablokowana}}.<br />
+Przejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.',
 'ipb-blockingself' => 'Usiłujesz zablokować siebie samego! Czy na pewno chcesz to zrobić?',
 'ipb-confirmhideuser' => 'Zamierzasz zablokować użytkownika z włączoną opcją „ukryj użytkownika”. Spowoduje to pominięcie nazwy użytkownika we wszystkich listach i rejestrach. Czy na pewno chcesz to zrobić?',
 'ipb-edit-dropdown' => 'Edytuj listę przyczyn blokady',
@@ -3814,6 +3814,7 @@ Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU Gene
 'version-software' => 'Zainstalowane oprogramowanie',
 'version-software-product' => 'Nazwa',
 'version-software-version' => 'Wersja',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Ścieżka do pliku',
index 4795295..18a2222 100644 (file)
@@ -974,7 +974,6 @@ Ch'a varda mach che a-i ven-a nen fòra un rabel ant la continuità stòrica.",
 
 # Diffs
 'history-title' => 'Cronologìa dle modìfiche ëd "$1"',
-'difference' => '(Diferense antra revision)',
 'difference-multipage' => '(Diferense tra pàgine)',
 'lineno' => 'Riga $1:',
 'compareselectedversions' => 'Paragon-a le version selessionà',
@@ -2478,20 +2477,20 @@ për podèj tramudé na pàgina.",
 'movepage-moved-noredirect' => "La creassion ëd na ridiression a l'é stàita scancelà.",
 'articleexists' => "Na pàgina che as ciama parej a-i é già, ò pura ël nòm che a l'ha sërnù a va nen bin.<br />
 Che as sërna, për piasì, un nòm diferent për st'artìcol.",
-'cantmove-titleprotected' => "As peul pa fesse San Martin ambelelì, për via che col tìtol-lì a l'é stàit proibì e a peul pa ess-ie na pàgina ciamà parej",
+'cantmove-titleprotected' => "As peul pa fesse San Martin ambelelì, për via che col tìtol-lì a l'é stàit proibì e a peul pa ess-ie na pàgina ciamà parèj",
 'talkexists' => "La pàgina a l'é staita bin tramudà, ma a l'é pa podusse tramudé soa pàgina ëd discussion, përchè a-i në j'é già n'àutra ant la pàgina con ël tìtol neuv. Për piasì, che a modìfica a man ij contnù dle doe pàgine ëd discussion, an manera che as perdo nen dij pensé anteressant.",
 'movedto' => 'tramudà a',
-'movetalk' => "Podend, tramuda ëdcò la pàgina ëd discussion che a l'ha tacà.",
-'move-subpages' => 'Tramuda le sotpàgine (fin a $1)',
-'move-talk-subpages' => 'Tramuda le sotpàgine ëd na pàgina ëd discussion (fin a $1)',
+'movetalk' => "Tramudé ëdcò la pàgina ëd discussion che a l'ha tacà",
+'move-subpages' => 'Tramudé le sot-pàgine (fin a $1)',
+'move-talk-subpages' => 'Tramudé le sot-pàgine ëd la pàgina ëd discussion (fin a $1)',
 'movepage-page-exists' => 'La pàgina $1 a esist già e a peul pa esse coatà automaticament.',
 'movepage-page-moved' => "La pàgina $1 a l'é stàita tramudà a $2.",
 'movepage-page-unmoved' => 'La pàgina $1 a peul pa esse tramudà a $2.',
-'movepage-max-pages' => "Ël massim ëd {{PLURAL:$1|na pàgina a l'é stàita |$1 pàgine a son stàite}} tramudà e a na saran pa pì tramudà automaticament.",
+'movepage-max-pages' => "Ël màssim ëd {{PLURAL:$1|na pàgina|pàgine}} a l'é stàit tramudà e a na saran pa pì tramudà automaticament.",
 'movelogpage' => 'Registr dij San Martin',
-'movelogpagetext' => 'Ambelessì sota a-i é na lista ëd pàgine che a son staite tramudà.',
-'movesubpage' => '{{PLURAL:$1|Sotpàgina|Sotpàgine}}',
-'movesubpagetext' => "Sta pàgina-sì a l'ha $1 {{PLURAL:$1|sotpàgina|sotpàgine}} mostà ambelessì.",
+'movelogpagetext' => 'Ambelessì sota a-i é na lista ëd tute le pàgine che a son ëstàite tramudà.',
+'movesubpage' => '{{PLURAL:$1|Sot-pàgina|Sot-pàgine}}',
+'movesubpagetext' => "Costa pàgina-sì a l'ha $1 {{PLURAL:$1|sot-pàgina|sot-pàgine}} smonùe sì-sota.",
 'movenosubpage' => "Sta pàgina-sì a l'ha pa ëd sotpàgine.",
 'movereason' => 'Rason:',
 'revertmove' => "buta torna coma a l'era",
index bc7842b..d1e089b 100644 (file)
@@ -11,6 +11,7 @@
  * @author Kaganer
  * @author Khalid Mahmood
  * @author Rachitrali
+ * @author Reedy
  * @author ZaDiak
  */
 
@@ -373,7 +374,7 @@ $messages = array(
 اینوں پہلاں توں ای کسے نے مٹایا ہوۓ گا۔',
 'cannotdelete-title' => 'صفہ مٹا نئیں سکدے "$1"',
 'badtitle' => 'پیڑا عنوان',
-'badtitletext' => 'منگیا گۓ صفحہ دا ناں غلط اے، خالی اے یا غلط تریقے نال جوڑیا گیا اے۔<div/>
+'badtitletext' => 'منگیا گۓ صفحہ دا ناں غلط اے، خالی اے یا غلط تریقے نال جوڑیا گیا اے۔
 ہوسکدا اے ایدے چ اک دو ھندسے ایسے ہون جیڑے عنوان وچ استعمال نہیں کیتے جاسکدے۔',
 'perfcached' => 'تھلے دتا گیا ڈیٹا کاشیڈ اے تے پانویں نواں ناں ہووے. زیادہ توں زیادہ کاشے چ  {{PLURAL:$1|اک نتیجہ ہووے|$1 نتیجے ہوون}} گے.',
 'perfcachedts' => 'تھلے دتا گیا ڈیٹا کاشیڈ اے تے  $1 نوں نواں کیتا گیا۔ زیادہ توں زیادہ {{PLURAL:$4|اک نتیجہ ہووے|$4 نتیجے ہوون}} نتیجے کاشے چ ہیگے نیں .',
@@ -596,7 +597,7 @@ $2
 'showpreview' => 'کچا کم ویکھو',
 'showlivepreview' => 'جیندا کچا کم',
 'showdiff' => 'تبدیلیاں وکھاؤ',
-'anoneditwarning' => "<div/>'''خبردار''' تسی اندر نہیں آۓ
+'anoneditwarning' => "'''خبردار''' تسی اندر نہیں آۓ
 تواڈا ''آئی پی'' پتہ فائل فائل وچ لکھیا جاۓ گا۔",
 'anonpreviewwarning' => "''تسی ہلے لاگ ان نئیں ہوۓ،۔ کم بچاؤ گے تے تواڈا IP پتہ صفحے دی تریخ چ لکھ لیا جاۓ گا۔''",
 'missingsummary' => "'''یادکرائی:''' تساں تبدیلی دی سمری نئیں دتی۔  اگر تسیں \"{{int:savearticle}}\" نوں کلک کروگے تواڈیاں تبدیلیاں اک دے بنا بچ جان گیاں۔",
@@ -749,7 +750,7 @@ Custom .css تے .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.cs
 'permissionserrorstext-withaction' => 'تواڈے کول $2 کرن دی اجازت نئیں اے۔ اس دی {{PLURAL:$1|وجہ|وجوہات}} نیں۔',
 'recreate-moveddeleted-warn' => "'''خبردار: تسی اک پہلاں توں مٹایا ہویا صفحہ دوبارا لکھ رہے او۔'''
 
-توانوں اے گل سوچنی چائیدی اے کہ اینو لکھنا کوئی عقلمنداں دا کم اے۔<div/>
+توانوں اے گل سوچنی چائیدی اے کہ اینو لکھنا کوئی عقلمنداں دا کم اے۔
 تواڈی سہولت آسطے مٹان دا لاگ ایتھے موجود اے۔",
 'moveddeleted-notice' => 'اس صفحے نوں مٹا دتا گیا اے۔
 مٹان دا لاگ تھلے دتا گیا اے۔',
@@ -952,7 +953,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" دا ریکارڈ',
-'difference' => '(صفحیاں وچ فرق)',
 'difference-multipage' => '(صفیاں چ فرق)',
 'lineno' => 'لیک $1:',
 'compareselectedversions' => 'چنے صفحے آپنے سامنے کرو',
@@ -2633,7 +2633,7 @@ $1',
 'tooltip-pt-preferences' => 'میریاں تانگاں',
 'tooltip-pt-watchlist' => 'او صفحے جنہاں وچ تبدیلیاں تسی ویکھ رہے او',
 'tooltip-pt-mycontris' => 'میرے کم',
-'tooltip-pt-login' => 'جÛ\8c ØµØ¯Ù\82Û\92 Ø§Ù\86در Ø¢Ø¤Ø\8c Ù¾Ø± Ø§Û\92 Ù\84ازÙ\85Û\8c Ù\86Û\81یں۔',
+'tooltip-pt-login' => 'اÛ\92 Ø¨Û\81تر Ø§Û\92 Ú©Û\81 Ù\84اگ Ø§Ù\86 Û\81Ù\88 Ø¬Ø§Ø¤Ø\8c Ù\84Û\8cÚ©Ù\86 Ù\81Û\8cر Ù\88Û\8c Ø§Û\92 Ù\84ازÙ\85Û\8c Ù\86ئیں۔',
 'tooltip-pt-anonlogin' => 'اے بہتر اے کہ لاگ ان ہو جاؤ، لیکن فیر وی اے لازمی نئیں۔',
 'tooltip-pt-logout' => 'باہر آؤ',
 'tooltip-ca-talk' => 'اس صفحے دے بار وچ گل بات',
@@ -2811,7 +2811,7 @@ $1',
 
 # Metadata
 'metadata' => 'میٹا ڈیٹا',
-'metadata-help' => 'اس فائل وچ ہور وی معلومات نے، شاید او ڈیجیٹل کیمرے یا سکینر نے پائیاں گئیاں نے جس نال اینو کچھیا یا ڈیجیٹل بنایا گیا اے۔<div/>
+'metadata-help' => 'اس فائل وچ ہور وی معلومات نے، شاید او ڈیجیٹل کیمرے یا سکینر نے پائیاں گئیاں نے جس نال اینو کچھیا یا ڈیجیٹل بنایا گیا اے۔
 اگر فائل نو ایدی اصلی حالت توں تبدیل کیتا گیا اے تے کجھ تفصیلات تبدیل ہوئی فائل دے بارے چ نئیں دسن گیاں۔',
 'metadata-expand' => 'ہور تفصیلات دسو',
 'metadata-collapse' => 'تفصیلات چھپاؤ',
@@ -3326,7 +3326,7 @@ $5
 'ascending_abbrev' => 'اے ایس سی',
 'descending_abbrev' => 'ڈی ایایس سی',
 'table_pager_next' => 'اگلا صفہ',
-'table_pager_prev' => 'پچھلا صفحہ',
+'table_pager_prev' => 'پچھلا صفہ',
 'table_pager_first' => 'پہلا صفہ',
 'table_pager_last' => 'آخری صفہ',
 'table_pager_limit' => '$1 وکھاؤ ہر صفے تے',
@@ -3390,7 +3390,7 @@ $5
 # Special:Version
 'version' => 'ورژن',
 'version-extensions' => 'انسٹالڈ کیتیاں گیاں ایکسٹنشن',
-'version-specialpages' => 'خاص صفحے',
+'version-specialpages' => 'خاص صفے',
 'version-parserhooks' => 'پارسر ہکز',
 'version-variables' => 'ویریایبلز',
 'version-antispam' => 'سپام بچاؤ',
index e565c7a..01d87f0 100644 (file)
@@ -581,7 +581,6 @@ $messages = array(
 
 # Diffs
 'history-title' => 'Ιστορικόν εκδοσίων για τη σελίδαν "$1"',
-'difference' => '(Διαφορά μεταξύ τη μορφίων)',
 'lineno' => 'Γραμμή $1:',
 'compareselectedversions' => 'Γαρσουλαεύτε...',
 'editundo' => 'αναίρεση',
index e9ad1f4..d6bcd2c 100644 (file)
@@ -781,7 +781,6 @@ Nawigaciōnis autengīsenin terpausnā naikinna etrīnksenin en kōlunei.',
 
 # Diffs
 'history-title' => 'Redigīsnas istōrija stesse "$1"',
-'difference' => '(Šlaitīntai sirzdau wersiōnins)',
 'lineno' => 'Rindā $1:',
 'compareselectedversions' => 'Paligīnais etrīnktans wersiōnins',
 'editundo' => 'Naikinnais redigīsenin',
index e103bf2..d271266 100644 (file)
@@ -750,7 +750,8 @@ $1',
 '''تر اوسه پورې دا نه دی خوندي شوی!'''",
 'updated' => '(تازه)',
 'note' => "'''يادونه:'''",
-'previewnote' => "'''دا يواځې مخليدنه ده، تاسې چې کوم بدلونونه ترسره کړي، لا تر اوسه پورې نه دي خوندي شوي!'''",
+'previewnote' => "'''هېر مو نه شي چې دا يواځې يوه مخليدنه ده.'''
+ستاسې لخوا ترسره شوي بدلونونه لا تر اوسه پورې نه دي خوندي شوي!!",
 'editing' => 'د $1 سمونه',
 'editingsection' => 'سمونه $1 (برخه)',
 'editingcomment' => 'د $1 سمون (نوې برخه)',
@@ -891,7 +892,6 @@ $1',
 
 # Diffs
 'history-title' => 'د "$1" د پېښليک بڼه',
-'difference' => '(د بڼو تر مېنځ توپير)',
 'difference-multipage' => '(د مخونو تر مېنځ توپير)',
 'lineno' => '$1 کرښه:',
 'compareselectedversions' => 'ټاکلې بڼې سره پرتلل',
@@ -1279,7 +1279,10 @@ $1',
 'upload-http-error' => 'د HTTP يوه ستونزه رامېنځ ته شوې: $1',
 
 # File backend
+'backend-fail-delete' => 'د "$1" دوتنه ړنګه نه شوه.',
 'backend-fail-alreadyexists' => 'د $1 دوتنه له پخوا نه شته.',
+'backend-fail-read' => 'د "$1" دوتنه نه شي لوستل کېدای.',
+'backend-fail-create' => 'د "$1" دوتنه نه شي جوړېدای.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'ځانګړې شوې دوتنه يوه ZIP دوتنه نه وه.',
@@ -1823,8 +1826,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipb-confirm' => 'د بنديز تاييد',
 'badipaddress' => 'ناسمه IP پته',
 'blockipsuccesssub' => 'بنديز په برياليتوب سره ولګېده',
-'blockipsuccesstext' => 'د [[Special:Contributions/$1|$1]] مخه نيول شوې.
-<br />د مخنيول شويو خلکو د کتنې لپاره، د [[Special:BlockList|مخنيول شويو IP لړليک]] وګورۍ.',
+'blockipsuccesstext' => 'په [[Special:Contributions/$1|$1]] بنديز لګېدلی.<br />
+د بنديزونو د څارلو لپاره [[Special:BlockList|بنديز لړليک]] وګورۍ.',
 'ipb-edit-dropdown' => 'د بنديز سببونه سمول',
 'ipb-unblock-addr' => 'له $1 بنديز ليرې کول',
 'ipb-unblock' => 'له يوه کارن-نوم يا IP پتې بنديز ليري کول',
@@ -1973,6 +1976,9 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Import log
 'importlogpage' => 'د واردولو يادښت',
 
+# JavaScriptTest
+'javascripttest' => 'د جاوا سکرېپټ آزمېښت',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ستاسې کارن مخ',
 'tooltip-pt-mytalk' => 'ستاسې د خبرواترو مخ',
@@ -2030,6 +2036,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-diff' => 'دا هغه بدلونونه چې تاسې په متن کې ترسره کړي، ښکاره کوي. [alt-v]',
 'tooltip-compareselectedversions' => 'د همدې مخ د دوو ټاکل شويو بڼو تر مېنځ توپيرونه وګورۍ.',
 'tooltip-watch' => 'دا مخ ستاسې کتنلړ کې ورګډوي [alt-w]',
+'tooltip-upload' => 'د پورته کولو پيل',
 'tooltip-rollback' => 'په همدې مخ کې "په شابېول" د وروستني ونډوال سمون (سمونونه) په يوه کلېک په څټ ورګرځوي.',
 'tooltip-undo' => '"ناکړ" همدا سمون پر شا ګرځوي او د سمون کړکۍ د مخکتنې په بڼه پرانيزي.
 دا کړنه د لنډيز په برخه کې د سمونونو د سببونو د ورګډولو آسانتيا برابروي.',
@@ -2085,6 +2092,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'svg-long-desc' => 'SVG دوتنه، نومېنلي $1 × $2 پېکسل، د دوتنې کچه: $3',
 'show-big-image' => 'بشپړ بېلن نښې',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|چوکاټ|چوکاټونه}}',
+'file-info-png-repeat' => '$1 {{PLURAL:$1|ځل|ځله}} وغږېده',
 'file-info-png-frames' => '$1 {{PLURAL:$1|چوکاټ|چوکاټونه}}',
 
 # Special:NewFiles
@@ -2145,6 +2153,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-model' => 'د کامرې ماډل',
 'exif-software' => 'کارېدلې ساوترۍ',
 'exif-artist' => 'ليکوال',
+'exif-copyright' => 'د رښتو خاوند',
 'exif-colorspace' => 'رنګ تشيال',
 'exif-pixelydimension' => 'د انځور سور',
 'exif-pixelxdimension' => 'د انځور جګوالی',
@@ -2174,20 +2183,27 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-objectname' => 'لنډ سرليک',
 'exif-headline' => 'سرليک',
 'exif-source' => 'سرچينه',
-'exif-contact' => 'د اړيکې مالومات',
+'exif-contact' => 'د اړيکو مالومات',
 'exif-writer' => 'ليکوال',
 'exif-languagecode' => 'ژبه',
 'exif-iimcategory' => 'وېشنيزه',
 'exif-datetimeexpires' => 'مه يې کاروۍ وروسته له',
+'exif-datetimereleased' => 'خپرېدلی په',
 'exif-identifier' => 'پېژندنه',
 'exif-lens' => 'کارېدلې لېنز',
 'exif-serialnumber' => 'د کامرې پرله پسې شمېره',
 'exif-cameraownername' => 'د کامرې خاوند',
 'exif-label' => 'نښکه',
+'exif-copyrighted' => 'د رښتو دريځ',
+'exif-copyrightowner' => 'د رښتو خاوند',
+'exif-usageterms' => 'د کارولو شرايط',
 'exif-pngfilecomment' => 'د PNG دوتنې تبصره',
 'exif-disclaimer' => 'ردادعاليک',
 'exif-giffilecomment' => 'د GIF دوتنې تبصره',
 
+'exif-copyrighted-true' => 'په رښتو سمبال',
+'exif-copyrighted-false' => 'ټولګړی شپول',
+
 'exif-unknowndate' => 'نامالومه نېټه',
 
 'exif-orientation-1' => 'نورمال',
@@ -2207,6 +2223,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-lightsource-1' => 'د ورځې رڼا',
 'exif-lightsource-4' => 'فلش',
 'exif-lightsource-9' => 'ښه هوا',
+'exif-lightsource-10' => 'ورېځ پوښلې هوا',
 'exif-lightsource-11' => 'سيوری',
 'exif-lightsource-255' => 'د رڼا بله سرچينه',
 
@@ -2403,6 +2420,9 @@ $5
 'iranian-calendar-m11' => 'سلواغه',
 'iranian-calendar-m12' => 'کب',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|خبرې اترې]])',
+
 # Special:Version
 'version' => 'بڼه',
 'version-extensions' => 'لګېدلي شاتاړي',
@@ -2517,6 +2537,7 @@ $5
 'feedback-close' => 'ترسره شو',
 
 # API errors
+'api-error-duplicate-popup-title' => 'غبرګونې {{PLURAL:$1|دوتنه|دوتنې}}.',
 'api-error-empty-file' => 'کومه دوتنه چې تاسې دلته سپارلې هغه تشه ده.',
 'api-error-file-too-large' => 'کومه دوتنه چې تاسې دلته سپارلې ډېره لويه ده.',
 'api-error-filename-tooshort' => 'د دوتنې نوم ډېر لنډ دی.',
@@ -2526,4 +2547,15 @@ $5
 'api-error-unknown-warning' => 'ناڅرګنده ګواښنه: "$1".',
 'api-error-unknownerror' => 'ناڅرګنده تېروتنه: "$1".',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|ثانيه|ثانيې}}',
+'duration-minutes' => '$1 {{PLURAL:$1|دقيقه|دقيقې}}',
+'duration-hours' => '$1 {{PLURAL:$1|ساعت|ساعتونه}}',
+'duration-days' => '$1 {{PLURAL:$1|ورځ|ورځې}}',
+'duration-weeks' => '$1 {{PLURAL:$1|اونۍ|اونۍ}}',
+'duration-years' => '$1 {{PLURAL:$1|کال|کالونه}}',
+'duration-decades' => '$1 {{PLURAL:$1|لسيزه|لسيزې}}',
+'duration-centuries' => '$1 {{PLURAL:$1|پېړۍ|پېړۍ}}',
+'duration-millennia' => '$1 {{PLURAL:$1|زرمه|زرمې}}',
+
 );
index 79e037e..97181a7 100644 (file)
@@ -698,6 +698,8 @@ A justificação foi "\'\'$2\'\'".',
 'filereadonlyerror' => 'Não é possível modificar o ficheiro "$1" porque o repositório de ficheiros "$2" está em modo de leitura.
 
 O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
+'invalidtitle-knownnamespace' => 'Título inválido com o espaço nominal "$2" e texto "$3"',
+'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
@@ -1093,6 +1095,12 @@ Estes argumentos foram omitidos.',
 'parser-template-loop-warning' => 'Ciclo de predefinições detectado: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Foi excedido o limite da profundidade de recursividade nas predefinições ($1)',
 'language-converter-depth-warning' => 'O limite de profundidade do conversor de 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' => 'Detectado loop unstrip',
+'parser-unstrip-recursion-limit' => 'Limite de recursão do unstrip excedido ($1)',
 
 # "Undo" feature
 'undo-success' => 'É possível desfazer a edição.
@@ -1277,7 +1285,6 @@ Note que, se usar os links de navegação, os botões de opção voltarão aos v
 
 # Diffs
 'history-title' => 'Histórico de edições de "$1"',
-'difference' => '(Diferença entre edições)',
 'difference-multipage' => '(Diferenças entre páginas)',
 'lineno' => 'Linha $1:',
 'compareselectedversions' => 'Comparar as versões seleccionadas',
@@ -1859,6 +1866,7 @@ Caso o problema persista, contacte um [[Special:ListUsers/sysop|administrador]].
 'backend-fail-connect' => 'Não foi possível estabelecer ligação com o servidor de armazenamento "$1".',
 '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 ficheiro para armazenar em " $1 ".',
+'backend-fail-batchsize' => 'Foi fornecido um bloco de $1 {{PLURAL:$1|operação|operações}} sobre ficheiros ao servidor backend de armazenamento; o limite é de $2 {{PLURAL:$2|operação|operações}}.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Não foi possível ligar à base de dados de registos no "backend" de armazenamento "$1".',
@@ -1921,6 +1929,7 @@ Para optimizar a segurança, o img_auth.php está impossibilitado de executar.',
 'http-curl-error' => 'Ocorreu um erro ao aceder à URL: $1',
 'http-host-unreachable' => 'Não foi possível aceder à URL',
 'http-bad-status' => 'Ocorreu um problema durante o pedido HTTP: $1 $2',
+'http-truncated-body' => 'O corpo da solicitação foi recebido apenas parcialmente.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Não foi possível aceder à URL',
@@ -2117,6 +2126,8 @@ Agora redirecciona para [[$2]].',
 'wantedpages' => 'Páginas desejadas',
 'wantedpages-badtitle' => 'Título inválido no conjunto de resultados: $1',
 'wantedfiles' => 'Ficheiros desejados',
+'wantedfiletext-cat' => 'Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].',
+'wantedfiletext-nocat' => 'Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>.',
 'wantedtemplates' => 'Predefinições desejadas',
 'mostlinked' => 'Páginas com mais afluentes',
 'mostlinkedcategories' => 'Categorias com mais membros',
@@ -2197,6 +2208,8 @@ Talvez contenha um ou mais caracteres que não podem ser usados nos títulos.',
 'allpages-hide-redirects' => 'Ocultar redirecionamentos',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Você está a visualizar uma versão desta página em cache que tem uma antiguidade máxima de $1.',
+'cachedspecial-viewing-cached-ts' => 'Você está a visualizar uma versão desta página em cache que pode não refletir totalmente a situação atual.',
 'cachedspecial-refresh-now' => 'Ver mais recente.',
 
 # Special:Categories
@@ -2959,6 +2972,7 @@ Não há um directório temporário.',
 'javascripttest-pagetext-frameworks' => 'Escolha, por favor, uma das seguintes estruturas de teste: $1',
 'javascripttest-pagetext-skins' => 'Escolher um tema para executar os testes com:',
 'javascripttest-qunit-intro' => 'Consulte a [ $1 documentação de testes] no mediawiki.org.',
+'javascripttest-qunit-heading' => 'Pacote de ferramentas de teste de JavaScript QUnit do MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'A sua página de utilizador',
index 2e2b996..8512c84 100644 (file)
@@ -330,8 +330,8 @@ $messages = array(
 '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' => 'Enviar-me um email quando uma página da minha lista de páginas vigiadas for alterada',
-'tog-enotifusertalkpages' => 'Enviar-me um email quando a minha página de discussão for editada',
+'tog-enotifwatchlistpages' => 'Receber e-mail quando uma página da minha lista de páginas vigiadas for alterada',
+'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-enotifrevealaddr' => 'Revelar o meu endereço de email nas notificações',
 'tog-shownumberswatching' => 'Mostrar o número de usuários que estão vigiando',
@@ -349,7 +349,7 @@ $messages = array(
 'tog-watchlisthideanons' => 'Ocultar edições de usuários anônimos da lista de páginas vigiadas',
 'tog-watchlisthidepatrolled' => 'Esconder edições patrulhadas na lista de páginas vigiadas',
 'tog-nolangconversion' => 'Desabilitar conversão de variantes de idioma',
-'tog-ccmeonemails' => 'Enviar para mim cópias de e-mails que eu enviar a outros usuários',
+'tog-ccmeonemails' => 'Receber cópias de e-mails que eu enviar a outros usuários',
 'tog-diffonly' => 'Não mostrar o conteúdo da página ao comparar duas edições',
 'tog-showhiddencats' => 'Exibir categorias ocultas',
 'tog-noconvertlink' => 'Desabilitar conversão de títulos de links',
@@ -481,7 +481,7 @@ $messages = array(
 'tagline' => 'De {{SITENAME}}',
 'help' => 'Ajuda',
 'search' => 'Pesquisar',
-'searchbutton' => 'Pesquisa',
+'searchbutton' => 'Pesquisar',
 'go' => 'Ir',
 'searcharticle' => 'Ir',
 'history' => 'Histórico da página',
@@ -504,7 +504,7 @@ $messages = array(
 'protectthispage' => 'Proteger esta página',
 'unprotect' => 'Alterar a proteção',
 'unprotectthispage' => 'Alterar a proteção desta página',
-'newpage' => 'Nova página',
+'newpage' => 'Página nova',
 'talkpage' => 'Dialogar sobre esta página',
 'talkpagelinktext' => 'disc',
 'specialpage' => 'Página especial',
@@ -522,7 +522,7 @@ $messages = array(
 'viewhelppage' => 'Ver página de ajuda',
 'categorypage' => 'Ver página de categorias',
 'viewtalkpage' => 'Ver discussão',
-'otherlanguages' => 'Outras línguas',
+'otherlanguages' => 'Em outros idiomas',
 'redirectedfrom' => '(Redirecionado de $1)',
 'redirectpagesub' => 'Página de redirecionamento',
 'lastmodifiedat' => 'Esta página foi modificada pela última vez às $2 de $1.',
@@ -547,7 +547,7 @@ $1',
 'copyrightpage' => '{{ns:project}}:Direitos_de_autor',
 'currentevents' => 'Eventos atuais',
 'currentevents-url' => 'Project:Eventos atuais',
-'disclaimers' => 'Alerta de conteúdo',
+'disclaimers' => 'Exoneração de responsabilidade',
 'disclaimerpage' => 'Project:Aviso_geral',
 'edithelp' => 'Ajuda de edição',
 'edithelppage' => 'Help:Editar',
@@ -569,7 +569,7 @@ $1',
 Veja a [[Special:Version|página sobre a versão do sistema]].',
 
 'ok' => 'OK',
-'retrievedfrom' => 'Obtida de "$1"',
+'retrievedfrom' => 'Disponível em "$1"',
 'youhavenewmessages' => 'Você tem $1 ($2).',
 'newmessageslink' => 'novas mensagens',
 'newmessagesdifflink' => 'última alteração',
@@ -643,10 +643,10 @@ O banco de dados retornou o erro "$3: $4".',
 Quem fez o bloqueio oferece a seguinte explicação: $1',
 'missing-article' => 'O banco de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome "$1" $2.
 
-Isto geralmente é causado pelo seguimento de uma ligação de diferença desatualizada ou de história de uma página que foi removida.
+Isso normalmente é causado ao acessar um link de diferença (diff) desatualizado ou para o histórico de uma página que foi apagada.
 
-Se não for este o caso, você pode ter encontrado um defeito no software.
-Por favor, reporte este fato a um administrador, fazendo notar a URL.',
+Se não for este o caso, você pode ter encontrado um defeito (bug) no software.
+Anote o URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].',
 'missingarticle-rev' => '(revisão#: $1)',
 'missingarticle-diff' => '(Dif.: $1, $2)',
 'readonly_lag' => 'O banco de dados foi automaticamente bloqueado enquanto os servidores secundários se sincronizam com o principal',
@@ -697,6 +697,8 @@ Quem o protegeu foi [[User:$1|$1]], com a justificativa: ''$2''.",
 'filereadonlyerror' => 'Não é possível modificar o arquivo "$1" porque o repositório do arquivo "$2" está em modo somente leitura.
 
 O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
+'invalidtitle-knownnamespace' => 'Título inválido para o espaço nominal "$2" e texto "$3"',
+'invalidtitle-unknownnamespace' => 'Título inválido para o espaço nominal de número desconhecido ($1) e texto "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
@@ -714,17 +716,17 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'yourname' => 'Nome de usuário:',
 'yourpassword' => 'Senha:',
 'yourpasswordagain' => 'Redigite sua senha',
-'remembermypassword' => 'Recordar os meus dados neste computador (por no máximo $1 {{PLURAL:$1|dia|dias}})',
+'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:',
 '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' => 'Criar uma conta ou entrar',
+'nav-login-createaccount' => 'Entrar / criar conta',
 'loginprompt' => 'É necessário estar com cookies ativados para poder autenticar-se no wiki {{SITENAME}}.',
-'userlogin' => 'Criar uma conta ou entrar',
+'userlogin' => 'Entrar / criar conta',
 'userloginnocreate' => 'Entrar',
 'logout' => 'Sair',
-'userlogout' => 'Sair',
+'userlogout' => 'Desconectar',
 'notloggedin' => 'Não autenticado',
 'nologin' => 'Não possui uma conta? $1.',
 'nologinlink' => 'Criar uma conta',
@@ -748,7 +750,7 @@ Por favor ative-os, depois autentique-se com o seu novo nome de usuário e a sua
 Certifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.',
 'noname' => 'Você não colocou um nome de usuário válido.',
 'loginsuccesstitle' => 'Login bem sucedido',
-'loginsuccess' => "'''Agora você está autenticado ao wiki {{SITENAME}} como \"\$1\"'''.",
+'loginsuccess' => "'''Agora você está {{GENDER:autenticado|autenticada}} ao wiki {{SITENAME}} como \"\$1\"'''.",
 'nosuchuser' => 'Não existe nenhum usuário com o nome "$1".
 Os nomes de usuário são sensíveis à capitalização.
 Verifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].',
@@ -796,7 +798,7 @@ Você pode ignorar esta mensagem caso a conta tenha sido criada por engano.',
 'login-throttled' => 'Você fez tentativas demais de se autenticar com esta conta recentemente.
 Por favor aguarde antes de tentar novamente.',
 'login-abort-generic' => 'A sua autenticação não teve êxito - Abortada',
-'loginlanguagelabel' => 'Língua: $1',
+'loginlanguagelabel' => 'Idioma: $1',
 'suspicious-userlogout' => 'Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.',
 
 # E-mail sending
@@ -870,14 +872,14 @@ Senha temporária: $2',
 'link_tip' => 'Link interno',
 'extlink_sample' => 'http://www.example.com título do link',
 'extlink_tip' => 'Link externo (lembre-se do prefixo http://)',
-'headline_sample' => 'Texto do cabeçalho',
+'headline_sample' => 'Conteúdo do cabeçalho',
 'headline_tip' => 'Seção de nível 2',
 'nowiki_sample' => 'Inserir texto não-formatado aqui',
-'nowiki_tip' => 'Ignorar formato wiki',
+'nowiki_tip' => 'Ignorar a formatação wiki',
 'image_sample' => 'Exemplo.jpg',
 'image_tip' => 'Arquivo embutido',
 'media_sample' => 'Exemplo.ogg',
-'media_tip' => 'Link para arquivo',
+'media_tip' => 'Link para arquivo',
 'sig_tip' => 'Sua assinatura, com hora e data',
 'hr_tip' => 'Linha horizontal (use de forma moderada)',
 
@@ -891,7 +893,8 @@ Senha temporária: $2',
 'showpreview' => 'Mostrar previsão',
 'showlivepreview' => 'Pré-visualização em tempo real',
 'showdiff' => 'Mostrar alterações',
-'anoneditwarning' => "'''Atenção''': Você não se encontra autenticado. O seu endereço de IP será registrado no histórico de edições desta página.",
+'anoneditwarning' => "'''Atenção''': Você não se encontra autenticado.
+O seu endereço de IP será registrado no histórico de edições desta página.",
 'anonpreviewwarning' => "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''",
 'missingsummary' => "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.",
 'missingcommenttext' => 'Por favor, introduzida um comentário abaixo.',
@@ -944,17 +947,16 @@ Ela pode ter sido movida ou removido enquanto você estava vendo a página.',
 
 A senha para esta nova conta pode ser alterada na página ''[[Special:ChangePassword|de troca de senha]]'', após a autenticação.",
 'newarticle' => '(Nova)',
-'newarticletext' => "Você seguiu um link para uma página que não existe.
-Para criá-la, comece escrevendo na caixa abaixo
-(veja [[{{MediaWiki:Helppage}}|a página de ajuda]] para mais informações).
-Se você chegou aqui por engano, apenas clique no botão '''voltar''' do seu navegador.",
+'newarticletext' => "Você seguiu um link para uma página que ainda não existe.
+Para criá-la, comece escrevendo na caixa abaixo (veja [[{{MediaWiki:Helppage}}|a página de ajuda]] para mais informações).
+Se você chegou aqui por engano, clique no botão '''voltar''' do seu navegador.",
 'anontalkpagetext' => "---- ''Esta é a página de discussão para um usuário anônimo que ainda não criou uma conta ou que não a usa, de forma que temos de utilizar o endereço de IP para identificá-lo(a). Tal endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha que comentários irrelevantes foram direcionados a você, por gentileza, [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]], a fim de evitar futuras confusões com outros usuários anônimos.''",
-'noarticletext' => 'Atualmente não existe texto nesta página.
-Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar nos registros relacionados],
+'noarticletext' => '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, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados],
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.',
-'noarticletext-nopermission' => 'Não há actualmente texto nesta página.
-Você pode [[Special:Search/{{PAGENAME}}|procurar este título de página]] em outras páginas,
-ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar os registos relacionados] </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>.',
 '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.',
@@ -980,6 +982,7 @@ O registro de bloqueio mais recente é fornecido abaixo, para referência:',
 'note' => "'''Nota:'''",
 'previewnote' => "'''Lembre-se de que isto é apenas uma previsão.'''
 Suas alterações ainda não foram salvas!",
+'continue-editing' => 'Continuar editando',
 'previewconflict' => 'Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.',
 'session_fail_preview' => "'''Pedimos desculpas, mas não foi possível processar a sua edição devido à perda de dados da sua sessão.
 Por favor tente novamente.
@@ -1034,7 +1037,7 @@ A última entrada no histórico é fornecida abaixo como referência:",
 'templatesusedsection' => '{{PLURAL:$1|Predefinição utilizada|Predefinições utilizadas}} nesta seção:',
 'template-protected' => '(protegida)',
 'template-semiprotected' => '(semi-protegida)',
-'hiddencategories' => 'Esta página integra {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:',
+'hiddencategories' => 'Esta página pertence a {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:',
 'edittools' => '<!-- O texto aqui disponibilizado será exibido abaixo dos formulários de edição e de envio de arquivos. -->',
 'nocreatetitle' => 'A criação de páginas se encontra limitada',
 'nocreatetext' => '{{SITENAME}} tem restringida a habilidade de criar novas páginas.
@@ -1045,9 +1048,9 @@ Volte à tela anterior e edite uma página já existente, ou [[Special:UserLogin
 'permissionserrors' => 'Erros de permissões',
 'permissionserrorstext' => 'Você não possui permissão de fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:',
 'permissionserrorstext-withaction' => 'Você não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos motivos a seguir}}:',
-'recreate-moveddeleted-warn' => "Atenção: Você está recriando uma página já eliminada em outra ocasião.'''
+'recreate-moveddeleted-warn' => "'''Atenção: Você está recriando uma página já eliminada em outra ocasião.'''
 
-Você deve considerar se é realmente adequado continuar editando esta página.
+Considere se é realmente adequado continuar editando esta página.
 Os registros de eliminação e de movimentação desta página são exibidos a seguir, para sua comodidade:",
 'moveddeleted-notice' => 'Esta página foi eliminada.
 Os registros de eliminação e de movimentação para esta página estão disponibilizados abaixo, para referência.',
@@ -1067,8 +1070,9 @@ Ela já existia.',
 
 Deveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.',
 'expensive-parserfunction-category' => 'Páginas com muitas chamadas a funções do analisador "parser"',
-'post-expand-template-inclusion-warning' => 'Aviso: O tamanho de inclusão de predefinições é muito grande, algumas predefinições não serão incluídas.',
-'post-expand-template-inclusion-category' => 'Páginas onde o tamanho de inclusão de predefinições é excedido',
+'post-expand-template-inclusion-warning' => "'''Aviso''': a soma do tamanho de inclusão de predefinições é muito grande.
+Algumas predefinições não serão processadas.",
+'post-expand-template-inclusion-category' => 'Páginas onde a soma do tamanho de inclusão de predefinições é excedido',
 'post-expand-template-argument-warning' => 'Aviso: Esta página contém pelo menos um argumento de predefinição com um tamanho muito grande.
 Estes argumentos foram omitidos.',
 'post-expand-template-argument-category' => 'Páginas com omissões de argumentos em predefinições',
@@ -1092,10 +1096,10 @@ A justificativa apresentada por $3 foi ''$2''",
 'viewpagelogs' => 'Ver registros para esta página',
 'nohistory' => 'Não há histórico de revisões para esta página.',
 'currentrev' => 'Revisão atual',
-'currentrev-asof' => 'Edição atual tal como $1',
-'revisionasof' => 'Edição de $1',
+'currentrev-asof' => 'Edição atual tal como às $1',
+'revisionasof' => 'Edição das $1',
 'revision-info' => 'Edição feita às $1 por $2',
-'previousrevision' => '← Versão anterior',
+'previousrevision' => '← Edição anterior',
 'nextrevision' => 'Versão posterior →',
 'currentrevisionlink' => 'ver versão atual',
 'cur' => 'atu',
@@ -1103,11 +1107,10 @@ A justificativa apresentada por $3 foi ''$2''",
 'last' => 'ult',
 'page_first' => 'primeira',
 'page_last' => 'última',
-'histlegend' => "Seleção para diferenças: marque as caixas de seleção das versões que deseja comparar e clique no botão na parte inferior.<br />
-Legenda: ''({{int:cur}})''' = diferença com relação a versão atual,
-'''({{int:last}})''' = diferença com relação a versão anterior, '''{{int:minoreditletter}}''' = edição menor.",
+'histlegend' => "Como selecionar: marque as caixas de seleção das versões que deseja comparar e pressione enter ou clique no botão na parte inferior do formulário.<br />
+Legenda: '''({{int:cur}})''' = diferenças em relação a última versão, '''({{int:last}})''' = diferenças em relação a versão anterior, '''{{int:minoreditletter}}''' = edição menor.",
 'history-fieldset-title' => 'Navegar pelo histórico',
-'history-show-deleted' => 'Somente eliminados',
+'history-show-deleted' => 'Apenas as eliminadas',
 'histfirst' => 'Mais antigas',
 'histlast' => 'Mais recentes',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
@@ -1151,7 +1154,7 @@ Pode mesmo assim [$1 ver estas diferenças] se deseja prosseguir.",
 Você pode ver a diferença entre revisões; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
 'rev-suppressed-diff-view' => "Uma das revisões desta comparação foi '''suprimida''''.
 Você pode ver esta comparação; detalhes podem ser encontradas no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supressão].",
-'rev-delundel' => 'mostrar/esconder',
+'rev-delundel' => 'exibir/ocultar',
 'rev-showdeleted' => 'exibir',
 'revisiondelete' => 'Eliminar/restaurar edições',
 'revdelete-nooldid-title' => 'Nenhuma revisão selecionada',
@@ -1192,8 +1195,8 @@ $1",
 'logdelete-failure' => "'''A visibilidade do registro não pôde ser estabelecida:'''
 $1",
 'revdel-restore' => 'alterar visibilidade',
-'revdel-restore-deleted' => 'revisões eliminadas',
-'revdel-restore-visible' => 'revisões visíveis',
+'revdel-restore-deleted' => 'edições eliminadas',
+'revdel-restore-visible' => 'edições visíveis',
 'pagehist' => 'Histórico da página',
 'deletedhist' => 'Histórico de eliminações',
 'revdelete-hide-current' => 'Erro ao ocultar o item datado de $2, $1: esta é a revisão atual.
@@ -1252,7 +1255,8 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 
 # Diffs
 'history-title' => 'Histórico de edições de "$1"',
-'difference' => '(Diferença entre revisões)',
+'difference-title' => 'Mudanças entre as edições de "$1"',
+'difference-title-multipage' => 'Mudanças entre as páginas "$1" e "$2"',
 'difference-multipage' => '(Diferenças entre páginas)',
 'lineno' => 'Linha $1:',
 'compareselectedversions' => 'Compare as versões selecionadas',
@@ -1262,7 +1266,7 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 '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}})',
 
 # Search results
-'searchresults' => 'Resultados de pesquisa',
+'searchresults' => 'Resultados da pesquisa',
 'searchresults-title' => 'Resultados da pesquisa por "$1"',
 'searchresulttext' => 'Para mais informações de como pesquisar na {{SITENAME}}, consulte [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'Você pesquisou por \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|páginas iniciadas por "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|páginas que apontam para "$1"]])',
@@ -1272,14 +1276,14 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'notitlematches' => 'Nenhum título de página coincide',
 'textmatches' => 'Resultados nos textos das páginas',
 'notextmatches' => 'Não foi possível localizar, no conteúdo das páginas, o termo pesquisado',
-'prevn' => 'anteriores {{PLURAL:$1|$1}}',
-'nextn' => 'próximos {{PLURAL:$1|$1}}',
+'prevn' => '{{PLURAL:$1|anterior|$1 anteriores}}',
+'nextn' => '{{PLURAL:$1|próximo|próximos $1}}',
 'prevn-title' => '$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}',
 'nextn-title' => '{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}',
 'shown-title' => 'Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Opções de pesquisa',
-'searchmenu-exists' => "*'''Há a página \"[[:\$1]]\" neste wiki.'''",
+'searchmenu-exists' => "'''Há uma página com o nome \"[[:\$1]]\" neste wiki'''",
 'searchmenu-new' => "'''Criar a página \"[[:\$1|\$1]]\" neste wiki!'''",
 'searchhelp-url' => 'Help:Conteúdos',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Navegue pelas páginas com este prefixo]]',
@@ -1292,13 +1296,13 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'searchprofile-project-tooltip' => 'Pesquisar em $1',
 'searchprofile-images-tooltip' => 'Pesquisar arquivos',
 'searchprofile-everything-tooltip' => 'Pesquisar em todo o conteúdo (incluindo páginas de discussão)',
-'searchprofile-advanced-tooltip' => 'Pesquisar nos espaços nominais personalizados',
+'searchprofile-advanced-tooltip' => 'Personalizar os espaços nominais onde pesquisar',
 'search-result-size' => '$1 ({{PLURAL:$2|1 palavra|$2 palavras}})',
 'search-result-category-size' => '{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 arquivo|$3 arquivos}})',
 'search-result-score' => 'Relevância: $1%',
 'search-redirect' => '(redirecionamento de $1)',
 'search-section' => '(seção $1)',
-'search-suggest' => 'Será que quis dizer: $1',
+'search-suggest' => 'Você quis dizer: $1',
 'search-interwiki-caption' => 'Projetos irmãos',
 'search-interwiki-default' => 'Resultados de $1:',
 'search-interwiki-more' => '(mais)',
@@ -1314,7 +1318,7 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'showingresultsheader' => "{{PLURAL:$5|Resulado '''$1''' de '''$3'''|Resultados '''$1 - $2''' de '''$3'''}} para '''$4'''",
 'nonefound' => "'''Nota''': apenas alguns espaços nominais são pesquisados por padrão.
 Tente utilizar o prefixo ''all:'' em sua busca, para pesquisar por todos os conteúdos deste wiki (inclusive páginas de discussão, predefinições etc), ou mesmo, utilizando o espaço nominal desejado como prefixo.",
-'search-nonefound' => 'Não houve resultados para a pesquisa.',
+'search-nonefound' => 'Não há resultados que correspondam à consulta.',
 'powersearch' => 'Pesquisa avançada',
 'powersearch-legend' => 'Pesquisa avançada',
 'powersearch-ns' => 'Pesquisar nos espaços nominais:',
@@ -1400,7 +1404,7 @@ Eis um valor gerado aleatoriamente que você pode usar: $1",
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Oceano Índico',
 'timezoneregion-pacific' => 'Oceano Pacífico',
-'allowemail' => 'Permitir email de outros usuários',
+'allowemail' => 'Permitir que outros usuários me enviem e-mails',
 'prefs-searchoptions' => 'Opções de busca',
 'prefs-namespaces' => 'Espaços nominais',
 'defaultns' => 'Caso contrário pesquisar nestes espaços nominais:',
@@ -1613,21 +1617,21 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'recentchanges' => 'Mudanças recentes',
 'recentchanges-legend' => 'Opções das mudanças recentes',
 'recentchangestext' => 'Acompanhe, a partir desta página, as alterações recentes no wiki {{SITENAME}}.',
-'recentchanges-feed-description' => 'Acompanhe, a partir desta feed, as alterações mais recentes no wiki.',
+'recentchanges-feed-description' => 'Acompanhe neste feed as mudanças mais recentes do wiki.',
 'recentchanges-label-newpage' => 'Esta edição criou uma nova página',
 'recentchanges-label-minor' => 'Esta é uma edição menor',
-'recentchanges-label-bot' => 'Esta edição foi feita por um robô',
+'recentchanges-label-bot' => 'Esta edição foi feita por um bot',
 'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada',
 'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.",
-'rcnotefrom' => "Abaixo estão as alterações desde as '''$4''' de '''$3''' (limitadas a '''$1''').",
+'rcnotefrom' => "Seguem as alterações desde as '''$4''' de '''$3''' (limitadas a '''$1''').",
 'rclistfrom' => 'Mostrar as novas alterações a partir das $1',
 'rcshowhideminor' => '$1 edições menores',
-'rcshowhidebots' => '$1 robôs',
+'rcshowhidebots' => '$1 bots',
 'rcshowhideliu' => '$1 usuários registrados',
 'rcshowhideanons' => '$1 usuários anônimos',
 'rcshowhidepatr' => '$1 edições patrulhadas',
 'rcshowhidemine' => '$1 minhas edições',
-'rclinks' => 'Exibir as $1 alterações recentes dos últimos $2 dias<br />$3',
+'rclinks' => 'Exibir as $1 alterações recentes feitas nos últimos $2 dias<br />$3',
 'diff' => 'dif',
 'hist' => 'hist',
 'hide' => 'Ocultar',
@@ -1649,11 +1653,11 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'recentchangeslinked-feed' => 'Alterações relacionadas',
 'recentchangeslinked-toolbox' => 'Alterações relacionadas',
 'recentchangeslinked-title' => 'Alterações relacionadas com "$1"',
-'recentchangeslinked-noresult' => 'Não ocorreram alterações em páginas relacionadas no intervalo de tempo fornecido.',
-'recentchangeslinked-summary' => "Esta página lista alterações feitas recentemente em páginas lincadas a uma em específico (ou de membros de uma categoria especificada).
+'recentchangeslinked-noresult' => 'Não ocorreram alterações em páginas relacionadas no intervalo de tempo especificado.',
+'recentchangeslinked-summary' => "Esta página lista alterações feitas recentemente em páginas com links a uma em específico (ou de membros de uma categoria especificada).
 Páginas de sua [[Special:Watchlist|lista de páginas vigiadas]] são exibidas em '''negrito'''.",
 'recentchangeslinked-page' => 'Nome da página:',
-'recentchangeslinked-to' => 'Mostrar alterações a páginas relacionadas com a página fornecida',
+'recentchangeslinked-to' => 'Visualizar as alterações nas páginas vinculadas à página especificada ao invés disso',
 
 # Upload
 'upload' => 'Enviar arquivo',
@@ -1906,7 +1910,7 @@ Para melhor segurança, o img_auth.php está desativado.',
 'upload-curl-error28' => 'Tempo limite para o envio do arquivo excedido',
 'upload-curl-error28-text' => 'O site demorou muito tempo para responder. Por gentileza, verifique se o site está acessível, aguarde alguns momentos e tente novamente. Talvez você deseje fazer nova tentativa em um horário menos congestionado.',
 
-'license' => 'Licença:',
+'license' => 'Licenciamento:',
 'license-header' => 'Licenciamento',
 'nolicense' => 'Nenhuma selecionada',
 'license-nopreview' => '(Previsão não disponível)',
@@ -1931,14 +1935,14 @@ Um clique sobre um cabeçalho de coluna altera a ordenação.',
 # File description page
 'file-anchor-link' => 'Arquivo',
 'filehist' => 'Histórico do arquivo',
-'filehist-help' => 'Clique em uma data/horário para ver o arquivo tal como ele se encontrava em tal momento.',
+'filehist-help' => 'Clique em uma data/horário para ver como o arquivo estava em um dado momento.',
 'filehist-deleteall' => 'eliminar todas',
 'filehist-deleteone' => 'eliminar',
 'filehist-revert' => 'restaurar',
 'filehist-current' => 'atual',
 'filehist-datetime' => 'Data/Horário',
 'filehist-thumb' => 'Miniatura',
-'filehist-thumbtext' => 'Miniatura para a versão de $1',
+'filehist-thumbtext' => 'Miniatura da versão das $1',
 'filehist-nothumb' => 'Miniatura indisponível',
 'filehist-user' => 'Usuário',
 'filehist-dimensions' => 'Dimensões',
@@ -1950,7 +1954,7 @@ Um clique sobre um cabeçalho de coluna altera a ordenação.',
 'linkstoimage-more' => 'Mais de $1 {{PLURAL:$1|página|páginas}} tem algum link para este arquivo.
 A lista a seguir mostra apenas {{PLURAL:$1|o primeiro link|os $1 primeiros links}} para este arquivo.
 Uma [[Special:WhatLinksHere/$2|listagem completa]] está disponível.',
-'nolinkstoimage' => 'Nenhuma página aponta para este arquivo.',
+'nolinkstoimage' => 'Nenhuma página contém links para este arquivo.',
 'morelinkstoimage' => 'Ver [[Special:WhatLinksHere/$1|mais links]] para este arquivo.',
 'linkstoimage-redirect' => '$1 (redirecionamento de arquivo) $2',
 'duplicatesoffile' => '{{PLURAL:$1|O seguinte arquivo é duplicado|Os seguintes arquivos são duplicados}} deste arquivo ([[Special:FileDuplicateSearch/$2|mais detalhes]]):',
@@ -1958,7 +1962,11 @@ Uma [[Special:WhatLinksHere/$2|listagem completa]] está disponível.',
 'sharedupload-desc-there' => 'Este arquivo é do $1 e pode ser utilizado por outros projetos.
 Por favor veja a [$2 página de descrição do arquivo] para mais informações.',
 'sharedupload-desc-here' => 'Este arquivo é do $1 e pode ser utilizado por outros projetos.
-A descrição na sua [$2 página de descrição de arquivo] é exibida abaixo.',
+Sua [$2 página de descrição de arquivo] é reproduzida abaixo.',
+'sharedupload-desc-edit' => 'Este arquivo é do $1 e pode ser utilizado por outros projetos.
+Talvez você deseje editar a descrição na sua [$2 página de descrição de arquivo] por lá.',
+'sharedupload-desc-create' => 'Este arquivo é do $1 e pode ser utilizado por outros projetos.
+Talvez você deseje editar a descrição na sua [$2 página de descrição de arquivo] por lá.',
 'filepage-nofile' => 'Não existe nenhum arquivo com esse nome.',
 'filepage-nofile-link' => 'Não existe nenhum arquivo com este nome, mas você pode [$1 carregá-lo].',
 'uploadnewversion-linktext' => 'Enviar uma nova versão deste arquivo',
@@ -2089,6 +2097,8 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'wantedpages' => 'Páginas pedidas',
 'wantedpages-badtitle' => 'Título inválido no conjunto de resultados: $1',
 'wantedfiles' => 'Arquivos pedidos',
+'wantedfiletext-cat' => 'Os seguintes arquivos são usados, mas não existem. Arquivos de repositórios externos podem acabar sendo listados apesar de existirem. Esses falsos positivos aparecerão <del>riscados</del>. As páginas que incluem arquivos inexistentes são listadas em [[:$1]].',
+'wantedfiletext-nocat' => 'Os seguintes arquivos são usados, mas não existem. Arquivos de repositórios externos podem acabar sendo listados apesar de existirem. Esses falsos positivos aparecerão <del>riscados</del>.',
 'wantedtemplates' => 'Predefinições pedidas',
 'mostlinked' => 'Páginas com mais afluentes',
 'mostlinkedcategories' => 'Categorias com mais membros',
@@ -2097,6 +2107,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'mostimages' => 'Imagens com mais afluentes',
 '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)',
 'shortpages' => 'Páginas curtas',
 'longpages' => 'Páginas longas',
 'deadendpages' => 'Páginas sem saída',
@@ -2126,14 +2137,14 @@ Por favor note que outros websites podem apontar para um arquivo através de um
 'notargettext' => 'Você não especificou uma página alvo ou um usuário para executar esta função.',
 'nopagetitle' => 'Página alvo não existe',
 'nopagetext' => 'A página alvo especificada não existe.',
-'pager-newer-n' => '{{PLURAL:$1|1 recente|$1 recentes}}',
-'pager-older-n' => '{{PLURAL:$1|1 antiga|$1 antigas}}',
+'pager-newer-n' => '{{PLURAL:$1|posterior|$1 posteriores}}',
+'pager-older-n' => '{{PLURAL:$1|1 anterior|$1 anteriores}}',
 'suppress' => 'Supervisor',
 'querypage-disabled' => 'Esta página especial está desativada para não prejudicar o desempenho.',
 
 # Book sources
-'booksources' => 'Fontes de livros',
-'booksources-search-legend' => 'Procurar por fontes de livrarias',
+'booksources' => 'Fontes bibliográficas',
+'booksources-search-legend' => 'Procurar fontes bibliográficas',
 'booksources-go' => 'Ir',
 'booksources-text' => 'É exibida a seguir uma listagem de links para outros sites que vendem livros novos e usados e que possam possuir informações adicionais sobre os livros que você está pesquisando:',
 'booksources-invalid-isbn' => 'O número ISBN fornecido não parece ser válido; verifique se houve erros ao copiar da fonte original.',
@@ -2150,11 +2161,11 @@ Você pode diminuir a lista escolhendo um tipo de registro, um nome de usuário
 
 # Special:AllPages
 'allpages' => 'Todas as páginas',
-'alphaindexline' => '$1 até $2',
+'alphaindexline' => 'De $1 até $2',
 'nextpage' => 'Próxima página ($1)',
 'prevpage' => 'Página anterior ($1)',
-'allpagesfrom' => 'Mostrar páginas começando em:',
-'allpagesto' => 'Terminar de exibir páginas em:',
+'allpagesfrom' => 'Primeira página na listagem:',
+'allpagesto' => 'Última página na listagem:',
 'allarticles' => 'Todas as páginas',
 'allinnamespace' => 'Todas as páginas (espaço nominal $1)',
 'allnotinnamespace' => 'Todas as páginas (excepto as do espaço nominal $1)',
@@ -2166,6 +2177,11 @@ Você pode diminuir a lista escolhendo um tipo de registro, um nome de usuário
 'allpages-bad-ns' => '{{SITENAME}} não possui o espaço nominal "$1".',
 'allpages-hide-redirects' => 'Ocultar redirecionamentos',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Você está visualizando uma versão de cache desta página que pode ser de $1 atrás.',
+'cachedspecial-viewing-cached-ts' => 'Você está visualizando uma versão de cache desta página que pode estar desatualizada.',
+'cachedspecial-refresh-now' => 'Ver a mais recente.',
+
 # Special:Categories
 'categories' => 'Categorias',
 'categoriespagetext' => '{{PLURAL:$1|A seguinte categoria contém|As seguintes contém}} páginas ou mídia.
@@ -2188,7 +2204,7 @@ Veja também [[Special:WantedCategories|categorias pedidas]].',
 'linksearch-text' => 'É possível usar caracteres curinga, como "*.wikipedia.org".
 É necessário, pelo menos, um domínio de nível superior, por exemplo "*.org".<br />
 Protocolos suportados: <tt>$1</tt> (não adicionado nenhum desses em sua pesquisa).',
-'linksearch-line' => '$1 está lincado a partir de $2',
+'linksearch-line' => '$2 possui links para $1',
 'linksearch-error' => "\"Caracteres mágicos\" (''wildcards'') só podem ser suados no início do endereço.",
 
 # Special:ListUsers
@@ -2353,8 +2369,8 @@ Para comentários e pedidos de ajuda:
 'historywarning' => "'''Atenção:''' A página que você está prestes a eliminar possui um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
 'confirmdeletetext' => 'Encontra-se prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.
 Por favor, confirme que possui a intenção de fazer isto, que compreende as consequências e que encontra-se a fazer isto de acordo com as [[{{MediaWiki:Policy-url}}|políticas]] do projeto.',
-'actioncomplete' => 'Ação completada',
-'actionfailed' => 'A ação falhou',
+'actioncomplete' => 'Ação concluída',
+'actionfailed' => 'Falha na ação',
 'deletedtext' => '"$1" foi eliminada.
 Consulte $2 para um registro de eliminações recentes.',
 'dellogpage' => 'Registro de eliminação',
@@ -2378,7 +2394,7 @@ prossiga com cuidado.',
 # Rollback
 'rollback' => 'Reverter edições',
 'rollback_short' => 'Reverter',
-'rollbacklink' => 'voltar',
+'rollbacklink' => 'reverter',
 '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}}]]);
@@ -2520,41 +2536,41 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribuições do usuário',
-'contributions-title' => 'Contribuições do usuário $1',
+'contributions' => 'Contribuições {{GENDER:{{BASEPAGENAME}}|do usuário|da usuária}}',
+'contributions-title' => 'Contribuições {{GENDER:$1|do usuário|da usuária}} $1',
 'mycontris' => 'Minhas contribuições',
 'contribsub2' => 'Para $1 ($2)',
 'nocontribs' => 'Não foram encontradas mudanças com este critério.',
-'uctop' => ' (revisão atual)',
+'uctop' => '(atual)',
 'month' => 'Mês (inclusive anteriores):',
 'year' => 'Ano (inclusive anteriores):',
 
-'sp-contributions-newbies' => 'Mostrar só as contribuições das contas recentes',
+'sp-contributions-newbies' => 'Mostrar apenas as contribuições das novas contas',
 'sp-contributions-newbies-sub' => 'Para contas novas',
 'sp-contributions-newbies-title' => 'Contribuições de contas novas',
 'sp-contributions-blocklog' => 'Registro de bloqueios',
 'sp-contributions-deleted' => 'contribuições eliminadas',
-'sp-contributions-uploads' => 'carregamentos',
+'sp-contributions-uploads' => 'envios',
 'sp-contributions-logs' => 'registros',
 'sp-contributions-talk' => 'disc',
 'sp-contributions-userrights' => 'gerenciamento de privilégios de usuários',
 'sp-contributions-blocked-notice' => 'Este usuário atualmente está bloqueado. O registro de bloqueio mais recente é fornecido abaixo para referência:',
 'sp-contributions-blocked-notice-anon' => 'Este endereço IP encontra-se bloqueado.
 Segue, para referência, a entrada mais recente no registro de bloqueios:',
-'sp-contributions-search' => 'Pesquisar contribuições',
+'sp-contributions-search' => 'Navegar pelas contribuições',
 'sp-contributions-username' => 'Endereço de IP ou usuário:',
-'sp-contributions-toponly' => 'Mostrar somente as revisões mais recentes',
+'sp-contributions-toponly' => 'Mostrar somente as edições que sejam a última alteração',
 'sp-contributions-submit' => 'Pesquisar',
 
 # What links here
 'whatlinkshere' => 'Páginas afluentes',
-'whatlinkshere-title' => 'Páginas que apontam para "$1"',
+'whatlinkshere-title' => 'Páginas que têm links para "$1"',
 'whatlinkshere-page' => 'Página:',
 'linkshere' => "As seguintes páginas possuem links para '''[[:$1]]''':",
-'nolinkshere' => "Não existem links para '''[[:$1]]'''.",
+'nolinkshere' => "Não  links para '''[[:$1]]'''.",
 'nolinkshere-ns' => "Não há links para '''[[:$1]]''' no espaço nominal selecionado.",
 'isredirect' => 'página de redirecionamento',
-'istemplate' => 'inclusão',
+'istemplate' => 'transclusão',
 'isimage' => 'link para o arquivo',
 'whatlinkshere-prev' => '{{PLURAL:$1|anterior|$1 anteriores}}',
 'whatlinkshere-next' => '{{PLURAL:$1|próximo|próximos $1}}',
@@ -2602,8 +2618,8 @@ Isto só deve ser feito para prevenir vandalismo, e de acordo com a [[{{MediaWik
 'ipb-confirm' => 'Confirmar bloqueio',
 'badipaddress' => 'Endereço de IP inválido',
 'blockipsuccesssub' => 'Bloqueio bem sucedido',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] foi bloqueado.<br />
-Consulte a [[Special:BlockList|lista de IPs bloqueados]] para rever os bloqueios.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />
+Consulte a [[Special:BlockList|lista de bloqueios]].',
 'ipb-blockingself' => 'Você está prestes a bloquear-se a si próprio. Você tem a certeza de que pretende fazê-lo?',
 'ipb-confirmhideuser' => 'Você está prestes a bloquear um utilizador com "Ocultar nome de utilizador/IP" ativado. Isto irá suprimir o nome do usuário de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?',
 'ipb-edit-dropdown' => 'Editar motivos de bloqueio',
@@ -2653,11 +2669,11 @@ Consulte a [[Special:BlockList|lista de IPs bloqueados]] para rever os bloqueios
 O registro de bloqueio é fornecido abaixo, para referência:',
 'blocklog-showsuppresslog' => 'O usuário foi bloqueado e ocultado anteriormente.
 O registro de supressão é fornecido abaixo para referência:',
-'blocklogentry' => 'bloqueou "[[$1]]" $3. O bloqueio expira em $2.',
+'blocklogentry' => 'bloqueou "[[$1]]" por $2. $3',
 'reblock-logentry' => 'modificou parâmetros de bloqueio de [[$1]] $3. O bloqueio expira em $2.',
 'blocklogtext' => 'Este é um registro de ações de bloqueio e desbloqueio.
 Endereços IP sujeitos a bloqueio automático não são listados.
-Consulte a [[Special:BlockList|lista de IPs bloqueados]] para obter a lista de bloqueios e banimentos atualmente válidos.',
+Consulte a [[Special:BlockList|lista de bloqueios]] para obter a lista de bloqueios e banimentos em efeito neste momento.',
 'unblocklogentry' => 'desbloqueou $1',
 'block-log-flags-anononly' => 'apenas usuários anônimos',
 'block-log-flags-nocreate' => 'criação de contas desabilitada',
@@ -2799,7 +2815,7 @@ A última entrada no histórico é fornecida abaixo para referência:",
 Por favor, escolha outro nome.',
 
 # Export
-'export' => 'Exportação de páginas',
+'export' => 'Exportar páginas',
 'exporttext' => 'Você pode exportar o texto e o histórico de edições, ou de uma página em particular ou de um conjunto de páginas, para um arquivo XML.
 A partir disso, será possível importar esse conteúdo em outro wiki que utilize o software MediaWiki através da [[Special:Import|página de importações]].
 
@@ -2843,6 +2859,8 @@ Acesse [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//trans
 'thumbnail_error' => 'Erro ao criar miniatura: $1',
 'djvu_page_error' => 'página DjVu inacessível',
 'djvu_no_xml' => 'Não foi possível acessar o XML do arquivo DjVU',
+'thumbnail-temp-create' => 'Não foi possível criar o arquivo temporário de miniatura',
+'thumbnail-dest-create' => 'Não foi possível salvar a miniatura no destino',
 'thumbnail_invalid_params' => 'Parâmetros de miniatura inválidos',
 'thumbnail_dest_directory' => 'Não foi possível criar o diretório de destino',
 'thumbnail_image-type' => 'Tipo de imagem não suportado',
@@ -2889,6 +2907,9 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'import-invalid-interwiki' => 'Não é possível importar do wiki especificado.',
 'import-error-edit' => 'A página "$1" não foi importada porque você não tem permissão para editá-la.',
 'import-error-create' => 'A página "$1" não foi importada porque você não tem permissão para criá-la.',
+'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 log
 'importlogpage' => 'Registro de importações',
@@ -2900,76 +2921,85 @@ 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.',
+'javascripttest-pagetext-frameworks' => 'Escolha uma das seguintes estruturas de teste: $1',
+'javascripttest-pagetext-skins' => 'Escolha o tema para executar os testes:',
+'javascripttest-qunit-intro' => 'Veja a [$1 documentação de testes] no mediawiki.org.',
+'javascripttest-qunit-heading' => 'Suíte de ferramentas de teste JavaScript QUnit para MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Sua página de usuário',
 'tooltip-pt-anonuserpage' => 'A página de usuário para o ip com o qual você está editando',
 'tooltip-pt-mytalk' => 'Sua página de discussão',
 'tooltip-pt-anontalk' => 'Discussão sobre edições deste endereço de ip',
-'tooltip-pt-preferences' => 'Suas preferências',
-'tooltip-pt-watchlist' => 'A lista de páginas cujas alterações você está monitorando',
-'tooltip-pt-mycontris' => 'Lista das suas contribuições',
+'tooltip-pt-preferences' => 'Suas configurações',
+'tooltip-pt-watchlist' => 'Lista de alterações nas páginas que você está monitorando',
+'tooltip-pt-mycontris' => 'Listagem de suas contribuições',
 'tooltip-pt-login' => 'Você é encorajado a autenticar-se, apesar disso não ser obrigatório.',
 'tooltip-pt-anonlogin' => 'Você é encorajado a autenticar-se, apesar disso não ser obrigatório.',
 'tooltip-pt-logout' => 'Sair',
 'tooltip-ca-talk' => 'Discussão sobre o conteúdo da página',
-'tooltip-ca-edit' => 'Você pode editar esta página. Por favor, utilize o botão Mostrar Previsão antes de salvar.',
+'tooltip-ca-edit' => 'Você pode editar esta página. Use o botão "Mostrar previsão" antes de salvar.',
 'tooltip-ca-addsection' => 'Iniciar uma nova seção',
-'tooltip-ca-viewsource' => 'Esta página está protegida; você pode exibir seu código, no entanto.',
+'tooltip-ca-viewsource' => 'Esta página está protegida.
+Você pode, no entanto, visualiar seu código-fonte.',
 'tooltip-ca-history' => 'Edições anteriores desta página.',
 'tooltip-ca-protect' => 'Proteger esta página',
 'tooltip-ca-unprotect' => 'Alterou a proteção desta página',
 'tooltip-ca-delete' => 'Apagar esta página',
 'tooltip-ca-undelete' => 'Restaurar edições feitas a esta página antes da eliminação',
 'tooltip-ca-move' => 'Mover esta página',
-'tooltip-ca-watch' => 'Adicionar esta página às páginas vigiadas',
+'tooltip-ca-watch' => 'Adicionar esta página à sua lista de páginas vigiadas',
 'tooltip-ca-unwatch' => 'Remover esta página da lista de páginas vigiadas',
 'tooltip-search' => 'Pesquisar em {{SITENAME}}',
 'tooltip-search-go' => 'Ir a uma página com este exato nome, caso exista',
-'tooltip-search-fulltext' => 'Procurar por páginas contendo este texto',
-'tooltip-p-logo' => 'Página principal',
-'tooltip-n-mainpage' => 'Visitar a página principal',
-'tooltip-n-mainpage-description' => 'Visitar a página principal',
-'tooltip-n-portal' => 'Sobre o projeto',
-'tooltip-n-currentevents' => 'Informação temática sobre eventos atuais',
-'tooltip-n-recentchanges' => 'Uma lista de mudanças recentes no wiki',
-'tooltip-n-randompage' => 'Abrir uma página aleatoriamente',
-'tooltip-n-help' => 'Um local reservado para auxílio.',
-'tooltip-t-whatlinkshere' => 'Lista de todas as páginas que ligam-se a esta',
-'tooltip-t-recentchangeslinked' => 'Mudanças recentes em páginas relacionadas a esta',
+'tooltip-search-fulltext' => 'Procurar páginas que contenham este texto',
+'tooltip-p-logo' => 'Acessar a página principal',
+'tooltip-n-mainpage' => 'Acessar a página principal',
+'tooltip-n-mainpage-description' => 'Acessar a página principal',
+'tooltip-n-portal' => 'Sobre o projeto, o que se pode fazer e onde achar as coisas',
+'tooltip-n-currentevents' => 'Encontre informações sobre acontecimentos atuais',
+'tooltip-n-recentchanges' => 'A lista de mudanças recentes desta wiki.',
+'tooltip-n-randompage' => 'Acessar uma página de forma aleatória',
+'tooltip-n-help' => 'Lugar específico para obter ajuda quanto ao ambiente.',
+'tooltip-t-whatlinkshere' => 'Lista de todas as páginas que possuem links para esta',
+'tooltip-t-recentchangeslinked' => 'Mudanças recentes nas páginas para as quais esta possui links',
 'tooltip-feed-rss' => 'Feed RSS desta página',
 'tooltip-feed-atom' => 'Feed Atom desta página',
 'tooltip-t-contributions' => 'Ver as contribuições deste usuário',
 'tooltip-t-emailuser' => 'Enviar um e-mail a este usuário',
-'tooltip-t-upload' => 'Carregar arquivos',
+'tooltip-t-upload' => 'Enviar arquivos',
 'tooltip-t-specialpages' => 'Lista de páginas especiais',
 'tooltip-t-print' => 'Versão para impressão desta página',
 'tooltip-t-permalink' => 'Link permanente para esta versão desta página',
 'tooltip-ca-nstab-main' => 'Ver a página de conteúdo',
 'tooltip-ca-nstab-user' => 'Ver a página de usuário',
 'tooltip-ca-nstab-media' => 'Ver a página de mídia',
-'tooltip-ca-nstab-special' => 'Esta é uma página especial, não pode ser editada.',
+'tooltip-ca-nstab-special' => 'Esta é uma página especial. Não é possível editar seu conteúdo de forma direta.',
 'tooltip-ca-nstab-project' => 'Ver a página de projeto',
 'tooltip-ca-nstab-image' => 'Ver a página de arquivo',
 'tooltip-ca-nstab-mediawiki' => 'Ver a mensagem de sistema',
 'tooltip-ca-nstab-template' => 'Ver a predefinição',
 'tooltip-ca-nstab-help' => 'Ver a página de ajuda',
-'tooltip-ca-nstab-category' => 'Ver a página da categoria',
-'tooltip-minoredit' => 'Marcar como edição menor',
-'tooltip-save' => 'Salvaas alterações',
-'tooltip-preview' => 'Prever as alterações, por favor utilizar antes de salvar!',
-'tooltip-diff' => 'Mostrar alterações que fez a este texto.',
-'tooltip-compareselectedversions' => 'Ver as diferenças entre as duas versões selecionadas desta página.',
+'tooltip-ca-nstab-category' => 'Ver a página descritiva da categoria',
+'tooltip-minoredit' => 'Marcar esta alteração como uma edição menor',
+'tooltip-save' => 'Salva as suas alterações',
+'tooltip-preview' => 'Prevê as alterações feitas por você. Antes de salvar, use para ver se está tudo como esperado!',
+'tooltip-diff' => 'Visualizar as alterações que você fez no texto',
+'tooltip-compareselectedversions' => 'Ver o que há de diferente entre as duas versões selecionadas desta página.',
 'tooltip-watch' => 'Adicionar esta página à sua lista de páginas vigiadas',
 'tooltip-watchlistedit-normal-submit' => 'Remover títulos',
 'tooltip-watchlistedit-raw-submit' => 'Atualizar a lista de páginas vigiadas',
 'tooltip-recreate' => 'Recriar a página apesar de ter sido eliminada',
 'tooltip-upload' => 'Iniciar o carregamento',
-'tooltip-rollback' => '"{{int:rollbacklink}}" reverte, com um só clique, as edições do último editor desta página.',
-'tooltip-undo' => '"{{int:editundo}}" reverte esta edição exibindo a caixa de edição no modo de previsão, permitindo alterações adicionais e o uso do sumário de edição para justificativas.',
+'tooltip-rollback' => '"{{int:rollbacklink}}" reverte, com apenas um clique, as edições do último editor desta página.',
+'tooltip-undo' => '"desfazer" reverte esta edição e apresenta a página de edição no modo de previsão.
+Permite colocar uma justificativa no sumário da edição.',
 'tooltip-preferences-save' => 'Salvar preferências',
-'tooltip-summary' => 'Forneça um breve sumário',
+'tooltip-summary' => 'Forneça um breve resumo',
 
 # Stylesheets
 'common.css' => '/** o código CSS colocado aqui será aplicado a todos os temas */',
@@ -3076,7 +3106,7 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'file-info-size-pages' => '$1 × $2 pixels, tamanho do arquivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}',
 'file-nohires' => 'Sem resolução maior disponível.',
 'svg-long-desc' => 'arquivo SVG, de $1 × $2 pixels, tamanho: $3',
-'show-big-image' => 'Resolução completa',
+'show-big-image' => 'Resolução original',
 'show-big-image-preview' => 'Tamanho desta previsualização: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -3108,17 +3138,18 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 # Bad image list
 'bad_image_list' => 'O formato é o seguinte:
 
-Só itens da lista (linhas começando com *) são considerados.
-A primeira ligação em uma linha deve ser uma ligação para um arquivo ruim.
-Qualquer ligação posterior na mesma linha são consideradas como exceções, ou seja, páginas nas quais o arquivo pode aparecer na linha.',
+Só são reconhecidos elementos na forma de lista (linhas começadas por *).
+O primeiro link em cada linha deve direcionar para o arquivo que se pretende bloquear.
+Quaisquer outros links nessa mesma linha são considerados exceções (ou seja, páginas onde o arquivo pode estar presente).',
 
 # Metadata
 'metadata' => 'Metadados',
-'metadata-help' => "Este arquivo contém informação adicional, provavelmente adicionada a partir da câmara digital ou ''scanner'' utilizada para criar ou digitalizá-lo.
-Caso o arquivo tenha sido modificado a partir do seu estado original, alguns detalhes poderão não refletir completamente as mudanças efetuadas.",
+'metadata-help' => 'Este arquivo contém dados adicionais, provavelmente adicionados pela câmera digital ou scanner utilizado para criar ou digitalizá-lo.
+Caso o arquivo tenha sofrido alterações, alguns detalhes poderão ser diferentes do que o arquivo atual é.',
 'metadata-expand' => 'Mostrar detalhes adicionais',
 'metadata-collapse' => 'Esconder detalhes restantes',
-'metadata-fields' => 'Os campos de metadados de imagens listados nesta mensagem serão incluídos na página de descrição da imagem quando a tabela de metadados estiver recolhida. Por omissão, outros campos estarão ocultos.
+'metadata-fields' => 'Os campos de metadados de imagens listados nesta mensagem serão incluídos na página de descrição da imagem quando a tabela de metadados estiver recolhida.
+Por padrão, outros campos estarão ocultos.
 * make
 * model
 * datetimeoriginal
@@ -3523,12 +3554,12 @@ Caso o arquivo tenha sido modificado a partir do seu estado original, alguns det
 'exif-urgency-other' => 'Prioridade definida pelo usuário ($1)',
 
 # External editor support
-'edit-externally' => 'Editar este arquivo utilizando uma aplicação externa',
+'edit-externally' => 'Editar este arquivo a partir de um programa externo',
 'edit-externally-help' => '(Consulte as [//www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para maiores informações)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'todas',
-'namespacesall' => 'todas',
+'namespacesall' => 'todos',
 'monthsall' => 'todos',
 'limitall' => 'todas',
 
@@ -3723,6 +3754,9 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 'version-software' => 'Software instalado',
 'version-software-product' => 'Produto',
 'version-software-version' => 'Versão',
+'version-entrypoints' => 'URLs dos pontos de entrada',
+'version-entrypoints-header-entrypoint' => 'Ponto de entrada',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Diretório do arquivo',
@@ -3765,18 +3799,18 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'intentionallyblankpage' => 'Esta página foi intencionalmente deixada em branco e é usada para medições de performance, etc.',
 
 # External image whitelist
-'external_image_whitelist' => " # Deixe esta linha exatamente como ela é <pre>
-# Coloque uma expressão regular (apenas a parte que vai entre o //) a seguir
+'external_image_whitelist' => " # Deixe esta linha exatamente como ela está <pre>
+# Insira uma expressão regular (apenas a parte que vai entre o //) a seguir
 # Estas serão casadas com as URLs de imagens externas (''hotlinked'')
-# Aqueles que corresponderem serão exibidos como imagens, caso contrário, apenas uma ligação para a imagem será mostrada
+# Aquelas que corresponderem serão exibidas como imagens; caso contrário, apenas um link para a imagem será mostrado
 # As linhas que começam com # são tratadas como comentários
 # Isto não é sensível à capitalização
 
-# Coloque todos os fragmentos de ''regex'' acima dessa linha. Deixe esta linha exatamente como ela é</pre>",
+# Coloque todos os fragmentos de ''regex'' acima dessa linha. Deixe esta linha exatamente como ela está</pre>",
 
 # Special:Tags
 'tags' => 'Etiquetas de modificação válidas',
-'tag-filter' => 'Filtro de [[Special:Tags|etiquetas]]:',
+'tag-filter' => 'Filtrar [[Special:Tags|etiquetas]]:',
 'tag-filter-submit' => 'Filtrar',
 'tags-title' => 'Etiquetas',
 'tags-intro' => 'Esta página lista as etiquetas com que o software poderá marcar uma edição, e o seu significado.',
@@ -3857,6 +3891,8 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'newuserlog-byemail' => 'senha enviada por correio-eletrônico',
 
 # Feedback
+'feedback-bugornote' => 'Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].
+Caso contrário, você poderá usar o formulário simplificado a seguir. Seu comentário será adicionado à página "[$3 $2]", junto com o seu nome de usuário e o navegador que estiver usando neste momento.',
 'feedback-subject' => 'Assunto:',
 'feedback-message' => 'Mensagem:',
 'feedback-cancel' => 'Cancelar',
@@ -3865,7 +3901,10 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'feedback-error1' => 'Erro: O resultado da API não foi reconhecido',
 'feedback-error2' => 'Erro: A edição falhou',
 'feedback-error3' => 'Erro: A API não responde',
+'feedback-thanks' => 'Obrigado! O seu comentário foi adicionado à página "[ $2  $1 ]".',
 'feedback-close' => 'Feito',
+'feedback-bugcheck' => 'Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].',
+'feedback-bugnew' => 'Eu verifiquei. Relatar um bug novo',
 
 # API errors
 'api-error-badaccess-groups' => 'Você não tem permissão para enviar arquivos para este wiki.',
@@ -3905,4 +3944,15 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'api-error-uploaddisabled' => 'Este wiki está com o upload de arquivos desabilitado.',
 'api-error-verification-error' => 'Este arquivo pode estar corrompido ou ter a extensão errada.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days' => '$1 {{PLURAL:$1|dia|dias}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years' => '$1 {{PLURAL:$1|ano|anos}}',
+'duration-decades' => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milênio|milênios}}',
+
 );
index 5e543eb..8cf128b 100644 (file)
  * @author Rancher
  * @author Raymond
  * @author Robby
+ * @author Rotemliss
  * @author Ryan Schmidt
  * @author SPQRobin
  * @author Sanbec
  * @author Sborsody
  * @author Seb35
  * @author Sherbrooke
+ * @author Shirayuki
  * @author Shushruth
  * @author Siebrand
  * @author Singularity
@@ -554,7 +556,7 @@ The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUB
 
 {{Identical|View source}}',
 'editsectionhint' => "Tool tip shown when hovering the mouse over the link to '[{{MediaWiki:Editsection}}]' a section. Example: Edit section: Heading name",
-'toc' => 'Ini adalah judul "Daftar isi" yang terlihat pada halaman yang memiliki lebih dari 3 bagian
+'toc' => 'This is the title of the table of contents displayed in pages with more than 3 sections
 
 {{Identical|Contents}}',
 'showtoc' => 'This is the link used to show the table of contents
@@ -682,6 +684,13 @@ $1 is a filename, I think.',
 '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.'''",
 '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.
+* $1 is the namespace number
+* $2 is the namespace name in content language or {{msg-mw|blanknamespace}} for the main namespace
+* $3 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
+'invalidtitle-unknownnamespace' => 'Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.
+* $1 is the namespace number
+* $2 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
 
 # Login and logout pages
 'logouttext' => 'Log out message',
@@ -732,7 +741,9 @@ $1 is a filename, I think.',
 'nocookieslogin' => "This message is displayed when someone tried to login, but the browser doesn't accept cookies.",
 'nocookiesfornew' => "This message is displayed when the user tried to create a new account, but it failed the cross-site request forgery (CSRF) check. It could be blocking an attack, but most likely, the browser isn't  accepting cookies.",
 'nocookiesforlogin' => "{{optional}}
-This message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies). Defaults to nocookieslogin",
+This message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies).
+
+Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
 'loginsuccesstitle' => 'The title of the page saying that you are logged in. The content of the page is the message "[[MediaWiki:Loginsuccess/{{SUBPAGENAME}}]]".',
 'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is "[[MediaWiki:Loginsuccesstitle/{{SUBPAGENAME}}|{{int:loginsuccesstitle}}]]". $1 is the name of the logged in user.
 
@@ -1020,6 +1031,23 @@ When templates are expanded, there is a size limit for the number of bytes yield
 'language-converter-depth-warning' => 'Error message shown when a page uses too deeply nested language conversion syntax
 
 * <tt>$1</tt> is the value of the depth limit',
+'node-count-exceeded-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the node-count of the preprocessor exceeds the limit.',
+'node-count-exceeded-warning' => 'Error message shown when a page exceeded the node-count limit of the preprocessor
+
+* <tt>$1</tt> is the value of the node-count limit
+* <tt>$2</tt> is the value of the max node-count limit',
+'expansion-depth-exceeded-category' => 'This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the [http://meta.wikimedia.org/wiki/Help:Expansion_depth expansion depth] of the preprocessor exceeds the limit.',
+'expansion-depth-exceeded-warning' => 'Error message shown when a page exceeded the [http://meta.wikimedia.org/wiki/Help:Expansion_depth expansion depth limit] of the preprocessor
+
+* <tt>$1</tt> is the value of the depth limit
+* <tt>$2</tt> is the value of the max depth limit',
+'parser-unstrip-loop-warning' => 'This error is shown when a parser extension tag such as &lt;pre> includes a reference to itself in its own output.
+The reference must be to the exact same invocation of the tag at the same location in the source, merely writing &lt;pre>&lt;pre>&lt;/pre>&lt;/pre> will not do it.
+This is usually impossible and unlikely to happen by accident, so translation is not essential.',
+'parser-unstrip-recursion-limit' => 'This message is shown when the recursion limit for nested parser extension tags is exceeded.
+This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>...&lt;/ref>&lt;/ref>&lt;/ref>.
+
+* <tt>$1</tt> is the depth limit',
 
 # "Undo" feature
 'undo-success' => 'Text on special page to confirm edit revert. You arrive on this page by clicking on the "undo" link on a revision history special page.
@@ -1227,7 +1255,8 @@ Please note that the parameters in a log entry will appear in the log only in th
 
 # Diffs
 'history-title' => 'Displayed as page title when you click on the "history" tab. The parameter $1 is the normal page title.',
-'difference' => 'Displayed under the title when viewing the difference between two or more edits.',
+'difference-title' => 'Displayed as page title when viewing the difference between two edits of the same page. The parameter $1 is the page title of the two revisions.',
+'difference-title-multipage' => 'Displayed as page title when viewing the difference between two edits of different pages. The parameter $1 is the page title of the old revision and $2 is the page title of the new revision.',
 'difference-multipage' => 'Displayed under the title when viewing the difference between two or more pages.
 See also {{msg-mw|difference}}.',
 'lineno' => 'Message used when comparing different versions of a page (diff). $1 is a line number.',
@@ -2003,6 +2032,7 @@ Siebrand think this has to do with allowing MediaWiki to fetch remote URLs, and
 
 If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.',
 'http-bad-status' => '$1 is an HTTP error code (e.g. 404), $2 is the HTTP error message (e.g. File Not Found)',
+'http-truncated-body' => 'This is a standard HTTP error message. → Seems the connection closed prematurely. The HTTP response contained a content-length greater than the received body.',
 
 'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.',
 'nolicense' => '{{Identical|None selected}}',
@@ -4414,8 +4444,9 @@ This is being used in [[Special:Version]], preceeding the subversion revision nu
 'version-license-info' => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
 'version-software-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.',
-'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].',
+'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
+'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
+See also {{msg-mw|Version-entrypoints}}',
 'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
 'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
 'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
index 8dab70f..8c9cc20 100644 (file)
@@ -647,6 +647,9 @@ $2",
 'customjsprotected' => "Manam saqillasunkichu kay JavaScript p'anqata llamk'apuyta, huk ruraqpa kikin tiyachisqankunayuq kaptinmi.",
 'ns-specialprotected' => "{{ns:special}} suti k'itipi p'anqakunaqa manam llamk'apunallachu.",
 'titleprotected' => "Kay p'anqa sutitaqa [[User:$1|$1]] sutiyuq ruraq kamariymanta hark'arqanmi, kayraykum nispa: ''$2''.",
+'filereadonlyerror' => 'Manam atinichu "$1" sutiyuq willañiqita hukchayta, "$2" sutiyuq willañiqi churamuna ñawirillanapaq kachkaptinmi.
+
+Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
 
 # Virus scanner
 'virus-badscanner' => "Manam allintachu churapusqa: mana riqsisqa añaw maskaq: ''$1''",
@@ -729,6 +732,7 @@ Ama hina kaspa, chaskispaykiqa ruraqpa sutiykita nispa musuqmanta yaykuy.',
 'emailconfirmlink' => 'E-chaski imamaytaykita takyachiy',
 'invalidemailaddress' => "E-chaski imamaytaykiqa manam allinchu, manachá allinta qillqasqa. Ama hina kaspa, musuq allin sananchayuq imamaytaykita qillqamuy icha k'itichata ch'usaqchay.",
 'cannotchangeemail' => 'Ruraqpa rakiqunanpi e-chaski imamaytakunaqa kay wikipi manam hukchanallachu.',
+'emaildisabled' => 'Kay tiyayqa e-chaskita manam kachayta atinchu.',
 'accountcreated' => 'Rakiqunaqa kichasqañam',
 'accountcreatedtext' => '$1 sutiyuq ruraqpa rakiqunanqa kichasqañam.',
 'createaccount-title' => '{{SITENAME}}paq musuq rakiqunata kichariy',
@@ -913,7 +917,9 @@ Hark'ay hallch'api qhipaq hark'asqataqa kaypim rikunki willasunaykipaq:",
 'userinvalidcssjstitle' => "'''Paqtataq:''' Manam kanchu \"\$1\" qara. Yuyariy, kikinpa .css, .js p'anqankunaqa uchuy sanampa umalliyuqmi, ahinataq {{ns:user}}:Foo/vector.css manataq  {{ns:user}}:Foo/Vector.css nisqachu.",
 'updated' => '(Musuqchasqa)',
 'note' => "'''Musyay:'''",
-'previewnote' => "'''Yuyaykuy: Kayqa manaraq waqaychaspa qhawariymi!'''",
+'previewnote' => "'''Yuyaykuy: Kayqa qhawariyllam.'''
+Llamk'apusqaykiqa manaraqmi waqaychasqachu!",
+'continue-editing' => "Llamk'apuyta qatiykuy",
 'previewconflict' => "Rikuchkanki kay p'anqataqa, ima hinachus waqaychasqa kanqa.",
 'session_fail_preview' => "'''Achachaw! Llamk'apusqaykiqa manam waqaychasqachu, llamk'ana tiyaypa willankuna chinkaptinmi. Ama hina kaspa, musuqmanta ruraykachay. Mana atispaykiqa, [[Special:UserLogout|lluqsispa]] musuqmanta yaykuy.'''",
 'session_fail_preview_html' => "'''Achachaw! Llamk'apusqaykiqa manam waqaychasqachu, llamk'ana tiyaypa willankuna chinkaptinmi.'''
@@ -925,6 +931,7 @@ Hark'ay hallch'api qhipaq hark'asqataqa kaypim rikunki willasunaykipaq:",
 Kayqa maykunapi tukukun, mana allin wakichisqa proxy sirwiytam llamk'achiptiyki.'''",
 'edit_form_incomplete' => "'''Llamk'apuna hunt'ana p'anqamanta huk willasqakunaqa sirwiqman manam chayarqanchu; llamk'apusqaykikuna allinlla kachkaymanta iskaylla llanchispa musuqmanta ruraykachay.'''",
 'editing' => "Llamk'apuspa: $1",
+'creating' => 'Kamarispa: $1',
 'editingsection' => "Llamk'apuspa: $1 (raki)",
 'editingcomment' => "Llamk'apuspa: $1 (musuq raki)",
 'editconflict' => 'Ruray taripanakuy: $1',
@@ -985,6 +992,7 @@ Qullusqachá.",
 'edit-no-change' => "Manapuni hukchaptiykim, llamk'apusqayki manam hallch'asqachu.",
 'edit-already-exists' => "Manam atinichu musuq p'anqata kamariyta.
 Kachkañam.",
+'defaultmessagetext' => 'Ñawpaq qillqa',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Paqtataq: Kay p'anqaqa nisyu achka qullqipaq t'ikrana rurana qayayniyuqmi.
@@ -1000,6 +1008,10 @@ Chay niykunaqa manam chaninchasqachu.",
 'parser-template-loop-warning' => 'Muyurikuq pusapunam tarisqa: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Pusapunap muyurikuy saywanmi yallisqa ($1)',
 'language-converter-depth-warning' => "Rimay t'ikranap ukhu kayninpa saywanqa yallisqam ($1)",
+'node-count-exceeded-category' => "Watasqakunata nisyu yupayniyuq p'anqakuna",
+'node-count-exceeded-warning' => "P'anqaqa watasqakunata nisyu yupayniyuqmi",
+'expansion-depth-exceeded-category' => "Nisyu mast'ariy ukhu kaqniyuq p'anqakuna",
+'expansion-depth-exceeded-warning' => "P'anqaqa nisyu mast'ariy ukhu kaqniyuqmi",
 
 # "Undo" feature
 'undo-success' => 'Rurasqata kutichiyta atinkim. Manaraq kutichispaykiqa, kay qatiq wakichayta qhawariy rikunaykipaq chiqapta munasqaykichu manallachu, chaymantataq waqaychay kutichinapaq.',
@@ -1142,7 +1154,7 @@ Ama hina kaspa, hallch'akunapi qhaway.",
 
 # Suppression log
 'suppressionlog' => "Ñit'ipay hallch'asqa",
-'suppressionlogtext' => "Kay qatiq sutisuyupiqa ñaqha qullusqakunatam hark'asqakunatapas rikunki, kamachiqkunamanta pakasqa samiqniyuq. [[Special:BlockList|IP hark'ay sutisuyuta]] qhaway kunan hark'asqakunata rikunaykipaq.",
+'suppressionlogtext' => "Kay qatiq sutisuyupiqa ñaqha qullusqakunatam hark'asqakunatapas rikunki, kamachiqkunamanta pakasqa samiqniyuq. [[Special:BlockList|Hark'ay sutisuyuta]] qhaway kunan hark'asqakunata rikunaykipaq.",
 
 # History merging
 'mergehistory' => "P'anqa wiñay kawsaykunata huñuy",
@@ -1175,7 +1187,6 @@ Takyachikuy kay hukchayqa allin wiñay kawsay ñiqita ama waqllichunchu chaylla.
 
 # Diffs
 'history-title' => '"$1" p\'anqata hukchasqakunap wiñay kawsaynin',
-'difference' => '(Hukchasqapura wak kaynin)',
 'difference-multipage' => "(P'anqakunaqa manam kaqllachu)",
 'lineno' => "Siq'i $1:",
 'compareselectedversions' => "Akllasqa llamk'apusqakunata wakichay",
@@ -1560,6 +1571,7 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'newsectionsummary' => 'Musuq raki: /* $1 */',
 'rc-enhanced-expand' => 'Imaymanachakunata rikuchiy (JavaScript kananmi)',
 'rc-enhanced-hide' => 'Imaymanachakunata pakay',
+'rc-old-title' => 'ñawpaqta "$1" sutiwan kamarisqa',
 
 # Recent changes linked
 'recentchangeslinked' => "Hukchasqa t'inkimuq",
@@ -1710,6 +1722,7 @@ $1',
 'backend-fail-closetemp' => "Manam atinichu mit'alla willañiqita wichq'ayta.",
 'backend-fail-read' => 'Manam atinichu $1 sutiyuq willañiqita ñawiriyta.',
 'backend-fail-create' => 'Manam atinichu $1 sutiyuq willañiqita kamariyta.',
+'backend-fail-maxsize' => 'Manam atinichu $1 sutiyuq willañiqita kamariyta, {{PLURAL:$2|huk bytemanta|$2 bytemanta}} aswan hatun kaptinmi.',
 'backend-fail-readonly' => '"$1" sutiyuq willañiqi hallch\'ana sirwiqqa ñawirinallapaqmi kachkan, kayrayku: "$2"',
 'backend-fail-synced' => '"$1" sutiyuq willañiqiqa manam sinchichu kachkan ukhupi willañiqi hallch\'ana sirwiqkunapi',
 'backend-fail-connect' => 'Manam atinichu "$1" sutiyuq willañiqi hallch\'ana sirwiqwan t\'inkinakuyta.',
@@ -1717,6 +1730,10 @@ $1',
 'backend-fail-contenttype' => 'Manam atinichu "$1" nisqapi hallch\'ana willañiqip samiqninpa layanta yuqanchayta.',
 'backend-fail-batchsize' => "Willañiqi hallch'ana sirwiqmanqa $1 willañiqi {{PLURAL:$1|ruranayuq|ruranayuq}} tawqam qusqa; saywataq $2 {{PLURAL:$1|ruranam|ruranam}}.",
 
+# File journal errors
+'filejournal-fail-dbconnect' => "Manam atinichu \"\$1\" sutiyuq willañiqi hallch'ana sirwiqpaq p'unchawnintin hallch'awan t'inkiyta.",
+'filejournal-fail-dbquery' => 'Manam atinichu "$1" sutiyuq willañiqi hallch\'ana sirwiqpaq p\'unchawnintin hallch\'ata musuqchayta.',
+
 # Lock manager
 'lockmanager-notlocked' => 'Manam atinichu "$1" nisqata paskayta; manam hark\'asqachu.',
 'lockmanager-fail-closelock' => 'Manam atinichu "$1" nisqapaq hark\'ana willañiqita wichq\'ayta.',
@@ -1833,6 +1850,10 @@ Munaspaykiqa, [[Special:WhatLinksHere/$2|hunt'a sutisuyuta]] qhaway.",
 Ama hina kaspa, [$2 willañiqi ch'uyanchana p'anqata] qhaway astawan willachikunaykipaq.",
 'sharedupload-desc-here' => "Kay p'anqaqa $1 nisqamantam. Huk ruraykamaykunapipas llamk'achinapaq kanman.
 [$2 Willañiqi ch'uyanchana p'anqanpi] ch'uyanchaytaqa kay qatiqpim rikunki.",
+'sharedupload-desc-edit' => "Kay p'anqaqa $1 nisqamantam. Huk ruraykamaykunapipas llamk'achinapaq kanman.
+[$2 Willañiqi ch'uyanchana p'anqanpi] ch'uyanchayta llamk'apuytachá munaykiman.",
+'sharedupload-desc-create' => "Kay p'anqaqa $1 nisqamantam. Huk ruraykamaykunapipas llamk'achinapaq kanman.
+[$2 Willañiqi ch'uyanchana p'anqanpi] ch'uyanchayta llamk'apuytachá munaykiman.",
 'filepage-nofile' => 'Manam kanchu kay sutiyuq willañiqi.',
 'filepage-nofile-link' => 'Manam kanchu kay sutiyuq willañiqi, ichataq [$1 churkuytam] atinki.',
 'uploadnewversion-linktext' => 'Kay willañiqi ñaqha musuqchasqata churkuy',
@@ -2039,6 +2060,12 @@ Rikuyniykitaqa k'ullkuchaytam atinki hallch'a layata, ruraqpa sutinta (uchuy ich
 'allpagesprefix' => "Rikuchiy kay k'askaqwan qallariq p'anqakunata:",
 'allpagesbadtitle' => "Qusqa p'anqap sutinqa manam allinchu icha rimaypura, interwiki ñawpa k'askaqniyuq. P'anqa sutipaq mana saqillasqa sananchayuqchá.",
 'allpages-bad-ns' => '{{SITENAME}} tiyaypiqa "$1" suti k\'iti manam kanchu.',
+'allpages-hide-redirects' => 'Pusapunakunata pakay',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Kay p'anqapaq hallch'asqa musuqchasqatam rikuchkanki, $1 pachakamam ñaqha kanman.",
+'cachedspecial-viewing-cached-ts' => "Kay p'anqapaq hallch'asqa musuqchasqatam rikuchkanki, manachá kunallan musuqchasqachu kanman.",
+'cachedspecial-refresh-now' => 'Qhipaq kaqta qhaway.',
 
 # Special:Categories
 'categories' => 'Katiguriyakuna',
@@ -2466,7 +2493,7 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will
 'ipb-confirm' => "Hark'ayta takyachiy",
 'badipaddress' => 'IP huchhaqa manam allinchu.',
 'blockipsuccesssub' => "Ruraqqa hark'asqañam",
-'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] huchhayuq tiyayqa hark'asqañam. <br />[[Special:BlockList|Hark'asqakunamanta p'anqata]] qhaway hark'akunata hukchanaykipaq.",
+'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] nisqaqa hark'asqam. <br />[[Special:BlockList|Hark'ay sutisuyuta]] qhaway hark'akunata hukchanaykipaq.",
 'ipb-blockingself' => "Kikiykitam hark'aykachachkanki!  Chiqapta kayta rurayta munankichu?",
 'ipb-confirmhideuser' => 'Ruraqta hark\'aykachachkanki, payman "Ruraqta pakay" nisqam.  Chaywanqa manam pipas chay ruraqpa sutinta ima sutisuyupipas hallch\'apipas rikunqachu.  Chiqapta kayta rurayta munankichu?',
 'ipb-edit-dropdown' => "Hark'aypa hamunta llamk'apuy",
@@ -2516,7 +2543,7 @@ Willariy imaraykum hark'anki (ahinataq: sapaq wandaluchasqa p'anqakunamanta will
 'blocklog-showsuppresslog' => "Kay ruraqqa ñawpaqta hark'asqam pakasqapas. Ñit'ipay hallch'ataqa kaypim rikunki willasunaykipaq:",
 'blocklogentry' => "hark'an [[$1]]-ta kay pachakama: $2 $3",
 'reblock-logentry' => "hukchan [[$1]]-paq hark'ana allinchanakunata kay pachakama hark'aspa: $2 $3",
-'blocklogtext' => "Kayqa ruraqta hark'asqakunap qispichisqakunappas hallch'anmi. Kikinmanta hark'asqa tiyaykunataqa manam kaypi rikunkichu. [[Special:BlockList|Hark'asqakunamanta p'anqata]] qhaway kunan hark'asqakunata rikunaykipaq.",
+'blocklogtext' => "Kayqa ruraqta hark'asqakunap qispichisqakunappas hallch'anmi. Kikinmanta hark'asqa tiyaykunataqa manam kaypi rikunkichu. [[Special:BlockList|Hark'ay sutisuyuta]] qhaway kunan hark'asqakunata rikunaykipaq.",
 'unblocklogentry' => 'paskan "$1"-ta hark\'asqa kaymanta',
 'block-log-flags-anononly' => 'sutinnaqlla',
 'block-log-flags-nocreate' => 'rakiquna kichariyman ama nisqa',
@@ -2763,7 +2790,7 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 
 # JavaScriptTest
 'javascripttest' => 'JavaScript llanchiy',
-'javascripttest-disabled' => 'Kay ruranamanqa ama nisqam.',
+'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',
@@ -3570,6 +3597,9 @@ MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIY
 'version-software' => "Tiyachisqa llamp'u kaq",
 'version-software-product' => 'Ruruchisqa',
 'version-software-version' => 'Musuqchasqa',
+'version-entrypoints' => "Yaykuna t'uksi URL",
+'version-entrypoints-header-entrypoint' => "Yaykuna t'uksi",
+'version-entrypoints-header-url' => 'URL tiyay',
 
 # Special:FilePath
 'filepath' => 'Willañiqi ñan',
@@ -3757,4 +3787,15 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'api-error-uploaddisabled' => 'Kay wikipiqa manam churkuyta atinkichu.',
 'api-error-verification-error' => "Kay willañiqiqa waqllisqachá, icha pantasqa k'askaqniyuqchá.",
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sikundu|sikundukuna}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minutu|minutukuna}}',
+'duration-hours' => '$1 {{PLURAL:$1|ura|urakuna}}',
+'duration-days' => "{{PLURAL:$1|p'unchaw|p'unchawkuna}}",
+'duration-weeks' => '{{PLURAL:$1|simana|simanakuna}}',
+'duration-years' => '{{PLURAL:$1|wata|watakuna}}',
+'duration-decades' => '{{PLURAL:$1|chunkawata|chunkawatakuna}}',
+'duration-centuries' => '{{PLURAL:$1|pachakwata|pachakwatakuna}}',
+'duration-millennia' => '{{PLURAL:$1|waranqawata|waranqawatakuna}}',
+
 );
index 98c5502..b45718d 100644 (file)
@@ -458,7 +458,6 @@ Kay (kaykunachu) kachashkakunaka cunkashkami kashka.",
 
 # Diffs
 'history-title' => '"$1" pankapa killkaykunapa wiñay kawsay',
-'difference' => '(imashpa shikan shikanmi kan)',
 'lineno' => '$1 aspi',
 'compareselectedversions' => 'Kay akllashka pankakunaka imashpa mana shinami kapan willana',
 'editundo' => 'Kutichina',
index e7a8102..69b06e3 100644 (file)
@@ -15,367 +15,366 @@ $fallback = 'it';
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Link cun la sotliniadura',
-'tog-justify'                 => 'Paràgraf: giustifiché',
-'tog-hideminor'               => 'Nascond al mudefghi znini int la pàgina "Ultum mudèfghi"',
-'tog-hidepatrolled'           => "Nascònd j cambiamént verifichèdi int'aglj ultum mudèfigh",
-'tog-newpageshidepatrolled'   => 'Nascònd al pàgin verifichèdi da la lèsta dal pàgin növi',
-'tog-extendwatchlist'         => "Slèrga la funziòn \"tènn sot occ\" d'mod ch'us pòsa avdé toti al mudefchi, no sol l'ultma.",
-'tog-usenewrc'                => "Drova agl'j ultmi mudèfchi avanzëdi (u j vô JavaScript)",
-'tog-numberheadings'          => "Titul d'un paràgraf ch'l'à un nòmar daparlò",
-'tog-showtoolbar'             => "Fam avdé la bara d'j strumént (u j vó JavaScript)",
-'tog-editondblclick'          => 'Mudèfiga al pàgin scjazènd do volt (u j vò JavaScript)',
-'tog-editsection'             => "S't'vù l'abilitaziòn ad'cambié al seziòn cum e' link [mudèfica]",
+'tog-underline' => 'Link cun la sotliniadura',
+'tog-justify' => 'Paràgraf: giustifiché',
+'tog-hideminor' => 'Nascond al mudefghi znini int la pàgina "Ultum mudèfghi"',
+'tog-hidepatrolled' => "Nascònd j cambiamént verifichèdi int'aglj ultum mudèfigh",
+'tog-newpageshidepatrolled' => 'Nascònd al pàgin verifichèdi da la lèsta dal pàgin növi',
+'tog-extendwatchlist' => "Slèrga la funziòn \"tènn sot occ\" d'mod ch'us pòsa avdé toti al mudefchi, no sol l'ultma.",
+'tog-usenewrc' => "Drova agl'j ultmi mudèfchi avanzëdi (u j vô JavaScript)",
+'tog-numberheadings' => "Titul d'un paràgraf ch'l'à un nòmar daparlò",
+'tog-showtoolbar' => "Fam avdé la bara d'j strumént (u j vó JavaScript)",
+'tog-editondblclick' => 'Mudèfiga al pàgin scjazènd do volt (u j vò JavaScript)',
+'tog-editsection' => "S't'vù l'abilitaziòn ad'cambié al seziòn cum e' link [mudèfica]",
 'tog-editsectiononrightclick' => "S't'vù l'abilitaziòn ad cambié al seziòn <br />scjazénd e tast a dèstra sora e titul (u j vò JavaScript)",
-'tog-showtoc'                 => "Fam avdé l'indiz (sol par al pàgin cun piò d'3 seziòn)",
-'tog-rememberpassword'        => "Arcurdam la parola d'ordin, par piasé (fèn a un masum $1 {{PLURAL:$1|dè|dè}})",
-'tog-watchcreations'          => "Mett insèn al pàgin ch't'e' fat adès, intla lèsta da tní sot'occ",
-'tog-watchdefault'            => "Mett insèn al pàgin ch'a j ò lavurè sora int la lèsta dal pàgin da tnì sot'òcc",
-'tog-watchmoves'              => "Mett insèn al pàgin ch'a j ò spustè int la lèsta dal pàgin da tnì sot'òcc",
-'tog-watchdeletion'           => "Mett insèn al pàgin ch'a j ò scanzlè int la lèsta dal pàgin da tnì d'occ",
-'tog-minordefault'            => 'Ségna tot al mudèfic coma "zníni" s\'l\'utent làsa la casèla vuta',
-'tog-previewontop'            => "Fam avdé l'anteprèma sora casèla d'mudèfica invezi che dciotta",
-'tog-previewonfirst'          => "Fa' avdé l'anteprèma dop c'u's fa la prèma mudèfica",
-'tog-nocache'                 => "T'an stêga a tní in tla memoria al pàgin",
-'tog-enotifwatchlistpages'    => "Fam' save' par e-mail quènd una pàgina dal mij l'è steda modifichèda",
-'tog-enotifusertalkpages'     => "Fam' save' par e-mail quènd la mi pàgina dal discusiòn l'è steda modifichèda",
-'tog-enotifminoredits'        => "Fam' save' par e-mail tòt al mudefchi, neca al znini",
-'tog-enotifrevealaddr'        => "Lasa avdè e' mi indirèzi d'posta eletrònica int'j mesàg d'nutèfica",
-'tog-shownumberswatching'     => "Fam' avdè e' nòmar d'j utent ch'j tèn sta pàgina sot occ",
-'tog-oldsig'                  => 'Anteprèma dla fírma bona',
-'tog-fancysig'                => "Tràta la firma cumpagna e' test int'la wiki (senza nissön ligam automatich)",
-'tog-externaleditor'          => "Drova sempar un prugràma d'scritura esteran (editor testuale)",
-'tog-externaldiff'            => 'Drova sempar un prugràma comparator esteran (sol par j utent espert)',
-'tog-showjumplinks'           => "Fa' funzionè j leghèm d'acesibilitè tipo \"Va' a\"",
-'tog-uselivepreview'          => 'Drova la funziòn "Anteprèma dal viv" (u j vo Javascript; sperimentêl)',
-'tog-forceeditsummary'        => "Dam la vos quènd l'ugèt dla mudèfica l'è vut",
-'tog-watchlisthideown'        => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
-'tog-watchlisthidebots'       => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
-'tog-watchlisthideminor'      => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
-'tog-watchlisthideliu'        => "In tla lèsta da tnì d'occ, nascond al mudèfic d'j utent registrè",
-'tog-watchlisthideanons'      => "In tla lèsta da tnì d'occ, nascond al mudèfic d'j utent senza nom",
-'tog-watchlisthidepatrolled'  => "Nascond tòt al mudèfic za cuntrulèdi in tla lèsta dal pàgin da tnì d'occ",
-'tog-ccmeonemails'            => "Mènd'm una còpia d'j mesèg ch'a spedèss a j étar druvador",
-'tog-diffonly'                => "T'an fëga avdé e' contnù dla pàgina dop e' cunfront tra l'versiòn",
-'tog-showhiddencats'          => "Fa'm avdé al categurèj nascosti",
-'tog-norollbackdiff'          => "T'an fèga avdé al diferenzi dop d'avé recuperè l'ultma versiòn",
-
-'underline-always'  => 'Sempar',
-'underline-never'   => 'Mai',
+'tog-showtoc' => "Fam avdé l'indiz (sol par al pàgin cun piò d'3 seziòn)",
+'tog-rememberpassword' => "Arcurdam la parola d'ordin, par piasé (fèn a un masum $1 {{PLURAL:$1|dè|dè}})",
+'tog-watchcreations' => "Mett insèn al pàgin ch't'e' fat adès, intla lèsta da tní sot'occ",
+'tog-watchdefault' => "Mett insèn al pàgin ch'a j ò lavurè sora int la lèsta dal pàgin da tnì sot'òcc",
+'tog-watchmoves' => "Mett insèn al pàgin ch'a j ò spustè int la lèsta dal pàgin da tnì sot'òcc",
+'tog-watchdeletion' => "Mett insèn al pàgin ch'a j ò scanzlè int la lèsta dal pàgin da tnì d'occ",
+'tog-minordefault' => 'Ségna tot al mudèfic coma "zníni" s\'l\'utent làsa la casèla vuta',
+'tog-previewontop' => "Fam avdé l'anteprèma sora casèla d'mudèfica invezi che dciotta",
+'tog-previewonfirst' => "Fa' avdé l'anteprèma dop c'u's fa la prèma mudèfica",
+'tog-nocache' => "T'an stêga a tní in tla memoria al pàgin",
+'tog-enotifwatchlistpages' => "Fam' save' par e-mail quènd una pàgina dal mij l'è steda modifichèda",
+'tog-enotifusertalkpages' => "Fam' save' par e-mail quènd la mi pàgina dal discusiòn l'è steda modifichèda",
+'tog-enotifminoredits' => "Fam' save' par e-mail tòt al mudefchi, neca al znini",
+'tog-enotifrevealaddr' => "Lasa avdè e' mi indirèzi d'posta eletrònica int'j mesàg d'nutèfica",
+'tog-shownumberswatching' => "Fam' avdè e' nòmar d'j utent ch'j tèn sta pàgina sot occ",
+'tog-oldsig' => 'Anteprèma dla fírma bona',
+'tog-fancysig' => "Tràta la firma cumpagna e' test int'la wiki (senza nissön ligam automatich)",
+'tog-externaleditor' => "Drova sempar un prugràma d'scritura esteran (editor testuale)",
+'tog-externaldiff' => 'Drova sempar un prugràma comparator esteran (sol par j utent espert)',
+'tog-showjumplinks' => "Fa' funzionè j leghèm d'acesibilitè tipo \"Va' a\"",
+'tog-uselivepreview' => 'Drova la funziòn "Anteprèma dal viv" (u j vo Javascript; sperimentêl)',
+'tog-forceeditsummary' => "Dam la vos quènd l'ugèt dla mudèfica l'è vut",
+'tog-watchlisthideown' => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
+'tog-watchlisthidebots' => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
+'tog-watchlisthideminor' => "Nascond al mi mudèfic dala lèsta dal pàgin da tnì d'occ",
+'tog-watchlisthideliu' => "In tla lèsta da tnì d'occ, nascond al mudèfic d'j utent registrè",
+'tog-watchlisthideanons' => "In tla lèsta da tnì d'occ, nascond al mudèfic d'j utent senza nom",
+'tog-watchlisthidepatrolled' => "Nascond tòt al mudèfic za cuntrulèdi in tla lèsta dal pàgin da tnì d'occ",
+'tog-ccmeonemails' => "Mènd'm una còpia d'j mesèg ch'a spedèss a j étar druvador",
+'tog-diffonly' => "T'an fëga avdé e' contnù dla pàgina dop e' cunfront tra l'versiòn",
+'tog-showhiddencats' => "Fa'm avdé al categurèj nascosti",
+'tog-norollbackdiff' => "T'an fèga avdé al diferenzi dop d'avé recuperè l'ultma versiòn",
+
+'underline-always' => 'Sempar',
+'underline-never' => 'Mai',
 'underline-default' => "Drova agl'impustaziòn d'e' browser",
 
 # Font style option in Special:Preferences
-'editfont-style'     => "Stil d'e' font dl'àrea d'mudèfica",
-'editfont-default'   => "Predefinì d'e' navigador",
+'editfont-style' => "Stil d'e' font dl'àrea d'mudèfica",
+'editfont-default' => "Predefinì d'e' navigador",
 'editfont-monospace' => 'Font monospazi',
 'editfont-sansserif' => 'Font sans-serif',
-'editfont-serif'     => 'Font serif',
+'editfont-serif' => 'Font serif',
 
 # Dates
-'sunday'        => ' Dmènga',
-'monday'        => 'Lùn',
-'tuesday'       => 'Mért',
-'wednesday'     => 'Mircual',
-'thursday'      => ' Zuba',
-'friday'        => 'Vënar',
-'saturday'      => 'Sábat',
-'sun'           => 'Dmè',
-'mon'           => 'Lun',
-'tue'           => 'Mrt',
-'wed'           => 'Mir',
-'thu'           => 'Zob',
-'fri'           => 'Ven',
-'sat'           => 'Sàb',
-'january'       => 'Znèr',
-'february'      => 'Febrér',
-'march'         => 'Mêrz',
-'april'         => 'Abril',
-'may_long'      => 'Maz',
-'june'          => 'Zógn',
-'july'          => 'Lój',
-'august'        => 'Agòst',
-'september'     => 'Setémbar',
-'october'       => 'Utóbar',
-'november'      => 'Nuvèmbar',
-'december'      => 'Dizèmbar',
-'january-gen'   => 'Znèr',
-'february-gen'  => 'Fevrer',
-'march-gen'     => 'Mèrz',
-'april-gen'     => 'Abril',
-'may-gen'       => 'Maz',
-'june-gen'      => 'Zògn',
-'july-gen'      => 'Lòj',
-'august-gen'    => 'Agòst',
+'sunday' => ' Dmènga',
+'monday' => 'Lùn',
+'tuesday' => 'Mért',
+'wednesday' => 'Mircual',
+'thursday' => ' Zuba',
+'friday' => 'Vënar',
+'saturday' => 'Sábat',
+'sun' => 'Dmè',
+'mon' => 'Lun',
+'tue' => 'Mrt',
+'wed' => 'Mir',
+'thu' => 'Zob',
+'fri' => 'Ven',
+'sat' => 'Sàb',
+'january' => 'Znèr',
+'february' => 'Febrér',
+'march' => 'Mêrz',
+'april' => 'Abril',
+'may_long' => 'Maz',
+'june' => 'Zógn',
+'july' => 'Lój',
+'august' => 'Agòst',
+'september' => 'Setémbar',
+'october' => 'Utóbar',
+'november' => 'Nuvèmbar',
+'december' => 'Dizèmbar',
+'january-gen' => 'Znèr',
+'february-gen' => 'Fevrer',
+'march-gen' => 'Mèrz',
+'april-gen' => 'Abril',
+'may-gen' => 'Maz',
+'june-gen' => 'Zògn',
+'july-gen' => 'Lòj',
+'august-gen' => 'Agòst',
 'september-gen' => 'Setèmbar',
-'october-gen'   => 'Utobar',
-'november-gen'  => 'Nuvèmbar',
-'december-gen'  => 'Dizèmbar',
-'jan'           => 'znèr',
-'feb'           => 'feb',
-'mar'           => 'mêrz',
-'apr'           => 'abr',
-'may'           => 'maz',
-'jun'           => 'zógn',
-'jul'           => 'lój',
-'aug'           => 'ago',
-'sep'           => 'set',
-'oct'           => 'utob',
-'nov'           => 'nuv',
-'dec'           => 'diz',
+'october-gen' => 'Utobar',
+'november-gen' => 'Nuvèmbar',
+'december-gen' => 'Dizèmbar',
+'jan' => 'znèr',
+'feb' => 'feb',
+'mar' => 'mêrz',
+'apr' => 'abr',
+'may' => 'maz',
+'jun' => 'zógn',
+'jul' => 'lój',
+'aug' => 'ago',
+'sep' => 'set',
+'oct' => 'utob',
+'nov' => 'nuv',
+'dec' => 'diz',
 
 # Categories related messages
-'pagecategories'                 => '{{PLURAL:$1|Categurèja|Categurei}}',
-'category_header'                => 'Articul int la categurèja "$1"',
-'subcategories'                  => 'Sòtacategurèja',
-'category-media-header'          => 'File int la categurèja "$1"',
-'category-empty'                 => "Al dè d'incù 'sta categurèja què l'à na d'pàgin né d'archîvi multimediêl",
-'hidden-categories'              => '{{PLURAL:$1|Categurèja ardupèda|Categurèi ardupèdi}}',
-'hidden-category-category'       => 'Categurèj nascosti',
-'category-subcat-count'          => "{{PLURAL:$2|Sta categurèja l'à sol òna sota-categurèja|Sta categurèja l'à  {{PLURAL:$1|sota-categurèja|$1 sot-categuréj}}, sora $2 ch'l'è é tutel.}}",
-'category-subcat-count-limited'  => "Sta categurèja-què l'à dentar {{PLURAL:$1|la sòt-categurèja| i $1 sòt-categurèj}} ch'j vèn dop.",
-'category-article-count'         => "{{PLURAL:$2|Sta categuréja l'à sol sta pàgina què|In sta categuréja u j sta {{PLURAL:$1|sta pàgina|$1 pàgin}} sora $2, ch'l'è e' tutel.}}",
+'pagecategories' => '{{PLURAL:$1|Categurèja|Categurei}}',
+'category_header' => 'Articul int la categurèja "$1"',
+'subcategories' => 'Sòtacategurèja',
+'category-media-header' => 'File int la categurèja "$1"',
+'category-empty' => "Al dè d'incù 'sta categurèja què l'à na d'pàgin né d'archîvi multimediêl",
+'hidden-categories' => '{{PLURAL:$1|Categurèja ardupèda|Categurèi ardupèdi}}',
+'hidden-category-category' => 'Categurèj nascosti',
+'category-subcat-count' => "{{PLURAL:$2|Sta categurèja l'à sol òna sota-categurèja|Sta categurèja l'à  {{PLURAL:$1|sota-categurèja|$1 sot-categuréj}}, sora $2 ch'l'è é tutel.}}",
+'category-subcat-count-limited' => "Sta categurèja-què l'à dentar {{PLURAL:$1|la sòt-categurèja| i $1 sòt-categurèj}} ch'j vèn dop.",
+'category-article-count' => "{{PLURAL:$2|Sta categuréja l'à sol sta pàgina què|In sta categuréja u j sta {{PLURAL:$1|sta pàgina|$1 pàgin}} sora $2, ch'l'è e' tutel.}}",
 'category-article-count-limited' => "Sta categurèja-què l'à dentar {{PLURAL:$1| 'sta pàgina|'sti pàgin}} a què sòta.",
-'category-file-count'            => "{{PLURAL:$2|Sta categuréja l'à sol sta pàgina què|In sta categuréja u j sta {{PLURAL:$1|sta pàgina|$1 pàgin}} sora $2, ch'l'è e' tutel.}}",
-'category-file-count-limited'    => "In sta categurèja-què {{PLURAL:$1|u j è la pàgina|agl'j è al pàgin}} a què sòta.",
-'listingcontinuesabbrev'         => 'inênz',
-'index-category'                 => 'Pàgina indicizëda',
-'noindex-category'               => ' Pàgina non indicizëda',
-
-'about'         => "A prupòsit d'",
-'article'       => 'Artècual',
-'newwindow'     => "(la s'avèra int'una fnèstra nova)",
-'cancel'        => 'Làsa perdar',
+'category-file-count' => "{{PLURAL:$2|Sta categuréja l'à sol sta pàgina què|In sta categuréja u j sta {{PLURAL:$1|sta pàgina|$1 pàgin}} sora $2, ch'l'è e' tutel.}}",
+'category-file-count-limited' => "In sta categurèja-què {{PLURAL:$1|u j è la pàgina|agl'j è al pàgin}} a què sòta.",
+'listingcontinuesabbrev' => 'inênz',
+'index-category' => 'Pàgina indicizëda',
+'noindex-category' => ' Pàgina non indicizëda',
+
+'about' => "A prupòsit d'",
+'article' => 'Artècual',
+'newwindow' => "(la s'avèra int'una fnèstra nova)",
+'cancel' => 'Làsa perdar',
 'moredotdotdot' => ' Ad piò…',
-'mypage'        => 'La mi pàgina',
-'mytalk'        => 'Al mi cunversaziòn',
-'anontalk'      => "Ciacarédi par 'st'indirèzz IP",
-'navigation'    => 'Navgaziòn',
-'and'           => '&#32;e',
+'mypage' => 'La mi pàgina',
+'mytalk' => 'Al mi cunversaziòn',
+'anontalk' => "Ciacarédi par 'st'indirèzz IP",
+'navigation' => 'Navgaziòn',
+'and' => '&#32;e',
 
 # Cologne Blue skin
-'qbfind'         => 'Tróva',
-'qbbrowse'       => 'Sföja',
-'qbedit'         => 'Mudèfica',
-'qbpageoptions'  => 'Upziòn dla pàgina',
-'qbpageinfo'     => 'Infurmaziòn sora la pàgina',
-'qbmyoptions'    => 'Al mi pàgin',
+'qbfind' => 'Tróva',
+'qbbrowse' => 'Sföja',
+'qbedit' => 'Mudèfica',
+'qbpageoptions' => 'Upziòn dla pàgina',
+'qbpageinfo' => 'Infurmaziòn sora la pàgina',
+'qbmyoptions' => 'Al mi pàgin',
 'qbspecialpages' => 'Pàgin particulèri',
-'faq'            => 'Question frequenti',
-'faqpage'        => 'Prugèt:Question frequenti',
+'faq' => 'Question frequenti',
+'faqpage' => 'Prugèt:Question frequenti',
 
 # Vector skin
 'vector-action-addsection' => 'Zonta una cjacarèda',
-'vector-action-delete'     => 'Scanzèla',
-'vector-action-move'       => 'Chèmbia nòm',
-'vector-action-protect'    => 'Metti-j una pruteziò',
-'vector-action-undelete'   => 'Armett a post',
-'vector-action-unprotect'  => 'Sbloca',
-
-'errorpagetitle'   => "Oci! T'ê fat una capèla",
-'returnto'         => 'Torna indrì a $1.',
-'tagline'          => 'Da {{SITENAME}}',
-'help'             => "Êt absogn d'una man?",
-'search'           => 'Zerca',
-'searchbutton'     => 'Zerca',
-'searcharticle'    => 'Và pù',
-'history'          => "Stória d'la pàgina",
-'history_short'    => 'Stória',
+'vector-action-delete' => 'Scanzèla',
+'vector-action-move' => 'Chèmbia nòm',
+'vector-action-protect' => 'Metti-j una pruteziò',
+'vector-action-undelete' => 'Armett a post',
+'vector-action-unprotect' => 'Sbloca',
+
+'errorpagetitle' => "Oci! T'ê fat una capèla",
+'returnto' => 'Torna indrì a $1.',
+'tagline' => 'Da {{SITENAME}}',
+'help' => "Êt absogn d'una man?",
+'search' => 'Zerca',
+'searchbutton' => 'Zerca',
+'searcharticle' => 'Và pù',
+'history' => "Stória d'la pàgina",
+'history_short' => 'Stória',
 'printableversion' => 'Versiòn bona da stampè',
-'permalink'        => 'Culegament fèss',
-'edit'             => 'Mudèfica',
-'create'           => 'Fa nov/a',
-'editthispage'     => 'Mudèfica sta pàgina',
-'delete'           => 'Scanzèla',
-'protect'          => 'Metti-j una pruteziòn',
-'protect_change'   => 'chèmbia',
-'newpage'          => 'Pàgina nova',
-'talkpage'         => 'Cunversaziòn',
+'permalink' => 'Culegament fèss',
+'edit' => 'Mudèfica',
+'create' => 'Fa nov/a',
+'editthispage' => 'Mudèfica sta pàgina',
+'delete' => 'Scanzèla',
+'protect' => 'Metti-j una pruteziòn',
+'protect_change' => 'chèmbia',
+'newpage' => 'Pàgina nova',
+'talkpage' => 'Cunversaziòn',
 'talkpagelinktext' => 'Cunversaziòn',
-'personaltools'    => 'Strumént persunèl',
-'talk'             => 'Cunversaziòn',
-'views'            => 'Chi èl pasé da que',
-'toolbox'          => 'Strumént',
-'otherlanguages'   => 'Ètri lènguv',
-'redirectedfrom'   => '(Ri-direziòn da <b>$1</b>)',
-'redirectpagesub'  => "Pàgina d're-indirezzament",
-'lastmodifiedat'   => "L'ultum c'l'à lavurè atoran a 'sta pàgina da $2, a $1.",
-'jumpto'           => 'Sbèlza a què:',
+'personaltools' => 'Strumént persunèl',
+'talk' => 'Cunversaziòn',
+'views' => 'Chi èl pasé da que',
+'toolbox' => 'Strumént',
+'otherlanguages' => 'Ètri lènguv',
+'redirectedfrom' => '(Ri-direziòn da <b>$1</b>)',
+'redirectpagesub' => "Pàgina d're-indirezzament",
+'lastmodifiedat' => "L'ultum c'l'à lavurè atoran a 'sta pàgina da $2, a $1.",
+'jumpto' => 'Sbèlza a què:',
 'jumptonavigation' => 'navgaziòn',
-'jumptosearch'     => 'zerca',
+'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).
-'aboutsite'      => 'A prupòsit de {{SITENAME}}',
-'aboutpage'      => 'Project: A pruposit',
-'copyright'      => "Oci! T'an fèga e' patàca. Sora 'ste scrètt u j è e' brevet $1.",
-'copyrightpage'  => "{{ns:project}}:Brevèt d'l'autor",
-'disclaimers'    => 'Infurmaziòn legêli',
+'aboutsite' => 'A prupòsit de {{SITENAME}}',
+'aboutpage' => 'Project: A pruposit',
+'copyright' => "Oci! T'an fèga e' patàca. Sora 'ste scrètt u j è e' brevet $1.",
+'copyrightpage' => "{{ns:project}}:Brevèt d'l'autor",
+'disclaimers' => 'Infurmaziòn legêli',
 'disclaimerpage' => 'Project: Avìs generèl',
-'edithelp'       => 'Livar dal spiegaziòn',
-'edithelppage'   => 'Help: Scrivar un artècul',
-'helppage'       => 'Help:Tòt j argumént',
-'mainpage'       => 'Prèma Pagina',
-'privacy'        => 'Léz sora agli infurmaziòn persunèli',
-'privacypage'    => 'Project: Léz sora agli infurmaziòn persunèli',
+'edithelp' => 'Livar dal spiegaziòn',
+'edithelppage' => 'Help: Scrivar un artècul',
+'helppage' => 'Help:Tòt j argumént',
+'mainpage' => 'Prèma Pagina',
+'privacy' => 'Léz sora agli infurmaziòn persunèli',
+'privacypage' => 'Project: Léz sora agli infurmaziòn persunèli',
 
 'badaccess' => 'Parméss non sufizént',
 
-'retrievedfrom'       => 'Tiré fora da "$1"',
-'youhavenewmessages'  => "A j ò fët ch't'epa $1 ($2).",
-'newmessageslink'     => 'mesàz nuv',
+'retrievedfrom' => 'Tiré fora da "$1"',
+'youhavenewmessages' => "A j ò fët ch't'epa $1 ($2).",
+'newmessageslink' => 'mesàz nuv',
 'newmessagesdifflink' => "U j è una quèlca diferenza cun l'ultma versiòn",
-'editsection'         => 'Mudèfica',
-'editold'             => 'mudèfica',
-'editlink'            => 'mudèfiga',
-'viewsourcelink'      => "guèrda e' codiz surgént",
-'editsectionhint'     => 'Mudèfica la seziòn: $1',
-'toc'                 => 'Indice',
-'showtoc'             => "fam'avdé",
-'hidetoc'             => 'ardòpa',
-'site-rss-feed'       => 'Emissiòn RSS $1',
-'site-atom-feed'      => 'Emissiòn Atom $1',
-'page-rss-feed'       => 'Canël RSS par "$1"',
-'page-atom-feed'      => 'Canël Atom par "$1"',
-'red-link-title'      => "Ciò! $1 (sta pàgina la n'esèst incora)",
+'editsection' => 'Mudèfica',
+'editold' => 'mudèfica',
+'editlink' => 'mudèfiga',
+'viewsourcelink' => "guèrda e' codiz surgént",
+'editsectionhint' => 'Mudèfica la seziòn: $1',
+'toc' => 'Indice',
+'showtoc' => "fam'avdé",
+'hidetoc' => 'ardòpa',
+'site-rss-feed' => 'Emissiòn RSS $1',
+'site-atom-feed' => 'Emissiòn Atom $1',
+'page-rss-feed' => 'Canël RSS par "$1"',
+'page-atom-feed' => 'Canël Atom par "$1"',
+'red-link-title' => "Ciò! $1 (sta pàgina la n'esèst incora)",
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Artécul',
-'nstab-user'     => 'Pàgina persunèla',
-'nstab-special'  => 'Pàgina particulèra',
-'nstab-project'  => "Pàgina dagl'infurmaziòn",
-'nstab-image'    => 'File',
+'nstab-main' => 'Artécul',
+'nstab-user' => 'Pàgina persunèla',
+'nstab-special' => 'Pàgina particulèra',
+'nstab-project' => "Pàgina dagl'infurmaziòn",
+'nstab-image' => 'File',
 'nstab-template' => 'Mudel',
 'nstab-category' => 'Categurèja',
 
 # General errors
-'missing-article'    => "E' database u n'à brisa truvé e'scret d'una pàgina ch'la avrebb duvu truvè sot e' nom di \"\$1\" \$2.
+'missing-article' => "E' database u n'à brisa truvé e'scret d'una pàgina ch'la avrebb duvu truvè sot e' nom di \"\$1\" \$2.
 
 Quest é suzed d'solit in te méntr d'un cuntrol d'do version vèci intla storia d'una pàgina. E' pò esar suzest parchè l'è stè cjamé un culegamént a una pàgina scanzleda o parchè l'è stè cjamé un cunfront d'dò versiòn ch'j n'esést piò.
 
 S' u n'è brisa acsè, t'é scvert par chès un bug int'é software.
 Par piasé, fa raport a un [[Special:ListUsers/sysop|aministrador]] cun la nota de l'indirezzi dla pàgina.",
 'missingarticle-rev' => '(revision n°: $1)',
-'badtitletext'       => "La pàgina ch' t'ê cmandè, l'è vuda, sbaglieda o ta l'ê scrètta cun dal lettar particulèri. Oppure, ê pò dès ch'u j sèja un eror inter-lèngua o inter-wiki. Guèrda ben cus t'e scrètt: êt druvè dal lettar cu n' s pò druvè in t'j nom dal pàgin?",
-'viewsource'         => "Guèrda e' codiz surgént",
+'badtitletext' => "La pàgina ch' t'ê cmandè, l'è vuda, sbaglieda o ta l'ê scrètta cun dal lettar particulèri. Oppure, ê pò dès ch'u j sèja un eror inter-lèngua o inter-wiki. Guèrda ben cus t'e scrètt: êt druvè dal lettar cu n' s pò druvè in t'j nom dal pàgin?",
+'viewsource' => "Guèrda e' codiz surgént",
 
 # Login and logout pages
-'yourname'                => 'Soranòm:',
-'yourpassword'            => 'Paróla segreta:',
-'remembermypassword'      => "Regèstra la mi parola d'ordin sora ste computer (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'login'                   => 'Va dentar',
+'yourname' => 'Soranòm:',
+'yourpassword' => 'Paróla segreta:',
+'remembermypassword' => "Regèstra la mi parola d'ordin sora ste computer (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'login' => 'Va dentar',
 'nav-login-createaccount' => 'Va dentar / Èla la prèma volta?',
-'userlogin'               => 'Vèn dentar/A sit nov?',
-'logout'                  => 'Va fora',
-'userlogout'              => 'Và fora',
-'nologinlink'             => 'Iscrivat adès',
-'mailmypassword'          => "Mènda una nova parola d'ordin cun l'e-mail",
+'userlogin' => 'Vèn dentar/A sit nov?',
+'logout' => 'Va fora',
+'userlogout' => 'Và fora',
+'nologinlink' => 'Iscrivat adès',
+'mailmypassword' => "Mènda una nova parola d'ordin cun l'e-mail",
 
 # Edit page toolbar
-'bold_sample'     => "Pàroli in '''gros'''",
-'bold_tip'        => 'Gros',
-'italic_sample'   => 'Pàroli in cursiv',
-'italic_tip'      => 'Pàroli in cursìv',
-'link_sample'     => "Nòm d'e' culegamént",
-'link_tip'        => 'Culegamént intéran',
-'extlink_sample'  => "http://www.example.com Nòm d'e' culegamént",
-'extlink_tip'     => 'Culegamént esteran (arcordat d\'scrivar dadnénz "http://")',
+'bold_sample' => "Pàroli in '''gros'''",
+'bold_tip' => 'Gros',
+'italic_sample' => 'Pàroli in cursiv',
+'italic_tip' => 'Pàroli in cursìv',
+'link_sample' => "Nòm d'e' culegamént",
+'link_tip' => 'Culegamént intéran',
+'extlink_sample' => "http://www.example.com Nòm d'e' culegamént",
+'extlink_tip' => 'Culegamént esteran (arcordat d\'scrivar dadnénz "http://")',
 'headline_sample' => 'Intestaziòn',
-'headline_tip'    => "Intestaziòn d'e' sgond livèl",
-'nowiki_sample'   => 'Mèt dentar i tu scrètt sìnza furmataziòn',
-'nowiki_tip'      => 'Làsa perdar la furmataziòn wiki',
-'image_tip'       => "Figura ch'la sta insèn a e' scrètt",
-'media_tip'       => 'Culegamént a un file multimediél',
-'sig_tip'         => 'Mèt aquè la firma, cun dèda e ora',
-'hr_tip'          => "Riga urizuntèla (t'an fèga e' patàca: t'an esègera)",
+'headline_tip' => "Intestaziòn d'e' sgond livèl",
+'nowiki_sample' => 'Mèt dentar i tu scrètt sìnza furmataziòn',
+'nowiki_tip' => 'Làsa perdar la furmataziòn wiki',
+'image_tip' => "Figura ch'la sta insèn a e' scrètt",
+'media_tip' => 'Culegamént a un file multimediél',
+'sig_tip' => 'Mèt aquè la firma, cun dèda e ora',
+'hr_tip' => "Riga urizuntèla (t'an fèga e' patàca: t'an esègera)",
 
 # Edit pages
-'summary'                          => "Mutiv d'e' cambiamént:",
-'subject'                          => 'Argumént (intestaziòn):',
-'minoredit'                        => "Quèsta l'è una mudèfiga znina (z)",
-'watchthis'                        => "Tèn d'öcc 'sta pàgina què",
-'savearticle'                      => "Regèstra e' tu scrètt",
-'preview'                          => 'Guèrda prèma',
-'showpreview'                      => 'Fam avdé prèma',
-'showdiff'                         => 'Fam avdé i cambiamént',
-'anoneditwarning'                  => "'''Oci!''' T'an sì miga intrè! T'an fèga e' patàca: a t'registrèn cun e' tu indirèzzi IP e a l' mitèn int la storia d'sta pàgina.",
-'summary-preview'                  => "Prova a vdé l'uget:",
-'newarticle'                       => '(Növ)',
-'newarticletext'                   => "T'cì arìv int'una una pàgina ch'la n'esèst incora.
+'summary' => "Mutiv d'e' cambiamént:",
+'subject' => 'Argumént (intestaziòn):',
+'minoredit' => "Quèsta l'è una mudèfiga znina (z)",
+'watchthis' => "Tèn d'öcc 'sta pàgina què",
+'savearticle' => "Regèstra e' tu scrètt",
+'preview' => 'Guèrda prèma',
+'showpreview' => 'Fam avdé prèma',
+'showdiff' => 'Fam avdé i cambiamént',
+'anoneditwarning' => "'''Oci!''' T'an sì miga intrè! T'an fèga e' patàca: a t'registrèn cun e' tu indirèzzi IP e a l' mitèn int la storia d'sta pàgina.",
+'summary-preview' => "Prova a vdé l'uget:",
+'newarticle' => '(Növ)',
+'newarticletext' => "T'cì arìv int'una una pàgina ch'la n'esèst incora.
 S't'vu fèla te, tàca scrivar int'e' spazi a què sotta (guèrda la [[{{MediaWiki:Helppage}}|pàgina d'servezi]] s't'vu saven piò).
 S'cì arìv a que par sbaj, sciàza e butòn \"Indrì\" e t'ci a post.",
-'noarticletext'                    => "In 'ste mumént un gn'è gnito in sta pàgina: l'è vuta.
+'noarticletext' => "In 'ste mumént un gn'è gnito in sta pàgina: l'è vuta.
 Magari t'pù provè a [[Special:Search/{{PAGENAME}}|zirchè ste nòm]] in t'j ètar pàgin, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zirchè i regèstr relativ], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} scrivj indentar adès]</span>.",
-'previewnote'                      => "'''Òci! Lezz prèma cus t'e' fat; e' tu scrètt U N' è stè ancora registrè!'''",
-'editing'                          => 'Cambiamént de $1',
-'editingsection'                   => 'Mudèfiga $1 (seziòn)',
-'copyrightwarning'                 => "Avìs: tot al contribuziòn sora {{SITENAME}} j è stimé coma sòta la \$2 (guèrda \$1 par i particulé).
+'previewnote' => "'''Òci! Lezz prèma cus t'e' fat; e' tu scrètt U N' è stè ancora registrè!'''",
+'editing' => 'Cambiamént de $1',
+'editingsection' => 'Mudèfiga $1 (seziòn)',
+'copyrightwarning' => "Avìs: tot al contribuziòn sora {{SITENAME}} j è stimé coma sòta la \$2 (guèrda \$1 par i particulé).
 S't'an vu che i tu scrètt j pòsa èsar cambié a piasé da ch'jetar, t'an perda témp a scrivar sora a què.
 A e' stes mod, s't'vu carghé ste scrètt, ta t'e' da tü la respunsabilitè che l'è e' tü, uriginél, o ch'ta l'e' cupié d'un sit indov tot j po lezar, o t'l'è truvè da un'ètra font lèbra.
 \"T'AN PRUVA GNÂNC A CARGHÈ DI SCRÈTT BREVÉTÉ, SÂNZA CMANDÉ E' PARMESS!\"",
-'templatesused'                    => '{{PLURAL:$1|Mudel|Mudell}} druvé sora sta pàgina:',
-'templatesusedpreview'             => '{{PLURAL:$1|Mudel|Mudell}} druvè in sta prova què',
-'template-protected'               => '(prutèt)',
-'template-semiprotected'           => '(mèz-prutet)',
-'hiddencategories'                 => "Sta pàgina què la fa pèrt d'{{PLURAL:$1|una categureja nascosta|$1 categurej nascosti}}.",
+'templatesused' => '{{PLURAL:$1|Mudel|Mudell}} druvé sora sta pàgina:',
+'templatesusedpreview' => '{{PLURAL:$1|Mudel|Mudell}} druvè in sta prova què',
+'template-protected' => '(prutèt)',
+'template-semiprotected' => '(mèz-prutet)',
+'hiddencategories' => "Sta pàgina què la fa pèrt d'{{PLURAL:$1|una categureja nascosta|$1 categurej nascosti}}.",
 'permissionserrorstext-withaction' => "Tan' ê e' parmess par $2, par {{PLURAL:$1|e' mutiv|i mutiv}} adqvè sotta:",
 
 # History pages
-'viewpagelogs'           => "Guèrda i regestar d'sta pàgina",
-'currentrev-asof'        => 'Versiòn agiurnèda de $1',
-'revisionasof'           => 'Revisiòn dal $1',
-'previousrevision'       => '← Versiòn prèma ed questa',
-'nextrevision'           => 'Versiòn piò nova →',
-'currentrevisionlink'    => "Guèrda la versiòn d'adès",
-'cur'                    => 'att',
-'last'                   => 'prez',
-'histlegend'             => "Cunfront tra'l versiòn d'un artècul: strésa cun e' maus sora al versiòn ch't'vu te e pu sciàza e' butòn \"Partès\" o e' butòn in bas.<br />
+'viewpagelogs' => "Guèrda i regestar d'sta pàgina",
+'currentrev-asof' => 'Versiòn agiurnèda de $1',
+'revisionasof' => 'Revisiòn dal $1',
+'previousrevision' => '← Versiòn prèma ed questa',
+'nextrevision' => 'Versiòn piò nova →',
+'currentrevisionlink' => "Guèrda la versiòn d'adès",
+'cur' => 'att',
+'last' => 'prez',
+'histlegend' => "Cunfront tra'l versiòn d'un artècul: strésa cun e' maus sora al versiòn ch't'vu te e pu sciàza e' butòn \"Partès\" o e' butòn in bas.<br />
 Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last}})''' = difarenzi cun la versiòn d'prèma; ''m''' = mudèfica znina",
 'history-fieldset-title' => "Guèrda i cambiamént d'e' prèm a l'ultum",
-'histfirst'              => 'Piò vecia',
-'histlast'               => 'Piò rezent',
+'histfirst' => 'Piò vecia',
+'histlast' => 'Piò rezent',
 
 # Revision deletion
-'rev-delundel'   => 'fam avdé/ardópa',
+'rev-delundel' => 'fam avdé/ardópa',
 'revdel-restore' => 'chèmbia visiòn',
 
 # Merge log
 'revertmerge' => "Scanzèla l'uniòn",
 
 # Diffs
-'history-title'           => 'Elench d\'j cambiamént sora "$1"',
-'difference'              => "(Difarénza fra'l versiòn)",
-'lineno'                  => 'Riga $1:',
+'history-title' => 'Elench d\'j cambiamént sora "$1"',
+'lineno' => 'Riga $1:',
 'compareselectedversions' => "Fa e' paragon tra 'l versiòn seleziunèdi",
-'editundo'                => 'Scanzèla',
+'editundo' => 'Scanzèla',
 
 # Search results
-'searchresults'             => 'I tu risulté',
-'searchresults-title'       => 'I tu risulté par "$1"',
-'searchresulttext'          => "A vut una mân par zarchè dagl'infurmaziòn sora {{SITENAME}}? Và a vdé [[{{MediaWiki:Helppage}}|zerca int é {{SITENAME}}]].",
-'searchsubtitle'            => 'T\'e\' zarchè \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|toti al pàgin chj cminzèpia cun "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|toti al pàgin chj è atachedi a "$1"]])',
-'searchsubtitleinvalid'     => "T'ë zarchè '''$1'''",
-'notitlematches'            => "T'é zarchè un'artècul, ma guèrda che u'gn'è brisa 'ste nom. Si't sicur t'épa scrètt ben?",
-'notextmatches'             => "T'e' zarché un quel ch'u'n à purté a gninto. U'n's trova gninto int'j parol dal pàgin.",
-'prevn'                     => "{{PLURAL:quel prèma|i $1 prèma}} d'sti què",
-'nextn'                     => "{{PLURAL:quél dòp|i $1 dòp}} d'sti què",
-'viewprevnext'              => 'Guèrda ($1 {{int:pipe-separator}} $2) ($3).',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 parola|$2 paróli}})',
-'search-redirect'           => '(ri-direziòn $1)',
-'search-section'            => '(seziòn $1)',
-'search-suggest'            => "V'levat di': $1",
-'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',
+'searchresults' => 'I tu risulté',
+'searchresults-title' => 'I tu risulté par "$1"',
+'searchresulttext' => "A vut una mân par zarchè dagl'infurmaziòn sora {{SITENAME}}? Và a vdé [[{{MediaWiki:Helppage}}|zerca int é {{SITENAME}}]].",
+'searchsubtitle' => 'T\'e\' zarchè \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|toti al pàgin chj cminzèpia cun "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|toti al pàgin chj è atachedi a "$1"]])',
+'searchsubtitleinvalid' => "T'ë zarchè '''$1'''",
+'notitlematches' => "T'é zarchè un'artècul, ma guèrda che u'gn'è brisa 'ste nom. Si't sicur t'épa scrètt ben?",
+'notextmatches' => "T'e' zarché un quel ch'u'n à purté a gninto. U'n's trova gninto int'j parol dal pàgin.",
+'prevn' => "{{PLURAL:quel prèma|i $1 prèma}} d'sti què",
+'nextn' => "{{PLURAL:quél dòp|i $1 dòp}} d'sti què",
+'viewprevnext' => 'Guèrda ($1 {{int:pipe-separator}} $2) ($3).',
+'search-result-size' => '$1 ({{PLURAL:$2|1 parola|$2 paróli}})',
+'search-redirect' => '(ri-direziòn $1)',
+'search-section' => '(seziòn $1)',
+'search-suggest' => "V'levat di': $1",
+'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',
-'powersearch-ns'            => "Zerca int'j spàzi d'nom:",
-'powersearch-redir'         => "Fà una lèsta d'al ri-direziòn",
-'powersearch-field'         => 'Zerca par',
+'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',
+'powersearch-ns' => "Zerca int'j spàzi d'nom:",
+'powersearch-redir' => "Fà una lèsta d'al ri-direziòn",
+'powersearch-field' => 'Zerca par',
 
 # Preferences page
-'preferences'   => 'I mì gost',
+'preferences' => 'I mì gost',
 'mypreferences' => 'I mi gòst',
 
 # Groups
@@ -390,85 +389,85 @@ Lezenda: '''({{int:cur}})''' = difarenzi cun la versiòn d'adès; '''({{int:last
 'action-edit' => 'Mudèfica sta pàgina',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|mudèfica|mudèfich}}',
-'recentchanges'                  => 'I ultum cambiamént',
-'recentchanges-legend'           => "Upziòn d'j ultum cambiamént",
+'nchanges' => '$1 {{PLURAL:$1|mudèfica|mudèfich}}',
+'recentchanges' => 'I ultum cambiamént',
+'recentchanges-legend' => "Upziòn d'j ultum cambiamént",
 'recentchanges-feed-description' => "Ste canël e' fa avdè i cambiamént piò rezent aj artècul d'sta wiki.",
-'rcnote'                         => "A què sota t'pù truvé {{PLURAL:$1|l'ultum cambiamént|j ultum '''$1''' cambiamént in st'artècul}} int j ultum {{PLURAL:$2|dè|'''$2''' dè}}; agl'infurmaziòn j è agiurnèdi a e' $4 al $5.",
-'rclistfrom'                     => 'Fam avdè i cambiamént növ a cminzipiè da $1',
-'rcshowhideminor'                => '$1 al mudèfghi znini',
-'rcshowhidebots'                 => '$1 i bot',
-'rcshowhideliu'                  => '$1 i patàca registrè',
-'rcshowhideanons'                => '$1 navigador anònim',
-'rcshowhidemine'                 => '$1 völt a j ò scrètt',
-'rclinks'                        => "Fam avdè la lèsta d'j $1 cambiamént int j ultum $2 dé<br />$3",
-'diff'                           => 'dif.',
-'hist'                           => 'cron',
-'hide'                           => 'Ardòpa',
-'show'                           => 'Fam avdé',
-'minoreditletter'                => 'z',
-'newpageletter'                  => 'N',
-'boteditletter'                  => 'b',
-'rc-enhanced-expand'             => 'Guèrda i particulèr (u j vó JavaScript)',
-'rc-enhanced-hide'               => 'Arscònd i particulèr',
+'rcnote' => "A què sota t'pù truvé {{PLURAL:$1|l'ultum cambiamént|j ultum '''$1''' cambiamént in st'artècul}} int j ultum {{PLURAL:$2|dè|'''$2''' dè}}; agl'infurmaziòn j è agiurnèdi a e' $4 al $5.",
+'rclistfrom' => 'Fam avdè i cambiamént növ a cminzipiè da $1',
+'rcshowhideminor' => '$1 al mudèfghi znini',
+'rcshowhidebots' => '$1 i bot',
+'rcshowhideliu' => '$1 i patàca registrè',
+'rcshowhideanons' => '$1 navigador anònim',
+'rcshowhidemine' => '$1 völt a j ò scrètt',
+'rclinks' => "Fam avdè la lèsta d'j $1 cambiamént int j ultum $2 dé<br />$3",
+'diff' => 'dif.',
+'hist' => 'cron',
+'hide' => 'Ardòpa',
+'show' => 'Fam avdé',
+'minoreditletter' => 'z',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Guèrda i particulèr (u j vó JavaScript)',
+'rc-enhanced-hide' => 'Arscònd i particulèr',
 
 # Recent changes linked
-'recentchangeslinked'         => "Cambiament ch'j va impèt a sta pàgina",
-'recentchangeslinked-title'   => 'Cambiamént ch\'j va impèt a "$1"',
+'recentchangeslinked' => "Cambiament ch'j va impèt a sta pàgina",
+'recentchangeslinked-title' => 'Cambiamént ch\'j va impèt a "$1"',
 'recentchangeslinked-summary' => "Questa ch't'é sott' aj occ l'è una lista d'j ultum cambiamént fât a piò pàgin atachèdi a una pàgina (o a elemént d'una categurèja).
 Al pàgin int'la lèsta dal [[Special:Watchlist|pàgin tnudi sot occ]] l' è scrètti in '''gros'''.",
-'recentchangeslinked-page'    => "Nom d'la pàgina:",
-'recentchangeslinked-to'      => "Fam avdé sol i cambiamént al pàgin ch'j va impèt a quèla ch'la m'interèsa a me.",
+'recentchangeslinked-page' => "Nom d'la pàgina:",
+'recentchangeslinked-to' => "Fam avdé sol i cambiamént al pàgin ch'j va impèt a quèla ch'la m'interèsa a me.",
 
 # Upload
-'upload'        => 'Carga so un file',
+'upload' => 'Carga so un file',
 'uploadlogpage' => "Regèstar d'j file carghé",
 'uploadedimage' => 'l\'à carghé "[[$1]]"',
 
 # File description page
-'filehist'                  => "Stória d'e' file",
-'filehist-help'             => "Fà clic sora un gròp dèda/ora par avdé cun cl'éra e' file in ch'ë mumént.",
-'filehist-current'          => "d'adès",
-'filehist-datetime'         => 'Dèda/Ora',
-'filehist-thumb'            => 'Visiòn znina',
-'filehist-thumbtext'        => 'Visiòn znina dla versiòn dal $1',
-'filehist-user'             => 'Utent',
-'filehist-dimensions'       => 'Amsür',
-'filehist-comment'          => "Ch'roba è'l",
-'imagelinks'                => 'I culegamént a ste file',
-'linkstoimage'              => "{{PLURAL:$1|La pàgina a què sòta l'è tachéda|Al $1 pàgin a què sòta j è tachédi}} a 'ste file:",
-'sharedupload'              => "Ste file e' ven da $1 e u s' pò druvè neca sora d'j ètri prugèt wiki.",
+'filehist' => "Stória d'e' file",
+'filehist-help' => "Fà clic sora un gròp dèda/ora par avdé cun cl'éra e' file in ch'ë mumént.",
+'filehist-current' => "d'adès",
+'filehist-datetime' => 'Dèda/Ora',
+'filehist-thumb' => 'Visiòn znina',
+'filehist-thumbtext' => 'Visiòn znina dla versiòn dal $1',
+'filehist-user' => 'Utent',
+'filehist-dimensions' => 'Amsür',
+'filehist-comment' => "Ch'roba è'l",
+'imagelinks' => 'I culegamént a ste file',
+'linkstoimage' => "{{PLURAL:$1|La pàgina a què sòta l'è tachéda|Al $1 pàgin a què sòta j è tachédi}} a 'ste file:",
+'sharedupload' => "Ste file e' ven da $1 e u s' pò druvè neca sora d'j ètri prugèt wiki.",
 'uploadnewversion-linktext' => "Chèrga so una versiòn nova d'ste file",
 
 # Statistics
 'statistics' => 'Statistich',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|byte|byte}}',
-'nmembers'      => 'Lumbaart (lmo)
+'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
+'nmembers' => 'Lumbaart (lmo)
 $1 {{PLURAL:$1|elemént|elemént}}',
-'prefixindex'   => "Tòti al pàgin cun e' prefess",
-'newpages'      => 'Pàgin növi',
-'move'          => 'Chèmbia nòm',
-'movethispage'  => 'Sposta sta pàgina',
+'prefixindex' => "Tòti al pàgin cun e' prefess",
+'newpages' => 'Pàgin növi',
+'move' => 'Chèmbia nòm',
+'movethispage' => 'Sposta sta pàgina',
 'pager-newer-n' => '{{PLURAL:$1|é piò rezent|i $1 piò rezent}}',
 'pager-older-n' => '{{PLURAL:$1|é piò vëc|i $1 piò vècc}}',
 
 # Book sources
-'booksources'               => 'Va a truvè dj libar',
+'booksources' => 'Va a truvè dj libar',
 'booksources-search-legend' => 'A vut zarchè int j livar?',
-'booksources-go'            => 'Và pu',
+'booksources-go' => 'Và pu',
 
 # Special:Log
 'log' => 'Regèstar',
 
 # Special:AllPages
-'allpages'       => 'Tot al pàgin',
+'allpages' => 'Tot al pàgin',
 'alphaindexline' => 'Da $1 a $2',
-'prevpage'       => "Pàgina prèma d'questa ($1)",
-'allpagesfrom'   => 'Fam avdè al pàgin cminzipiènd da:',
-'allpagesto'     => 'Fam avdé al pàgin infèn a:',
-'allarticles'    => 'Toti al pàgin',
+'prevpage' => "Pàgina prèma d'questa ($1)",
+'allpagesfrom' => 'Fam avdè al pàgin cminzipiènd da:',
+'allpagesto' => 'Fam avdé al pàgin infèn a:',
+'allarticles' => 'Toti al pàgin',
 'allpagessubmit' => 'Va mò',
 
 # Special:LinkSearch
@@ -484,115 +483,115 @@ $1 {{PLURAL:$1|elemént|elemént}}',
 'emailuser' => 'Manda un scrètt a ste patàca',
 
 # Watchlist
-'watchlist'         => "Pàgin ch'a ten d'öcc",
-'mywatchlist'       => "Pàgin ch'a ten d'öcc",
-'addedwatchtext'    => "La pàgina \"[[:\$1]]\" adès l'è int la lèsta dal [[Special:Watchlist|pàgin da tnì d'öcc]]. D'ôra inenz t'pù avdé tòt al mudèfic a sta pàgina e a la pàgina d'cunversaziòn int la [[Special:RecentChanges|lèsta d'j cambiamént rezent]], in '''gros''', acsè j 's'pò guardè mej.
+'watchlist' => "Pàgin ch'a ten d'öcc",
+'mywatchlist' => "Pàgin ch'a ten d'öcc",
+'addedwatchtext' => "La pàgina \"[[:\$1]]\" adès l'è int la lèsta dal [[Special:Watchlist|pàgin da tnì d'öcc]]. D'ôra inenz t'pù avdé tòt al mudèfic a sta pàgina e a la pàgina d'cunversaziòn int la [[Special:RecentChanges|lèsta d'j cambiamént rezent]], in '''gros''', acsè j 's'pò guardè mej.
 Se in un sgond temp t'vu cavé la pàgina dala lèsta da tnì d'öcc, s-cjaza un'ètra volta sora e' butòn \"ten d'öcc\".",
-'removedwatchtext'  => 'La pàgina "[[:$1]]" l\'è stëda scanzlèda dala lèsta dal [[Special:Watchlist|pàgin da tnì sot öcc]].',
-'watch'             => "Tèn d'öcc",
-'watchthispage'     => "Ten d'öcc sta pagina",
-'unwatch'           => "T'an stèga piò a t'nì d'öcc",
+'removedwatchtext' => 'La pàgina "[[:$1]]" l\'è stëda scanzlèda dala lèsta dal [[Special:Watchlist|pàgin da tnì sot öcc]].',
+'watch' => "Tèn d'öcc",
+'watchthispage' => "Ten d'öcc sta pagina",
+'unwatch' => "T'an stèga piò a t'nì d'öcc",
 'watchlist-details' => "J è, int la lèsta dal pàgin da tnì d'öcc, {{PLURAL:$1|$1 pàgina|$1 pàgin}}, senza cuntê al pàgin d'cunversaziòn.",
-'wlshowlast'        => "Fam avdé agl'ultum $1 ör $2 dè $3",
+'wlshowlast' => "Fam avdé agl'ultum $1 ör $2 dè $3",
 'watchlist-options' => "Scielt int la lèsta d'pàgin da tnì d'öcc",
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => "Mêt insèn al pàgin da t'nì d'öcc...",
+'watching' => "Mêt insèn al pàgin da t'nì d'öcc...",
 'unwatching' => "Scanzèla dal pàgin da t'nì d'öcc...",
 
 # Delete
-'deletepage'            => 'Scanzela la pàgina',
-'confirmdeletetext'     => "Oci! T'ste par scanzlè una pàgina cun tòta la storia d'j su cambiamént.
+'deletepage' => 'Scanzela la pàgina',
+'confirmdeletetext' => "Oci! T'ste par scanzlè una pàgina cun tòta la storia d'j su cambiamént.
 Par piasé, cunferma ch't'ê propri l'intenziòn d'fël, ch'at capèss al su conseguenzi e quel ch't fë adès l'è in regola cun al [[{{MediaWiki:Policy-url}}]].",
-'actioncomplete'        => 'Lavor fät e finì',
-'deletedtext'           => 'La pàgina "$1" l\'è stëda scanzlèda.
+'actioncomplete' => 'Lavor fät e finì',
+'deletedtext' => 'La pàgina "$1" l\'è stëda scanzlèda.
 Guèrda $2 par avdé la lèsta daglj ultum scanzeladür.',
-'dellogpage'            => 'Regèstar dal scanzladùr',
-'deletecomment'         => 'Rasòn:',
-'deleteotherreason'     => 'Ètar mutiv:',
+'dellogpage' => 'Regèstar dal scanzladùr',
+'deletecomment' => 'Rasòn:',
+'deleteotherreason' => 'Ètar mutiv:',
 'deletereasonotherlist' => 'Ètar mutiv',
 
 # Rollback
 'rollbacklink' => "armèt sta pàgina cun cl'era prèma",
 
 # Protect
-'protectlogpage'              => 'Pruteziòn',
-'protectedarticle'            => '"[[$1]]" l\'è prutèt',
-'modifiedarticleprotection'   => 'l\'à cambié e\' livèl d\'pruteziòn par "[[$1]]"',
-'protectcomment'              => 'Rasòn:',
-'protectexpiry'               => 'Scadenza:',
-'protect_expiry_invalid'      => "La scadenza la n'è piò bona.",
-'protect_expiry_old'          => "T'cì ariv tèrd! La dèda d'scadenza l'è zà pasëda.",
-'protect-text'                => "Cun ste mudèl u s'pò guardè e u s'pò cambié ê livèl d'pruteziòn dla pàgina '''$1'''.",
-'protect-locked-access'       => "Oci! Ta n'ê miga i parmess par cambié i livel d'pruteziòn dla pàgina.
+'protectlogpage' => 'Pruteziòn',
+'protectedarticle' => '"[[$1]]" l\'è prutèt',
+'modifiedarticleprotection' => 'l\'à cambié e\' livèl d\'pruteziòn par "[[$1]]"',
+'protectcomment' => 'Rasòn:',
+'protectexpiry' => 'Scadenza:',
+'protect_expiry_invalid' => "La scadenza la n'è piò bona.",
+'protect_expiry_old' => "T'cì ariv tèrd! La dèda d'scadenza l'è zà pasëda.",
+'protect-text' => "Cun ste mudèl u s'pò guardè e u s'pò cambié ê livèl d'pruteziòn dla pàgina '''$1'''.",
+'protect-locked-access' => "Oci! Ta n'ê miga i parmess par cambié i livel d'pruteziòn dla pàgina.
 S't'vù vdë in dô ch'j è i parmess, guèrda '''$1''':",
-'protect-cascadeon'           => "Sta pàgina pr'adès l'è bluchëda parchè l'è stra l'{{PLURAL:$1|la pàgina aquè sota, ch'l'à|al pàgin aquè sota, ch'j'à}} la pruteziòn ricursiva.
+'protect-cascadeon' => "Sta pàgina pr'adès l'è bluchëda parchè l'è stra l'{{PLURAL:$1|la pàgina aquè sota, ch'l'à|al pàgin aquè sota, ch'j'à}} la pruteziòn ricursiva.
 T'pù cambié ê livel d'pruteziòn d'sta pàgina, mo la pruteziòn ricursiva la resta a lè.",
-'protect-default'             => 'Dà ê parmess a tòt j navigadur',
-'protect-fallback'            => 'A què u j vô ê parmess "$1"',
+'protect-default' => 'Dà ê parmess a tòt j navigadur',
+'protect-fallback' => 'A què u j vô ê parmess "$1"',
 'protect-level-autoconfirmed' => "Bloca i navigador nov e quij ch'j n' s'è miga registrè",
-'protect-level-sysop'         => 'Sol par j aministradôr',
-'protect-summary-cascade'     => 'ricursiv',
-'protect-expiring'            => 'ê schëd: $1 (UTC)',
-'protect-cascade'             => "Prutezz al pàgin ch'j fa pèrt d'questa (pruteziòn ricursiva)",
-'protect-cantedit'            => "Oci! T'an pù miga cambié i livel d'pruteziòn dla pàgina, parchè t'an ê incora i parmess par cambié la pàgina.",
-'restriction-type'            => 'Parmess:',
-'restriction-level'           => "Livel d'restriziòn:",
+'protect-level-sysop' => 'Sol par j aministradôr',
+'protect-summary-cascade' => 'ricursiv',
+'protect-expiring' => 'ê schëd: $1 (UTC)',
+'protect-cascade' => "Prutezz al pàgin ch'j fa pèrt d'questa (pruteziòn ricursiva)",
+'protect-cantedit' => "Oci! T'an pù miga cambié i livel d'pruteziòn dla pàgina, parchè t'an ê incora i parmess par cambié la pàgina.",
+'restriction-type' => 'Parmess:',
+'restriction-level' => "Livel d'restriziòn:",
 
 # Undelete
 'undeletelink' => 'Guèrda/Torna indrì',
 
 # Namespace form on various pages
-'namespace'      => "Spàzi d'é nom:",
-'invert'         => 'Torna indrì cun la seleziòn',
+'namespace' => "Spàzi d'é nom:",
+'invert' => 'Torna indrì cun la seleziòn',
 'blanknamespace' => '(Prèma)',
 
 # Contributions
-'contributions'       => 'I mì lavor sora Vichipedia',
+'contributions' => 'I mì lavor sora Vichipedia',
 'contributions-title' => "Tòt quel ch'l'à scrètt $1",
-'mycontris'           => "Quél ch'a j ò scrètt me",
-'contribsub2'         => 'Par $1 ($2)',
-'uctop'               => '(va sò)',
-'month'               => "A cminzipiè d'e' mës (è d'j mës prezedént)",
-'year'                => "A cminzipié d'l'àn (e d'j èn prezedent)",
+'mycontris' => "Quél ch'a j ò scrètt me",
+'contribsub2' => 'Par $1 ($2)',
+'uctop' => '(va sò)',
+'month' => "A cminzipiè d'e' mës (è d'j mës prezedént)",
+'year' => "A cminzipié d'l'àn (e d'j èn prezedent)",
 
-'sp-contributions-newbies'  => "Fam avdé sol i lavòr d'j utent nuv",
+'sp-contributions-newbies' => "Fam avdé sol i lavòr d'j utent nuv",
 'sp-contributions-blocklog' => "Regèstar d'j bloc",
-'sp-contributions-search'   => 'Zerca j lavór',
+'sp-contributions-search' => 'Zerca j lavór',
 'sp-contributions-username' => 'Indirèzz IP o soranòm',
-'sp-contributions-submit'   => 'Zerca',
+'sp-contributions-submit' => 'Zerca',
 
 # What links here
-'whatlinkshere'            => "Pagin ch'j è atachedi a questa",
-'whatlinkshere-title'      => 'Pagin atachédi a "$1"',
-'whatlinkshere-page'       => 'Pàgina:',
-'linkshere'                => "Sti pàgin a què al cuntèn di culegamént a '''[[:$1]]''':",
-'isredirect'               => 'Re-indirèzza',
-'istemplate'               => 'inclusiòn',
-'isimage'                  => 'culegamént a una figura',
-'whatlinkshere-prev'       => '{{PLURAL:$1|quel prèma|i $1 prèma}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|quel dòp|i $1 dòp}}',
-'whatlinkshere-links'      => '← culegamént',
+'whatlinkshere' => "Pagin ch'j è atachedi a questa",
+'whatlinkshere-title' => 'Pagin atachédi a "$1"',
+'whatlinkshere-page' => 'Pàgina:',
+'linkshere' => "Sti pàgin a què al cuntèn di culegamént a '''[[:$1]]''':",
+'isredirect' => 'Re-indirèzza',
+'istemplate' => 'inclusiòn',
+'isimage' => 'culegamént a una figura',
+'whatlinkshere-prev' => '{{PLURAL:$1|quel prèma|i $1 prèma}}',
+'whatlinkshere-next' => '{{PLURAL:$1|quel dòp|i $1 dòp}}',
+'whatlinkshere-links' => '← culegamént',
 'whatlinkshere-hideredirs' => "$1 u t' rmanda",
-'whatlinkshere-hidetrans'  => '$1 inclusiòn',
-'whatlinkshere-hidelinks'  => '$1 culegamént',
-'whatlinkshere-filters'    => 'Filtar',
+'whatlinkshere-hidetrans' => '$1 inclusiòn',
+'whatlinkshere-hidelinks' => '$1 culegamént',
+'whatlinkshere-filters' => 'Filtar',
 
 # Block/unblock
-'blockip'                  => 'Indirèzz IP bluché',
-'ipboptions'               => '2 ór:2 hours,2 dè:1 day,3 dè:3 days,1 smana:1 week,2 smani:2 weeks,1 mês:1 month,3 mis:3 months,6 mîs:6 months,1 àn:1 year,par sempar:infinite',
-'ipblocklist'              => 'Soranom e indirezz IP bluché',
-'blocklink'                => 'Met-j é carnaz',
-'unblocklink'              => "chèva e' carnàz",
-'change-blocklink'         => 'Chèmbia carnàz',
-'contribslink'             => "Ch'l'un ch'l'à scrét",
-'blocklogpage'             => "Regèstar d'j blocch",
-'blocklogentry'            => '"[[$1]]" l\'è sté bluché par $2 $3',
-'unblocklogentry'          => "l'à sbluchè $1",
+'blockip' => 'Indirèzz IP bluché',
+'ipboptions' => '2 ór:2 hours,2 dè:1 day,3 dè:3 days,1 smana:1 week,2 smani:2 weeks,1 mês:1 month,3 mis:3 months,6 mîs:6 months,1 àn:1 year,par sempar:infinite',
+'ipblocklist' => 'Soranom e indirezz IP bluché',
+'blocklink' => 'Met-j é carnaz',
+'unblocklink' => "chèva e' carnàz",
+'change-blocklink' => 'Chèmbia carnàz',
+'contribslink' => "Ch'l'un ch'l'à scrét",
+'blocklogpage' => "Regèstar d'j blocch",
+'blocklogentry' => '"[[$1]]" l\'è sté bluché par $2 $3',
+'unblocklogentry' => "l'à sbluchè $1",
 'block-log-flags-nocreate' => "Un' s'pò brisa registrès un'étra volta",
 
 # Move page
-'movepagetext'     => "Cun st'uperaziòn t'pù cambiè e' nom a una pàgina. Tòti al versiòn prezedenti j và drì a la pàgina nova.
+'movepagetext' => "Cun st'uperaziòn t'pù cambiè e' nom a una pàgina. Tòti al versiòn prezedenti j và drì a la pàgina nova.
 E' nom vec, nec quel, u t' pórta a la pàgina nova.
 E adès, a l' set cus ch't' pù fè? T'pù andé a zarchè i nom vec e meti-j a post tot cun e' nom nov. S't'a n'e' brisa voja, l'è listéss, parò va a cuntrulè prèma s'j è di [[Special:DoubleRedirects|doppii]] ó [[Special:BrokenRedirects|ghènz scuvert]].
 T'ci responsabil d'cuntrulé che tot i ghenz j seja a post.
@@ -609,21 +608,21 @@ Un cunsej? Pensa al conseguenzi de tu att prèma d's-cjazè e' butòn.",
 *e' quadret d'cunferma aquè sota un è piò spuntè.
 
 In tot sti chès, s'et pazienzia, t'pù spustè a man tot quel c'u j è scrètt intla pàgina d'cunversaziòn.",
-'movearticle'      => 'Chèmbia nom a la pàgina:',
-'newtitle'         => 'Titul nóv:',
-'move-watch'       => "Ten sot'öcc sta pàgina",
-'movepagebtn'      => 'Sposta la pàgina',
-'pagemovedsub'     => "T'cì ste brev! T'a j é fata.",
-'movepage-moved'   => "'''\"\$1\" l'à cambié post a \"\$2\"'''",
-'articleexists'    => "La j è za una pàgina ch'la s-cjama acsè. O e nom ch'ta j e dë un va brisa ben.
+'movearticle' => 'Chèmbia nom a la pàgina:',
+'newtitle' => 'Titul nóv:',
+'move-watch' => "Ten sot'öcc sta pàgina",
+'movepagebtn' => 'Sposta la pàgina',
+'pagemovedsub' => "T'cì ste brev! T'a j é fata.",
+'movepage-moved' => "'''\"\$1\" l'à cambié post a \"\$2\"'''",
+'articleexists' => "La j è za una pàgina ch'la s-cjama acsè. O e nom ch'ta j e dë un va brisa ben.
 Par piaser, daij un ètar nom.",
-'talkexists'       => "'''La pàgina l'è stëda spusteda ben, invezi la pàgina d'cunversaziòn l'è andëda a cuzè cun òna ch'l'à ê stes nom. Csa fasègna?
+'talkexists' => "'''La pàgina l'è stëda spusteda ben, invezi la pàgina d'cunversaziòn l'è andëda a cuzè cun òna ch'l'à ê stes nom. Csa fasègna?
 Par piasé, met insem al du pàgin te, fasend copia e incola.",
-'movedto'          => 'Spusté vers:',
-'movetalk'         => "Sposta ènca la pàgina d'cunversaziòn",
-'movelogpage'      => "Regéstar d'j muvimént",
-'movereason'       => 'Rasòn:',
-'revertmove'       => 'Métla cum era prèma',
+'movedto' => 'Spusté vers:',
+'movetalk' => "Sposta ènca la pàgina d'cunversaziòn",
+'movelogpage' => "Regéstar d'j muvimént",
+'movereason' => 'Rasòn:',
+'revertmove' => 'Métla cum era prèma',
 
 # Export
 'export' => 'Espórta dal pàgin',
@@ -632,67 +631,67 @@ Par piasé, met insem al du pàgin te, fasend copia e incola.",
 'thumbnail-more' => 'Fal piò lèrg',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'La tu pàgina persunèla',
-'tooltip-pt-mytalk'               => "La tu pàgina d'cunversaziòn cun ch'jetar",
-'tooltip-pt-preferences'          => 'I tu gòst',
-'tooltip-pt-watchlist'            => "Lèsta dal pàgin ch'te ténn sot öcc",
-'tooltip-pt-mycontris'            => "Lèsta d'quel ch'a j ò scrètt mè",
-'tooltip-pt-login'                => "E' srevv mej registrét, énch s't' antcé ublighè a fèl",
-'tooltip-pt-logout'               => "Va fora, t'é finì",
-'tooltip-ca-talk'                 => 'Guèrda al discussion sora sta pagina',
-'tooltip-ca-edit'                 => "Te t' po' cambiè 'sta pagina. Par piasè, arcoldat, guèrda prèma cu'ste fat, e pu dòp sèlva e' tu lavor.",
-'tooltip-ca-addsection'           => 'Taca una nova seziòn',
-'tooltip-ca-viewsource'           => "Sta pàgina què l'à e' carnaz, ma t'pù avdé e' su codiz surgent.",
-'tooltip-ca-history'              => "A vut avdé cun cl'era prèma sta pagina?",
-'tooltip-ca-protect'              => 'Mett una pruteziòn a sta pàgina',
-'tooltip-ca-delete'               => 'Scanzèla sta pàgina',
-'tooltip-ca-move'                 => 'Chèmbia nòm a sta pàgina',
-'tooltip-ca-watch'                => "Vut t'nì drì a sta pàgina?",
-'tooltip-ca-unwatch'              => "Chèva sta pàgina d'la lista dj pàgin da tnì öcc",
-'tooltip-search'                  => 'Zerca dentar {{SITENAME}}',
-'tooltip-search-go'               => "Va a zirché una pàgina c'l'as cjèma acsè, s'la j è",
-'tooltip-search-fulltext'         => "Zerca e' scrètt in tal pàgin",
-'tooltip-n-mainpage'              => "Va a v'dé la Prèma Pagina",
-'tooltip-n-mainpage-description'  => "Va a v'dé la prèma pagina",
-'tooltip-n-portal'                => "A't spieghen nicosa sora e' purtèl, cosa t'pu fè a què e indov'ej al robi",
-'tooltip-n-currentevents'         => "Zerca dagli infurmaziòn sora i fät d'incù dè",
-'tooltip-n-recentchanges'         => "Lèsta d'j ultum cambiamént int'e' sit",
-'tooltip-n-randompage'            => 'Fam avdé la pagina ch’ u t’ pé',
-'tooltip-n-help'                  => "E't absogn d'spiegazion?",
-'tooltip-t-whatlinkshere'         => "Lèsta d'tott al pagin ch'aglj è atachedi a questa",
-'tooltip-t-recentchangeslinked'   => "Lèsta d'j ultum cambiament al pàgin atachédi a questa",
-'tooltip-feed-rss'                => 'Canël RSS par sta pàgina',
-'tooltip-feed-atom'               => 'Canël Atom par sta pàgina',
-'tooltip-t-contributions'         => "Guèrda la lèsta d'tot i lavor ch'l'à fat ste patàca",
-'tooltip-t-emailuser'             => 'Manda un scrètt a ste patàca',
-'tooltip-t-upload'                => "Carga d'j file multimediél",
-'tooltip-t-specialpages'          => 'Lèsta ad toti al pàgin particulèri',
-'tooltip-t-print'                 => 'Versiòn bona da stampè sta pagina',
-'tooltip-t-permalink'             => "Culegament fèss a 'sta version d'la pagina",
-'tooltip-ca-nstab-main'           => "Guèrda st'ètra pagina",
-'tooltip-ca-nstab-user'           => 'Guèrda la pàgina persunëla',
-'tooltip-ca-nstab-special'        => "Csa fet ? Questa l'è una pàgina particulèra; t'an pu brisa scrivar sora",
-'tooltip-ca-nstab-project'        => "Guèrda la pàgina dagl'infurmaziòn",
-'tooltip-ca-nstab-image'          => "Guèrda la pàgina d'e' file",
-'tooltip-ca-nstab-template'       => "Guèrda e' mudel",
-'tooltip-ca-nstab-category'       => 'Guèrda la pàgina dla categurèja',
-'tooltip-minoredit'               => "Segna sta mudèfga ch'l'è znina",
-'tooltip-save'                    => 'Regèstra i tü cambiamént',
-'tooltip-preview'                 => "Guèrda ste fat un bèl lavor, l'è sèmpar mej fè'l, prèma d'registrè!",
-'tooltip-diff'                    => "Fa m'avdé i cambiamént ch'a j ò fat me",
+'tooltip-pt-userpage' => 'La tu pàgina persunèla',
+'tooltip-pt-mytalk' => "La tu pàgina d'cunversaziòn cun ch'jetar",
+'tooltip-pt-preferences' => 'I tu gòst',
+'tooltip-pt-watchlist' => "Lèsta dal pàgin ch'te ténn sot öcc",
+'tooltip-pt-mycontris' => "Lèsta d'quel ch'a j ò scrètt mè",
+'tooltip-pt-login' => "E' srevv mej registrét, énch s't' antcé ublighè a fèl",
+'tooltip-pt-logout' => "Va fora, t'é finì",
+'tooltip-ca-talk' => 'Guèrda al discussion sora sta pagina',
+'tooltip-ca-edit' => "Te t' po' cambiè 'sta pagina. Par piasè, arcoldat, guèrda prèma cu'ste fat, e pu dòp sèlva e' tu lavor.",
+'tooltip-ca-addsection' => 'Taca una nova seziòn',
+'tooltip-ca-viewsource' => "Sta pàgina què l'à e' carnaz, ma t'pù avdé e' su codiz surgent.",
+'tooltip-ca-history' => "A vut avdé cun cl'era prèma sta pagina?",
+'tooltip-ca-protect' => 'Mett una pruteziòn a sta pàgina',
+'tooltip-ca-delete' => 'Scanzèla sta pàgina',
+'tooltip-ca-move' => 'Chèmbia nòm a sta pàgina',
+'tooltip-ca-watch' => "Vut t'nì drì a sta pàgina?",
+'tooltip-ca-unwatch' => "Chèva sta pàgina d'la lista dj pàgin da tnì öcc",
+'tooltip-search' => 'Zerca dentar {{SITENAME}}',
+'tooltip-search-go' => "Va a zirché una pàgina c'l'as cjèma acsè, s'la j è",
+'tooltip-search-fulltext' => "Zerca e' scrètt in tal pàgin",
+'tooltip-n-mainpage' => "Va a v'dé la Prèma Pagina",
+'tooltip-n-mainpage-description' => "Va a v'dé la prèma pagina",
+'tooltip-n-portal' => "A't spieghen nicosa sora e' purtèl, cosa t'pu fè a què e indov'ej al robi",
+'tooltip-n-currentevents' => "Zerca dagli infurmaziòn sora i fät d'incù dè",
+'tooltip-n-recentchanges' => "Lèsta d'j ultum cambiamént int'e' sit",
+'tooltip-n-randompage' => 'Fam avdé la pagina ch’ u t’ pé',
+'tooltip-n-help' => "E't absogn d'spiegazion?",
+'tooltip-t-whatlinkshere' => "Lèsta d'tott al pagin ch'aglj è atachedi a questa",
+'tooltip-t-recentchangeslinked' => "Lèsta d'j ultum cambiament al pàgin atachédi a questa",
+'tooltip-feed-rss' => 'Canël RSS par sta pàgina',
+'tooltip-feed-atom' => 'Canël Atom par sta pàgina',
+'tooltip-t-contributions' => "Guèrda la lèsta d'tot i lavor ch'l'à fat ste patàca",
+'tooltip-t-emailuser' => 'Manda un scrètt a ste patàca',
+'tooltip-t-upload' => "Carga d'j file multimediél",
+'tooltip-t-specialpages' => 'Lèsta ad toti al pàgin particulèri',
+'tooltip-t-print' => 'Versiòn bona da stampè sta pagina',
+'tooltip-t-permalink' => "Culegament fèss a 'sta version d'la pagina",
+'tooltip-ca-nstab-main' => "Guèrda st'ètra pagina",
+'tooltip-ca-nstab-user' => 'Guèrda la pàgina persunëla',
+'tooltip-ca-nstab-special' => "Csa fet ? Questa l'è una pàgina particulèra; t'an pu brisa scrivar sora",
+'tooltip-ca-nstab-project' => "Guèrda la pàgina dagl'infurmaziòn",
+'tooltip-ca-nstab-image' => "Guèrda la pàgina d'e' file",
+'tooltip-ca-nstab-template' => "Guèrda e' mudel",
+'tooltip-ca-nstab-category' => 'Guèrda la pàgina dla categurèja',
+'tooltip-minoredit' => "Segna sta mudèfga ch'l'è znina",
+'tooltip-save' => 'Regèstra i tü cambiamént',
+'tooltip-preview' => "Guèrda ste fat un bèl lavor, l'è sèmpar mej fè'l, prèma d'registrè!",
+'tooltip-diff' => "Fa m'avdé i cambiamént ch'a j ò fat me",
 'tooltip-compareselectedversions' => "Guèrda al diferénzi tra 'l du versiòn seleziunèdi d'sta pàgina",
-'tooltip-watch'                   => 'Mett sta pagina insèm aglj ètri da tnì sot öcc',
-'tooltip-rollback'                => "E butòn \"armèt cum'era prèma\" sérv par scanzlè quel ch'l'à fät ch'l'un ch'à lavurè par ultum in sta pàgina",
-'tooltip-undo'                    => "\"Torna indrì\" e' serv par scanzlè 'sta mudèfica, l'avèrr la fnestra d'mudèfica in manira d'guardé prèma. Quènd t'e' fat, t'pù mètar in bas la spiegaziòn dla tu mudèfica.",
+'tooltip-watch' => 'Mett sta pagina insèm aglj ètri da tnì sot öcc',
+'tooltip-rollback' => "E butòn \"armèt cum'era prèma\" sérv par scanzlè quel ch'l'à fät ch'l'un ch'à lavurè par ultum in sta pàgina",
+'tooltip-undo' => "\"Torna indrì\" e' serv par scanzlè 'sta mudèfica, l'avèrr la fnestra d'mudèfica in manira d'guardé prèma. Quènd t'e' fat, t'pù mètar in bas la spiegaziòn dla tu mudèfica.",
 
 # Browsing diffs
 'previousdiff' => "← Difarénza prèma d'questa",
-'nextdiff'     => 'Mudèfica piò nova →',
+'nextdiff' => 'Mudèfica piò nova →',
 
 # Media information
 'file-info-size' => "$1 × $2 pixel, amsùra d'e' file: $3, tipo MIME: $4",
-'file-nohires'   => "U n' è pusèbil d'avdé cun òna risoluziòn piò élta.",
-'svg-long-desc'  => "file d'taja SVG, dimensiòn numinèli $1 × $2 pixel, dimensiòn d'e' file: $3",
+'file-nohires' => "U n' è pusèbil d'avdé cun òna risoluziòn piò élta.",
+'svg-long-desc' => "file d'taja SVG, dimensiòn numinèli $1 × $2 pixel, dimensiòn d'e' file: $3",
 'show-big-image' => 'Versiòn ad amsura pina',
 
 # Bad image list
@@ -703,12 +702,12 @@ E' prèm culegamént d'una riga l'à da èsar un culegamént a un file c'un gn'e
 Tot i culegamént ch'j ven dop, sora la stèsa riga, j conta cumpagna d'j eceziòn (e' vò dì, pàgin indov e' file u's pò infilè nurmalment)",
 
 # Metadata
-'metadata'          => 'Dèd sora i dèd',
-'metadata-help'     => "Ste file l'à d'l'infurmaziòn in piò. Forsi parchè al figur j è stedi cjapèdi con la machina digitèla o cun e' scàner.
+'metadata' => 'Dèd sora i dèd',
+'metadata-help' => "Ste file l'à d'l'infurmaziòn in piò. Forsi parchè al figur j è stedi cjapèdi con la machina digitèla o cun e' scàner.
 Se parò un qvelcadon à lavurè sora sta figura, zerti infurmaziòn j n' curespòn piò cun l'uriginel.",
-'metadata-expand'   => 'Fam avdé i particulèr',
+'metadata-expand' => 'Fam avdé i particulèr',
 'metadata-collapse' => 'Nascond i particulèr',
-'metadata-fields'   => "I chêmp d'j metadata EXIF elenché in ste mesàg, j t' ven presenté int'la pàgina d'la figura, quènd la tabèla d'j metadata l'è ardòta znina. J ètar chèmp j srà nascost.
+'metadata-fields' => "I chêmp d'j metadata EXIF elenché in ste mesàg, j t' ven presenté int'la pàgina d'la figura, quènd la tabèla d'j metadata l'è ardòta znina. J ètar chèmp j srà nascost.
 * make
 * model
 * datetimeoriginal
@@ -724,18 +723,18 @@ Se parò un qvelcadon à lavurè sora sta figura, zerti infurmaziòn j n' curesp
 * gpsaltitude",
 
 # External editor support
-'edit-externally'      => 'Mudèfica ste file cun un prugrama esteran',
+'edit-externally' => 'Mudèfica ste file cun un prugrama esteran',
 'edit-externally-help' => "(Guèrda e' [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] par avé d'j ètri infurmaziòn) (l'è in inglés)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tòt',
 'namespacesall' => 'töt',
-'monthsall'     => 'tòt',
+'monthsall' => 'tòt',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Fam avdè al mudèfich impurtènti',
 'watchlisttools-edit' => "Guèrda e mudèfica la lèsta d'pàgin da tnì d'öcc",
-'watchlisttools-raw'  => "Mudèfiga la lèsta - scrètta - dal pàgin da tnì d'öcc",
+'watchlisttools-raw' => "Mudèfiga la lèsta - scrètta - dal pàgin da tnì d'öcc",
 
 # Special:SpecialPages
 'specialpages' => 'Pàgin particulèri',
index 7e5069e..13aa830 100644 (file)
 
 $messages = array(
 # Dates
-'sun'           => 'Asamas',
-'mon'           => 'Aynas',
-'tue'           => 'Asinas',
-'wed'           => 'Akras',
-'thu'           => 'Akwas',
-'fri'           => 'Asimwas',
-'sat'           => 'Asiḍyas',
-'january'       => 'Yennayer',
-'february'      => 'Yebrayer',
-'march'         => 'Mares',
-'april'         => 'Ibrir',
-'may_long'      => 'May',
-'june'          => 'Yunyu',
-'july'          => 'Yulyuz',
-'august'        => 'Ghuct',
-'september'     => 'Cutanbir',
-'october'       => 'Ktubar',
-'november'      => 'Nuwanbir',
-'december'      => 'Dujanbir',
-'january-gen'   => 'Ynnayr',
-'february-gen'  => 'Ybrayr',
-'march-gen'     => 'Mars',
-'april-gen'     => 'Ibrir',
-'may-gen'       => 'May',
-'june-gen'      => 'Yunyu',
-'july-gen'      => 'Yulyuz',
-'august-gen'    => 'Ghuct',
+'sun' => 'Asamas',
+'mon' => 'Aynas',
+'tue' => 'Asinas',
+'wed' => 'Akras',
+'thu' => 'Akwas',
+'fri' => 'Asimwas',
+'sat' => 'Asiḍyas',
+'january' => 'Yennayer',
+'february' => 'Yebrayer',
+'march' => 'Mares',
+'april' => 'Ibrir',
+'may_long' => 'May',
+'june' => 'Yunyu',
+'july' => 'Yulyuz',
+'august' => 'Ghuct',
+'september' => 'Cutanbir',
+'october' => 'Ktubar',
+'november' => 'Nuwanbir',
+'december' => 'Dujanbir',
+'january-gen' => 'Ynnayr',
+'february-gen' => 'Ybrayr',
+'march-gen' => 'Mars',
+'april-gen' => 'Ibrir',
+'may-gen' => 'May',
+'june-gen' => 'Yunyu',
+'july-gen' => 'Yulyuz',
+'august-gen' => 'Ghuct',
 'september-gen' => 'Cutanbir',
-'october-gen'   => 'Ktubar',
-'november-gen'  => 'Nuwanbir',
-'december-gen'  => 'Dujanbir',
-'jan'           => 'Yennayer',
-'feb'           => 'Yebrayer',
-'mar'           => 'Mars',
-'apr'           => 'Ybrir',
-'may'           => 'May',
-'jun'           => 'Yunyu',
-'jul'           => 'Yulyuz',
-'aug'           => 'Ghuct',
-'sep'           => 'Cutanbir',
-'oct'           => 'Ktubar',
-'nov'           => 'Nuwanbir',
-'dec'           => 'Dujanbir',
+'october-gen' => 'Ktubar',
+'november-gen' => 'Nuwanbir',
+'december-gen' => 'Dujanbir',
+'jan' => 'Yennayer',
+'feb' => 'Yebrayer',
+'mar' => 'Mars',
+'apr' => 'Ybrir',
+'may' => 'May',
+'jun' => 'Yunyu',
+'jul' => 'Yulyuz',
+'aug' => 'Ghuct',
+'sep' => 'Cutanbir',
+'oct' => 'Ktubar',
+'nov' => 'Nuwanbir',
+'dec' => 'Dujanbir',
 
 # Categories related messages
-'category_header'        => 'Tasniwin di taggayt "$1"',
-'subcategories'          => 'Tadu-ggayin',
-'category-media-header'  => 'Media di category "$1"',
-'category-empty'         => "''Taggayt a war dags bu ca n Tasna niɣ ca n umedia.''",
+'category_header' => 'Tasniwin di taggayt "$1"',
+'subcategories' => 'Tadu-ggayin',
+'category-media-header' => 'Media di category "$1"',
+'category-empty' => "''Taggayt a war dags bu ca n Tasna niɣ ca n umedia.''",
 'listingcontinuesabbrev' => 'arni-d.',
 
-'about'      => 'Xef',
-'newwindow'  => '(Areẓm di tburjet d-tamaynut)',
-'cancel'     => 'Sbdd',
-'mytalk'     => 'Amsawal inu',
+'about' => 'Xef',
+'newwindow' => '(Areẓm di tburjet d-tamaynut)',
+'cancel' => 'Sbdd',
+'mytalk' => 'Amsawal inu',
 'navigation' => 'Tagriwa',
 
 # Cologne Blue skin
-'qbfind'         => 'Af',
-'qbedit'         => 'Ẓṛeg',
+'qbfind' => 'Af',
+'qbedit' => 'Ẓṛeg',
 'qbspecialpages' => 'Tudmawin Special',
 
-'errorpagetitle'   => 'Anezri',
-'returnto'         => 'Dwl ghar $1.',
-'tagline'          => 'Zi {{SITENAME}}',
-'help'             => 'Tallalt',
-'search'           => 'Tarezzut',
-'searchbutton'     => 'Rzu',
-'go'               => 'Raḥ ɣa',
-'searcharticle'    => 'Uyur',
-'history'          => 'Amzruy n Tasna',
-'history_short'    => 'Amezruy',
+'errorpagetitle' => 'Anezri',
+'returnto' => 'Dwl ghar $1.',
+'tagline' => 'Zi {{SITENAME}}',
+'help' => 'Tallalt',
+'search' => 'Tarezzut',
+'searchbutton' => 'Rzu',
+'go' => 'Raḥ ɣa',
+'searcharticle' => 'Uyur',
+'history' => 'Amzruy n Tasna',
+'history_short' => 'Amezruy',
 'printableversion' => 'Tanghelt n usiggez',
-'permalink'        => 'Tamghunt iqqimen',
-'edit'             => 'Ẓṛeg',
-'create'           => 'Egg',
-'editthispage'     => 'Ẓṛg tasna ya',
-'delete'           => 'Kks',
-'protect'          => 'Mstn',
-'protect_change'   => 'sbadl',
-'newpage'          => 'Tasna d-tamaynut',
-'talkpage'         => 'Siwl xf tasna ya',
+'permalink' => 'Tamghunt iqqimen',
+'edit' => 'Ẓṛeg',
+'create' => 'Egg',
+'editthispage' => 'Ẓṛg tasna ya',
+'delete' => 'Kks',
+'protect' => 'Mstn',
+'protect_change' => 'sbadl',
+'newpage' => 'Tasna d-tamaynut',
+'talkpage' => 'Siwl xf tasna ya',
 'talkpagelinktext' => 'Awal',
-'personaltools'    => 'Imassen inu',
-'talk'             => 'siwel',
-'views'            => 'Timmeẓṛa',
-'toolbox'          => 'Tanakat n imassen',
-'otherlanguages'   => 'S tutlayin nneḍni',
-'redirectedfrom'   => '(Itwasnnmd-d zi $1)',
-'redirectpagesub'  => 'Tasna n (Redirect)',
-'jumpto'           => 'Nḍu ghar:',
+'personaltools' => 'Imassen inu',
+'talk' => 'siwel',
+'views' => 'Timmeẓṛa',
+'toolbox' => 'Tanakat n imassen',
+'otherlanguages' => 'S tutlayin nneḍni',
+'redirectedfrom' => '(Itwasnnmd-d zi $1)',
+'redirectpagesub' => 'Tasna n (Redirect)',
+'jumpto' => 'Nḍu ghar:',
 'jumptonavigation' => 'tagriwa',
-'jumptosearch'     => 'tarezzut',
+'jumptosearch' => 'tarezzut',
 
 # 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 xef {{SITENAME}}',
-'aboutpage'            => 'Project:Awal xef',
-'copyrightpage'        => '{{ns:project}}:izrefan ussenɣel',
-'currentevents'        => 'Mayn itemsaren rux',
-'currentevents-url'    => 'Project:mayn itmesaren ruxa',
-'disclaimers'          => 'Ismigilen',
-'disclaimerpage'       => 'Project:Asmigel amatu',
-'edithelp'             => 'Tallalt deg uẓareg',
-'edithelppage'         => 'Help:Aẓareg',
-'helppage'             => 'Help:tallalt',
-'mainpage'             => 'Tasna Tamezwarut',
+'aboutsite' => 'Awal xef {{SITENAME}}',
+'aboutpage' => 'Project:Awal xef',
+'copyrightpage' => '{{ns:project}}:izrefan ussenɣel',
+'currentevents' => 'Mayn itemsaren rux',
+'currentevents-url' => 'Project:mayn itmesaren ruxa',
+'disclaimers' => 'Ismigilen',
+'disclaimerpage' => 'Project:Asmigel amatu',
+'edithelp' => 'Tallalt deg uẓareg',
+'edithelppage' => 'Help:Aẓareg',
+'helppage' => 'Help:tallalt',
+'mainpage' => 'Tasna Tamezwarut',
 'mainpage-description' => 'Tasna Tamzwarut',
-'portal'               => 'Tawwart n timetti',
-'portal-url'           => 'Project:tawwart n timetti',
-'privacy'              => 'Tasertit n tusligi',
-'privacypage'          => 'Project:Tasertit n tusligi',
-
-'retrievedfrom'       => 'Itwarr-d zi "$1"',
-'youhavenewmessages'  => 'Ghar-k / Ghar-m $1 ($2).',
-'newmessageslink'     => 'tibratin timaynutin',
+'portal' => 'Tawwart n timetti',
+'portal-url' => 'Project:tawwart n timetti',
+'privacy' => 'Tasertit n tusligi',
+'privacypage' => 'Project:Tasertit n tusligi',
+
+'retrievedfrom' => 'Itwarr-d zi "$1"',
+'youhavenewmessages' => 'Ghar-k / Ghar-m $1 ($2).',
+'newmessageslink' => 'tibratin timaynutin',
 'newmessagesdifflink' => 'Taẓṛigt tanggarut',
-'editsection'         => 'Ẓṛeg',
-'editold'             => 'ẓṛeg',
-'editlink'            => 'ẓṛg',
-'viewsourcelink'      => 'ẓṛ aghbalu',
-'editsectionhint'     => 'Ẓṛeg tigezmi: $1',
-'toc'                 => 'Iktturn',
-'showtoc'             => 'sskn-d',
-'hidetoc'             => 'snuffar',
-'site-rss-feed'       => 'Tilgha n RSS n $1',
-'site-atom-feed'      => 'Talghut n Atom n $1',
-'page-rss-feed'       => 'Asudem n RSS n "$1"',
-'red-link-title'      => '$1 (tasna ur telli)',
+'editsection' => 'Ẓṛeg',
+'editold' => 'ẓṛeg',
+'editlink' => 'ẓṛg',
+'viewsourcelink' => 'ẓṛ aghbalu',
+'editsectionhint' => 'Ẓṛeg tigezmi: $1',
+'toc' => 'Iktturn',
+'showtoc' => 'sskn-d',
+'hidetoc' => 'snuffar',
+'site-rss-feed' => 'Tilgha n RSS n $1',
+'site-atom-feed' => 'Talghut n Atom n $1',
+'page-rss-feed' => 'Asudem n RSS n "$1"',
+'red-link-title' => '$1 (tasna ur telli)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Tasna',
-'nstab-user'     => 'Tasna n User',
-'nstab-project'  => 'Tasna usenfar',
-'nstab-image'    => 'Asatul',
+'nstab-main' => 'Tasna',
+'nstab-user' => 'Tasna n User',
+'nstab-project' => 'Tasna usenfar',
+'nstab-image' => 'Asatul',
 'nstab-template' => 'Tamudmt',
 'nstab-category' => 'Taggayt(category)',
 
 # General errors
-'badtitle'       => 'isem war icni ca',
-'badtitletext'   => 'Isem n Tasna itexised war icni ca, ixwa, niɣ  isem n ajar-tutlayt niɣ ajar-wiki war icni ca.
+'badtitle' => 'isem war icni ca',
+'badtitletext' => 'Isem n Tasna itexised war icni ca, ixwa, niɣ  isem n ajar-tutlayt niɣ ajar-wiki war icni ca.
 teqqad ad yilli days ca n usekkil war itwagg deg isem .',
-'viewsource'     => 'Ẓṛ aghbalu',
+'viewsource' => 'Ẓṛ aghbalu',
 'viewsourcetext' => 'Tzemred a tẓerd u atsneɣled aɣbal n Tasna ya :',
 
 # Login and logout pages
-'yourname'                => 'Izwl-usqdac:',
-'yourpassword'            => 'Tawalt n wadaf:',
-'remembermypassword'      => 'ejj (login) inu deg uselkim a (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'login'                   => 'Adf',
+'yourname' => 'Izwl-usqdac:',
+'yourpassword' => 'Tawalt n wadaf:',
+'remembermypassword' => 'ejj (login) inu deg uselkim a (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'login' => 'Adf',
 'nav-login-createaccount' => 'Adef / egg amiḍan',
-'loginprompt'             => "itxessa ad-teṭfed (''cookies'') bac ad tadfed ɣar {{SITENAME}}.",
-'userlogin'               => 'Adf / egg amiḍan',
-'logout'                  => 'Ufugh',
-'userlogout'              => 'Ufugh',
-'nologin'                 => "war ɣark login? '''$1'''.",
-'nologinlink'             => 'Egg amiḍan',
-'createaccount'           => 'Egg amiḍan',
-'gotaccount'              => "ɣark  amiḍan? '''$1'''.",
-'gotaccountlink'          => 'Adeff',
-'loginsuccesstitle'       => 'Adaf icna',
-'loginsuccess'            => "'''Qac tudeffed di {{SITENAME}} s \"\$1\".'''",
-'nosuchuser'              => 'War illi ca n useqdac s isem a"$1".
+'loginprompt' => "itxessa ad-teṭfed (''cookies'') bac ad tadfed ɣar {{SITENAME}}.",
+'userlogin' => 'Adf / egg amiḍan',
+'logout' => 'Ufugh',
+'userlogout' => 'Ufugh',
+'nologin' => "war ɣark login? '''$1'''.",
+'nologinlink' => 'Egg amiḍan',
+'createaccount' => 'Egg amiḍan',
+'gotaccount' => "ɣark  amiḍan? '''$1'''.",
+'gotaccountlink' => 'Adeff',
+'loginsuccesstitle' => 'Adaf icna',
+'loginsuccess' => "'''Qac tudeffed di {{SITENAME}} s \"\$1\".'''",
+'nosuchuser' => 'War illi ca n useqdac s isem a"$1".
 xemm tirra , niɣ egg amiḍan d amaynu.',
-'nosuchusershort'         => 'War illi ca n useqdac s isem a "$1".
+'nosuchusershort' => 'War illi ca n useqdac s isem a "$1".
 xemm tirra.',
-'nouserspecified'         => 'ixessa ad tuced isem n useqdac.',
-'wrongpassword'           => 'Taguri n wadaf war tceni ca. Sideff tenni nican.',
-'wrongpasswordempty'      => 'Taguri n wadaf i tucid texwa. Sideff tenni nican.',
-'passwordtooshort'        => 'Taguri n wadaf inec war d tusi ca.
+'nouserspecified' => 'ixessa ad tuced isem n useqdac.',
+'wrongpassword' => 'Taguri n wadaf war tceni ca. Sideff tenni nican.',
+'wrongpasswordempty' => 'Taguri n wadaf i tucid texwa. Sideff tenni nican.',
+'passwordtooshort' => 'Taguri n wadaf inec war d tusi ca.
 itxessat ad di-s tili {{PLURAL:$1|1 usekkil|$1 isekkilen}} u ad tili temṣebda x isem n useqdac inec.',
-'mailmypassword'          => 'Sekk Taguri n wadaf di E-mail',
-'passwordremindertitle'   => 'Taguri n wadaf tamaynut n ruxa waha {{SITENAME}}',
-'passwordremindertext'    => 'Ca n ijj (teqqad ad yili d cekk, zi tansa IP a $1)
+'mailmypassword' => 'Sekk Taguri n wadaf di E-mail',
+'passwordremindertitle' => 'Taguri n wadaf tamaynut n ruxa waha {{SITENAME}}',
+'passwordremindertext' => 'Ca n ijj (teqqad ad yili d cekk, zi tansa IP a $1)
 inna neɣ ada-s-ad nesekk Taguri n wadaf tamaynut i {{SITENAME}} ($4).
 Taguri n wadaf n useqdac "$2" ruxa d "$3".
 ixessa ad tadeffed bac ad tbeddeled ruxa.
 ɣar {{PLURAL:$5|one day|$5 days}} at sala taguri n wadaf tamaynut .
 mala war illi d cekk ur tawi x manaya , qim sexdam Taguri n wadaf inecc taqburt.',
-'noemail'                 => 'War illi ca n e-mail ɣar useqdac a "$1".',
-'passwordsent'            => 'Taguri n wadaf tamaynut twassekked i e-mail  "$1".
+'noemail' => 'War illi ca n e-mail ɣar useqdac a "$1".',
+'passwordsent' => 'Taguri n wadaf tamaynut twassekked i e-mail  "$1".
 adeff-d xmi ɣa teṭfed.',
-'eauthentsent'            => 'ijj n e-mail itwasekked ɣar e-mail nni.
+'eauthentsent' => 'ijj n e-mail itwasekked ɣar e-mail nni.
 zzat ma ca n e-mail nniḍen ma ad itwasekk ɣar umiḍan , ixessa ad tegged manayenni di e-mail, bac ad nessen ila qa amiḍan a inec.',
 
 # Change password dialog
 'retypenew' => 'Ɛawd arri Taguri n wadaf tamaynut:',
 
 # Edit page toolbar
-'bold_sample'     => 'Tirra tizurarin',
-'bold_tip'        => 'Tira tizurarin',
-'italic_sample'   => 'Tirra titalyanin',
-'italic_tip'      => 'Tira ifrghn.',
-'link_sample'     => 'isem n tzedayt',
-'link_tip'        => 'Tazdayt n dixl',
-'extlink_sample'  => 'http://www.example.com isem n tezdayt',
-'extlink_tip'     => 'Tazdayt n baṛṛa (qa tettud http:// prefix)',
+'bold_sample' => 'Tirra tizurarin',
+'bold_tip' => 'Tira tizurarin',
+'italic_sample' => 'Tirra titalyanin',
+'italic_tip' => 'Tira ifrghn.',
+'link_sample' => 'isem n tzedayt',
+'link_tip' => 'Tazdayt n dixl',
+'extlink_sample' => 'http://www.example.com isem n tezdayt',
+'extlink_tip' => 'Tazdayt n baṛṛa (qa tettud http:// prefix)',
 'headline_sample' => 'Aḍris n ixf-isem',
-'headline_tip'    => 'Aswir 2 n ixf-isem',
-'nowiki_sample'   => 'Sideff da tirra bla taseddast(formatting) n wiki',
-'nowiki_tip'      => 'Ur tawi x taseddast(formatting) n wiki',
-'image_tip'       => 'Afaylu war-itmesebḍi',
-'media_tip'       => 'Tazdayt ufaylu',
-'sig_tip'         => 'Azewl(signature) inec ag ukud(time) .',
-'hr_tip'          => 'Acariḍ aglawan',
+'headline_tip' => 'Aswir 2 n ixf-isem',
+'nowiki_sample' => 'Sideff da tirra bla taseddast(formatting) n wiki',
+'nowiki_tip' => 'Ur tawi x taseddast(formatting) n wiki',
+'image_tip' => 'Afaylu war-itmesebḍi',
+'media_tip' => 'Tazdayt ufaylu',
+'sig_tip' => 'Azewl(signature) inec ag ukud(time) .',
+'hr_tip' => 'Acariḍ aglawan',
 
 # Edit pages
-'summary'                    => 'Tagḍwit:',
-'subject'                    => 'Abatu/izwl:',
-'minoredit'                  => 'Ta d taẓrigt d-tamẓeyant',
-'watchthis'                  => 'Ḥḍa tasna ya',
-'savearticle'                => 'Xmml tasna',
-'preview'                    => 'Azar-ascan',
-'showpreview'                => 'Ẓar Azar-ascan',
-'showdiff'                   => 'Ẓar mayn teẓṛegd.',
-'anoneditwarning'            => "'''ɣark:''' war tudifd ca s isem inec.
+'summary' => 'Tagḍwit:',
+'subject' => 'Abatu/izwl:',
+'minoredit' => 'Ta d taẓrigt d-tamẓeyant',
+'watchthis' => 'Ḥḍa tasna ya',
+'savearticle' => 'Xmml tasna',
+'preview' => 'Azar-ascan',
+'showpreview' => 'Ẓar Azar-ascan',
+'showdiff' => 'Ẓar mayn teẓṛegd.',
+'anoneditwarning' => "'''ɣark:''' war tudifd ca s isem inec.
 Tansa n IP inac ad-teqqim deg umezruy n teẓṛigin n Tasna ya .",
-'summary-preview'            => 'Azar-ascan n Tegḍwit:',
-'blockedtext'                => "'''Isem useqdac niɣ tansa IP inecc tewabluca  .'''
+'summary-preview' => 'Azar-ascan n Tegḍwit:',
+'blockedtext' => "'''Isem useqdac niɣ tansa IP inecc tewabluca  .'''
 
 iblocat  $1.
 Maynzi ''$2''.
@@ -246,51 +246,51 @@ Tzemred ad temsawaded ag $1 niɣ [[{{MediaWiki:Grouppage-sysop}}|administrator]]
 war tzemred ca ad ad tesxedmed 'e-mail this user' ɣar mala ca n e-mail illa ɣark di [[Special:Preferences|Isemyifiyen n umiḍan]] u war twabluki ca usexdem ines.
 Tansa IP inecc n ruxa d $3, u ID icecc iteblukan d #$5.
 maṛṛa manaya deg ujenna eggit di tabrat i ɣ-ad tsekked.",
-'newarticle'                 => '(Amaynu)',
-'newarticletext'             => "Tdefar-d tazdayt n Tasna εad war telli .
+'newarticle' => '(Amaynu)',
+'newarticletext' => "Tdefar-d tazdayt n Tasna εad war telli .
 bac ad tegged , arri di taflwit a swadday (xemm i [[{{MediaWiki:Helppage}}| Tasna n Tallalt]] i ineɣmisen ifruryen).
 mala qacek da s ɣalaṭ waha, tecca di tbutunt n '''deffar''' di (browser) inec .",
-'noarticletext'              => 'Rxxu ur din llint ca tira di tasna ya.
+'noarticletext' => 'Rxxu ur din llint ca tira di tasna ya.
 Tzmmard [[Special:Search/{{PAGENAME}}|rzu xf yizwl n tasna ya]] di tasniwin nnḍni,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
 nigh [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
-'previewnote'                => "'''Wa d Azar-ascan waha;
+'previewnote' => "'''Wa d Azar-ascan waha;
 tiẓṛigin εad war twaḥḍent!'''",
-'editing'                    => 'Aẓṛag di $1',
-'editingsection'             => 'Aẓrag  di $1 (tigezmi)',
-'copyrightwarning'           => "Maṛṛa tirra di {{SITENAME}} twaggent swadday i $2 (ẓar da $1).
+'editing' => 'Aẓṛag di $1',
+'editingsection' => 'Aẓrag  di $1 (tigezmi)',
+'copyrightwarning' => "Maṛṛa tirra di {{SITENAME}} twaggent swadday i $2 (ẓar da $1).
 mala war texsed tirra inac ad twaẓṛegent , ad twamsebḍant .
 Ur ten-teg ca da.<br />
 tjadjid-anɣ Ɛawt ila qa d cekk ig yuran manaya, niɣ tesneɣlet-id zi ca n uɣbal nniḍn d alelli.
 '''UR SADDAF CA TIRRA ƔARSENT COPYRIGHTE BLA MA AD-IXES BAB-INES !'''",
-'templatesused'              => 'Timudmiwin itwaggen di Tasna ya:',
-'templatesusedpreview'       => 'Timudmiwin igg itwasxdemen dg uzar-ascan a :',
-'template-protected'         => '(twaḥḍa)',
-'template-semiprotected'     => '(semi-protected)',
-'nocreatetext'               => '{{SITENAME}} war iqqim ca itejja iwdan ad ggen Tasniwin timaynutin.
+'templatesused' => 'Timudmiwin itwaggen di Tasna ya:',
+'templatesusedpreview' => 'Timudmiwin igg itwasxdemen dg uzar-ascan a :',
+'template-protected' => '(twaḥḍa)',
+'template-semiprotected' => '(semi-protected)',
+'nocreatetext' => '{{SITENAME}} war iqqim ca itejja iwdan ad ggen Tasniwin timaynutin.
 tzemred addewred ɣar deffar, niɣ [[Special:UserLogin|Adeff niɣ egg amiḍan]].',
 'recreate-moveddeleted-warn' => "'''Ɣark: qac tegged Tasna ig itwaksen zzat uya.'''
 
 Ẓar aɣmis n umzruy n usfad n Tasna ya bac ad tsenad ma mliḥ ad tkemled aẓṛag.",
 
 # History pages
-'viewpagelogs'           => 'Ẓar aɣmis n Tasna ya',
-'currentrev'             => 'Afegged n ruxa',
-'revisionasof'           => 'Affegged am $1',
-'revision-info'          => 'Afegged am $1 s $2',
-'previousrevision'       => '←Affegged n zik/zic',
-'nextrevision'           => 'Afegged d amaynu→',
-'currentrevisionlink'    => 'Afegged n rux',
-'cur'                    => '',
-'last'                   => 'anggaru',
-'page_first'             => 'amzwaru',
-'page_last'              => 'anggaru',
-'histlegend'             => 'imṣebḍiyen: Sti(ixter) tibuttonin a ɣar wadday n tunɣilin n Tasna bac ad tsmzazal(compare).<br />
+'viewpagelogs' => 'Ẓar aɣmis n Tasna ya',
+'currentrev' => 'Afegged n ruxa',
+'revisionasof' => 'Affegged am $1',
+'revision-info' => 'Afegged am $1 s $2',
+'previousrevision' => '←Affegged n zik/zic',
+'nextrevision' => 'Afegged d amaynu→',
+'currentrevisionlink' => 'Afegged n rux',
+'cur' => '',
+'last' => 'anggaru',
+'page_first' => 'amzwaru',
+'page_last' => 'anggaru',
+'histlegend' => 'imṣebḍiyen: Sti(ixter) tibuttonin a ɣar wadday n tunɣilin n Tasna bac ad tsmzazal(compare).<br />
 Tasarut: (cur) = imṣebḍiyen ag tunɣilt n ruxa,
 (last) = imṣebḍiyen ag tunɣilt n zik, M = taẓrigt d-tamẓeyant.',
 'history-fieldset-title' => 'Amzruy n min tẓṛid',
-'histfirst'              => 'Amzwaru n marra',
-'histlast'               => 'Anggaru n marra',
+'histfirst' => 'Amzwaru n marra',
+'histlast' => 'Anggaru n marra',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 ɣar $2',
@@ -299,41 +299,40 @@ Tasarut: (cur) = imṣebḍiyen ag tunɣilt n ruxa,
 'rev-delundel' => 'sken/ffer',
 
 # Diffs
-'history-title'           => 'Amezruy n ufegged n "$1"',
-'difference'              => '(Amsebḍi jar ifeggiden)',
-'lineno'                  => 'Tabrit $1:',
+'history-title' => 'Amezruy n ufegged n "$1"',
+'lineno' => 'Tabrit $1:',
 'compareselectedversions' => 'Smequdda tunɣilin a',
-'editundo'                => 'kkes min ggigh',
-'diff-multi'              => '({{PLURAL:$1|ijj n ufegged|$1 ifeggiden}} war ad twamlen ca.)',
+'editundo' => 'kkes min ggigh',
+'diff-multi' => '({{PLURAL:$1|ijj n ufegged|$1 ifeggiden}} war ad twamlen ca.)',
 
 # Search results
-'searchresults'             => 'Tifellawin n tarezzut',
-'searchresults-title'       => 'Tifellawin n tarezzut xef "$1"',
-'searchsubtitle'            => 'Trezzud xef \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|marra tasniwin issentan s "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|marra tasniwin iteqqnen ghar "$1"]])',
-'prevn'                     => 'Amzray {{PLURAL:$1|$1}}',
-'nextn'                     => 'wn d-itasn {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Ẓeṛ ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 tawalt|$2 tiwalin}})',
-'search-suggest'            => 'Ttugha txsd a tinid: $1',
-'search-interwiki-caption'  => 'Awmatn n usnfar',
-'search-interwiki-more'     => '(ujar)',
-'search-mwsuggest-enabled'  => 's isumuren',
+'searchresults' => 'Tifellawin n tarezzut',
+'searchresults-title' => 'Tifellawin n tarezzut xef "$1"',
+'searchsubtitle' => 'Trezzud xef \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|marra tasniwin issentan s "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|marra tasniwin iteqqnen ghar "$1"]])',
+'prevn' => 'Amzray {{PLURAL:$1|$1}}',
+'nextn' => 'wn d-itasn {{PLURAL:$1|$1}}',
+'viewprevnext' => 'Ẓeṛ ($1 {{int:pipe-separator}} $2) ($3)',
+'search-result-size' => '$1 ({{PLURAL:$2|1 tawalt|$2 tiwalin}})',
+'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',
+'searchall' => 'maṛṛa',
+'powersearch' => 'Tarzzut tanmhazt',
+'powersearch-legend' => 'Tarzzut tanmhazt',
 
 # Preferences page
-'preferences'         => 'Ismyifiyn',
-'mypreferences'       => 'Isemyifiyen inu',
-'searchresultshead'   => 'Tarzzut',
-'yourrealname'        => 'isem n deṣṣaḥ :',
+'preferences' => 'Ismyifiyn',
+'mypreferences' => 'Isemyifiyen inu',
+'searchresultshead' => 'Tarzzut',
+'yourrealname' => 'isem n deṣṣaḥ :',
 'prefs-help-realname' => 'isem inec n deṣṣaḥ mala txesad waha .
 mala tucit-id, ataf Lxdant inec a tetwassan ila inec.',
 
 # Groups
 'group-sysop' => 'Indbaln',
-'group-all'   => '(maṛṛa)',
+'group-all' => '(maṛṛa)',
 
 'grouppage-sysop' => '{{ns:project}}:inedbalen',
 
@@ -341,64 +340,64 @@ mala tucit-id, ataf Lxdant inec a tetwassan ila inec.',
 'rightslog' => 'Aghmis n talghut n izrfan n usqdac',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|tiẓṛegt|tiẓṛigin}}',
-'recentchanges'                  => 'Tiẓṛigin tinggura',
+'nchanges' => '$1 {{PLURAL:$1|tiẓṛegt|tiẓṛigin}}',
+'recentchanges' => 'Tiẓṛigin tinggura',
 'recentchanges-feed-description' => 'Bbar tiẓṛigin timayutin n wiki deg usudem(feed) a .',
-'rcnote'                         => "Awadday {{PLURAL:$1|d '''1''' taẓṛigt|d '''$1''' tiẓṛigin tinggura}} deg {{PLURAL:$2|ass anggaru |'''$2''' ussan inggura}}, am di $5, $4.",
-'rcnotefrom'                     => "ɣar wadday d tiẓṛigin zi '''$2''' (ar '''$1''' ).",
-'rclistfrom'                     => 'Ẓar tiẓṛigin timaynutin ig ibeddan zi $1',
-'rcshowhideminor'                => '$1 tiẓṛigin d-timeẓyanin',
-'rcshowhidebots'                 => '$1 iroboten(robots)',
-'rcshowhideliu'                  => '$1 users ig yudeffen',
-'rcshowhideanons'                => '$1 users war twasnen',
-'rcshowhidepatr'                 => 'Tiẓṛigin ig itwaẓrent di $1',
-'rcshowhidemine'                 => '$1 tiẓṛigin inu',
-'rclinks'                        => 'Ẓar $1 tiẓṛigin tinggura di $2 n ussan inggura <br />$3',
-'diff'                           => 'imṣebḍan',
-'hist'                           => 'Amezruy',
-'hide'                           => 'Snuffar',
-'show'                           => 'smmel-ad',
-'minoreditletter'                => 'm',
-'newpageletter'                  => 'N',
-'boteditletter'                  => 'b',
+'rcnote' => "Awadday {{PLURAL:$1|d '''1''' taẓṛigt|d '''$1''' tiẓṛigin tinggura}} deg {{PLURAL:$2|ass anggaru |'''$2''' ussan inggura}}, am di $5, $4.",
+'rcnotefrom' => "ɣar wadday d tiẓṛigin zi '''$2''' (ar '''$1''' ).",
+'rclistfrom' => 'Ẓar tiẓṛigin timaynutin ig ibeddan zi $1',
+'rcshowhideminor' => '$1 tiẓṛigin d-timeẓyanin',
+'rcshowhidebots' => '$1 iroboten(robots)',
+'rcshowhideliu' => '$1 users ig yudeffen',
+'rcshowhideanons' => '$1 users war twasnen',
+'rcshowhidepatr' => 'Tiẓṛigin ig itwaẓrent di $1',
+'rcshowhidemine' => '$1 tiẓṛigin inu',
+'rclinks' => 'Ẓar $1 tiẓṛigin tinggura di $2 n ussan inggura <br />$3',
+'diff' => 'imṣebḍan',
+'hist' => 'Amezruy',
+'hide' => 'Snuffar',
+'show' => 'smmel-ad',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
 
 # Recent changes linked
-'recentchangeslinked'          => 'Isenfilen i yudsen wa',
-'recentchangeslinked-feed'     => 'Tiẓṛigin ag ta',
-'recentchangeslinked-toolbox'  => 'Tiẓṛigin ag ta',
-'recentchangeslinked-title'    => 'Tiẓṛigin ssaɣant-id ɣar "$1"',
+'recentchangeslinked' => 'Isenfilen i yudsen wa',
+'recentchangeslinked-feed' => 'Tiẓṛigin ag ta',
+'recentchangeslinked-toolbox' => 'Tiẓṛigin ag ta',
+'recentchangeslinked-title' => 'Tiẓṛigin ssaɣant-id ɣar "$1"',
 'recentchangeslinked-noresult' => 'War llint ca n tiẓṛigin di Tasna ya di lwaqt id-tucid .',
-'recentchangeslinked-summary'  => "Ta d tabdart n isnfiln itwaggn drus zggwami di tasniwin id-iqqnen zg ict tasna nniḍn (nigh iqqnen ghar iwdan zi ca n taggayt).
+'recentchangeslinked-summary' => "Ta d tabdart n isnfiln itwaggn drus zggwami di tasniwin id-iqqnen zg ict tasna nniḍn (nigh iqqnen ghar iwdan zi ca n taggayt).
 Tasniwin di [[Special:Watchlist|your watchlist]] d '''tizurarin'''.",
-'recentchangeslinked-page'     => 'Izwl n tasna:',
+'recentchangeslinked-page' => 'Izwl n tasna:',
 
 # Upload
-'upload'            => 'Zdem-d asatul',
-'uploadbtn'         => 'Zdem-d afaylu',
-'uploadlogpage'     => 'Zdem-d aɣmis',
-'filedesc'          => 'Asgbr',
+'upload' => 'Zdem-d asatul',
+'uploadbtn' => 'Zdem-d afaylu',
+'uploadlogpage' => 'Zdem-d aɣmis',
+'filedesc' => 'Asgbr',
 'fileuploadsummary' => 'Asgbr:',
-'uploadedimage'     => 'itwazdem-d "[[$1]]"',
-'watchthisupload'   => 'Xm tasbtirt a',
+'uploadedimage' => 'itwazdem-d "[[$1]]"',
+'watchthisupload' => 'Xm tasbtirt a',
 
 # Special:ListFiles
 'listfiles' => 'Tabdart n ifayluten',
 
 # File description page
-'file-anchor-link'          => 'Afaylu',
-'filehist'                  => 'Amzruy n usatul',
-'filehist-help'             => 'Tka di date/time bac ad tẓerd afaylu mamec ja d-itban di Lwaqt a .',
-'filehist-deleteone'        => 'sfaḍ',
-'filehist-current'          => 'aturaw',
-'filehist-datetime'         => 'Azmz/Akud',
-'filehist-user'             => 'Aseqdac',
-'filehist-dimensions'       => 'Tisektiwin',
-'filehist-filesize'         => 'Tiddi n ufaylu',
-'filehist-comment'          => 'Tinit',
-'imagelinks'                => 'Iwurn n usdaw',
-'linkstoimage'              => '{{PLURAL:$1|Tasna ya teqn-ad|$1 Tasniwin a qnent-id}} ɣa ufaylu ya :',
-'nolinkstoimage'            => 'war telli ca n Tasna teqqen-d ɣa ufaylu ya.',
-'sharedupload'              => 'Wa d ijj ufaylu itwacrec jar aṭṭas n isenfaren(projects).',
+'file-anchor-link' => 'Afaylu',
+'filehist' => 'Amzruy n usatul',
+'filehist-help' => 'Tka di date/time bac ad tẓerd afaylu mamec ja d-itban di Lwaqt a .',
+'filehist-deleteone' => 'sfaḍ',
+'filehist-current' => 'aturaw',
+'filehist-datetime' => 'Azmz/Akud',
+'filehist-user' => 'Aseqdac',
+'filehist-dimensions' => 'Tisektiwin',
+'filehist-filesize' => 'Tiddi n ufaylu',
+'filehist-comment' => 'Tinit',
+'imagelinks' => 'Iwurn n usdaw',
+'linkstoimage' => '{{PLURAL:$1|Tasna ya teqn-ad|$1 Tasniwin a qnent-id}} ɣa ufaylu ya :',
+'nolinkstoimage' => 'war telli ca n Tasna teqqen-d ɣa ufaylu ya.',
+'sharedupload' => 'Wa d ijj ufaylu itwacrec jar aṭṭas n isenfaren(projects).',
 'uploadnewversion-linktext' => 'Zdem-d tunɣilt d-tamaynut n ufaylu a',
 
 # File deletion
@@ -426,64 +425,64 @@ Tasniwin di [[Special:Watchlist|your watchlist]] d '''tizurarin'''.",
 
 'doubleredirects' => '(redirects) ɛɛawdent',
 
-'brokenredirects'        => '(redirects) arẓent',
-'brokenredirects-edit'   => 'arri',
+'brokenredirects' => '(redirects) arẓent',
+'brokenredirects-edit' => 'arri',
 'brokenredirects-delete' => 'sfaḍ',
 
-'withoutinterwiki'        => 'Tasna bla tiẓdayin n tutlayt',
+'withoutinterwiki' => 'Tasna bla tiẓdayin n tutlayt',
 'withoutinterwiki-submit' => 'Smmrad',
 
 'fewestrevisions' => 'Tasniwin s cwayt n ifeggiden',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 {{PLURAL:$1|atamḍan|itamḍanen}}',
-'nlinks'                  => '$1 {{PLURAL:$1|Tazdayt|Tizdayin}}',
-'nmembers'                => '$1 {{PLURAL:$1|amaslad|imasladen}}',
-'lonelypages'             => 'Tasniwin tigujilin',
-'uncategorizedpages'      => 'Tasniwin bla taggayt',
+'nbytes' => '$1 {{PLURAL:$1|atamḍan|itamḍanen}}',
+'nlinks' => '$1 {{PLURAL:$1|Tazdayt|Tizdayin}}',
+'nmembers' => '$1 {{PLURAL:$1|amaslad|imasladen}}',
+'lonelypages' => 'Tasniwin tigujilin',
+'uncategorizedpages' => 'Tasniwin bla taggayt',
 'uncategorizedcategories' => 'Taggayin bla taggayt',
-'uncategorizedimages'     => 'ifayluten bla taggayt',
-'uncategorizedtemplates'  => 'Timudmiwin bla taggayt',
-'unusedcategories'        => 'Taggayin war twasxedment ca',
-'unusedimages'            => 'ifayluten war twasxedmen',
-'wantedcategories'        => 'Taggayin twaxsent',
-'wantedpages'             => 'Tasniwin tewaxsent aṭṭas',
-'mostlinked'              => 'Tasniwin iɣar-d-tewaqqenen aṭṭas',
-'mostlinkedcategories'    => 'Taggayin iɣar-d tewaqqenen aṭṭas',
-'mostlinkedtemplates'     => 'Timudmiwin iɣar-d tewaqqenen aṭṭas',
-'mostcategories'          => 'Tasna iɣar llan taggayin aṭṭas',
-'mostimages'              => 'ifayluten iɣar-d tewaqqenen aṭṭas',
-'mostrevisions'           => 'Tasna iɣa illa aṭṭas qaɛ n ifeggiden',
-'prefixindex'             => 'Afran s usekkil amẓwaru',
-'shortpages'              => 'Tasniwin d-tiquḍaḍin',
-'longpages'               => 'Tasniwin d-tizirarin',
-'deadendpages'            => 'Tasniwin s tizdayin mmutent',
-'protectedpages'          => 'Tasniwin ẓarqent',
-'listusers'               => 'Tabdart n iseqdacen',
-'newpages'                => 'Tasniwin timaynutin',
-'ancientpages'            => 'Tasniwin n zik qqaε',
-'move'                    => 'Smutti',
-'movethispage'            => 'Smutti tasna ya',
-'pager-newer-n'           => '{{PLURAL:$1|amynu 1|amynu $1}}',
-'pager-older-n'           => '{{PLURAL:$1|aqbur 1|aqbur $1}}',
+'uncategorizedimages' => 'ifayluten bla taggayt',
+'uncategorizedtemplates' => 'Timudmiwin bla taggayt',
+'unusedcategories' => 'Taggayin war twasxedment ca',
+'unusedimages' => 'ifayluten war twasxedmen',
+'wantedcategories' => 'Taggayin twaxsent',
+'wantedpages' => 'Tasniwin tewaxsent aṭṭas',
+'mostlinked' => 'Tasniwin iɣar-d-tewaqqenen aṭṭas',
+'mostlinkedcategories' => 'Taggayin iɣar-d tewaqqenen aṭṭas',
+'mostlinkedtemplates' => 'Timudmiwin iɣar-d tewaqqenen aṭṭas',
+'mostcategories' => 'Tasna iɣar llan taggayin aṭṭas',
+'mostimages' => 'ifayluten iɣar-d tewaqqenen aṭṭas',
+'mostrevisions' => 'Tasna iɣa illa aṭṭas qaɛ n ifeggiden',
+'prefixindex' => 'Afran s usekkil amẓwaru',
+'shortpages' => 'Tasniwin d-tiquḍaḍin',
+'longpages' => 'Tasniwin d-tizirarin',
+'deadendpages' => 'Tasniwin s tizdayin mmutent',
+'protectedpages' => 'Tasniwin ẓarqent',
+'listusers' => 'Tabdart n iseqdacen',
+'newpages' => 'Tasniwin timaynutin',
+'ancientpages' => 'Tasniwin n zik qqaε',
+'move' => 'Smutti',
+'movethispage' => 'Smutti tasna ya',
+'pager-newer-n' => '{{PLURAL:$1|amynu 1|amynu $1}}',
+'pager-older-n' => '{{PLURAL:$1|aqbur 1|aqbur $1}}',
 
 # Book sources
-'booksources'    => 'Ighbula n udlis',
+'booksources' => 'Ighbula n udlis',
 'booksources-go' => 'Uyur',
 
 # Special:Log
-'specialloguserlabel'  => 'Aseqdac:',
+'specialloguserlabel' => 'Aseqdac:',
 'speciallogtitlelabel' => 'isem:',
-'log'                  => 'Aɣmis',
-'all-logs-page'        => 'Maṛṛa iɣmisen',
+'log' => 'Aɣmis',
+'all-logs-page' => 'Maṛṛa iɣmisen',
 
 # Special:AllPages
-'allpages'       => 'Marra tasniwin',
+'allpages' => 'Marra tasniwin',
 'alphaindexline' => '$1 ɣa $2',
-'nextpage'       => 'Tasna zzat ($1)',
-'prevpage'       => 'Tasna zzat ($1)',
-'allpagesfrom'   => 'Scan-d Tasniwin beddant zi:',
-'allarticles'    => 'Marra tasniwin',
+'nextpage' => 'Tasna zzat ($1)',
+'prevpage' => 'Tasna zzat ($1)',
+'allpagesfrom' => 'Scan-d Tasniwin beddant zi:',
+'allarticles' => 'Marra tasniwin',
 'allpagessubmit' => 'Uyur',
 'allpagesprefix' => 'Ẓar Tasniwin s usekkil amzwaru:',
 
@@ -500,117 +499,117 @@ Tasniwin di [[Special:Watchlist|your watchlist]] d '''tizurarin'''.",
 'emailuser' => 'Ssek E-mail i bnadm a',
 
 # Watchlist
-'watchlist'         => 'Tabdart uḥṭṭu inu',
-'mywatchlist'       => 'Tabdart uḥṭṭu inu',
-'addedwatchtext'    => 'Tasna "[[:$1]]" Temmarni ɣar [[Special:Watchlist|Tabdart uḥṭṭu]].',
-'removedwatchtext'  => 'Tasna "[[:$1]]" twakkes zi [[Special:Watchlist|Tabdart uḥṭṭu inec]].',
-'watch'             => 'Ḥḍa',
-'watchthispage'     => 'Ḥḍa tasna ya',
-'unwatch'           => 'Ur ḥṭṭa',
+'watchlist' => 'Tabdart uḥṭṭu inu',
+'mywatchlist' => 'Tabdart uḥṭṭu inu',
+'addedwatchtext' => 'Tasna "[[:$1]]" Temmarni ɣar [[Special:Watchlist|Tabdart uḥṭṭu]].',
+'removedwatchtext' => 'Tasna "[[:$1]]" twakkes zi [[Special:Watchlist|Tabdart uḥṭṭu inec]].',
+'watch' => 'Ḥḍa',
+'watchthispage' => 'Ḥḍa tasna ya',
+'unwatch' => 'Ur ḥṭṭa',
 'watchlist-details' => '{{PLURAL:$1|$1 n Tasniwin|$1 n Tasniwin}} Twaẓrent bla Tasniwin n usiwl.',
-'wlshowlast'        => 'Sseml-ad $1 tisεεatin $2 ussan $3 inggura',
+'wlshowlast' => 'Sseml-ad $1 tisεεatin $2 ussan $3 inggura',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Ḥṭṭigh...',
+'watching' => 'Ḥṭṭigh...',
 'unwatching' => 'Ur ḥṭṭigh...',
 
 # Delete
-'deletepage'            => 'Kks tasna',
-'delete-legend'         => 'Sfaḍ',
-'historywarning'        => 'ɣark: Tasna i txisd atekesd ɣars amzruy :',
-'confirmdeletetext'     => 'Ur d ac iqqim walu a tsfḍed ict tasna ak marra amzruy nns.
+'deletepage' => 'Kks tasna',
+'delete-legend' => 'Sfaḍ',
+'historywarning' => 'ɣark: Tasna i txisd atekesd ɣars amzruy :',
+'confirmdeletetext' => 'Ur d ac iqqim walu a tsfḍed ict tasna ak marra amzruy nns.
 Ma nican txsd a tggd manaya? Ma tssnd min ttggd? Ma ttggd manaya amc teqqaṛ  [[{{MediaWiki:Policy-url}}|tasrtit n Wiki]] ?',
-'actioncomplete'        => 'Tiggawt tsala',
-'deletedtext'           => '"$1" Twakkes.
+'actioncomplete' => 'Tiggawt tsala',
+'deletedtext' => '"$1" Twakkes.
 Xemm $2 i tikkas timaynutin.',
-'dellogpage'            => 'Aɣmis n uṣfaḍ',
-'deletecomment'         => 'Ssebba:',
-'deleteotherreason'     => 'Ca n ssebba nniḍn:',
+'dellogpage' => 'Aɣmis n uṣfaḍ',
+'deletecomment' => 'Ssebba:',
+'deleteotherreason' => 'Ca n ssebba nniḍn:',
 'deletereasonotherlist' => 'Ssebba nniḍn',
 
 # Rollback
 'rollbacklink' => 'Sdwl ghar dffar',
 
 # Protect
-'protectlogpage'              => 'Aghmis n umstn',
-'prot_1movedto2'              => '[[$1]] twaneql ɣa [[$2]]',
-'protectcomment'              => 'Ssebba:',
-'protectexpiry'               => 'Itsala:',
-'protect_expiry_invalid'      => 'Akud n usali ur illi nican.',
-'protect_expiry_old'          => 'Akud usali izri, idwl d amzruy.',
-'protect-text'                => "tzemred ad teẓṛed u atbedeld aswir n uḥeṭṭu n Tasna ya da '''$1'''.",
-'protect-locked-access'       => "Amiḍan inecc war ɣars turagt bac ad ibeddel aswir n uḥeṭṭu n Tasna .
+'protectlogpage' => 'Aghmis n umstn',
+'prot_1movedto2' => '[[$1]] twaneql ɣa [[$2]]',
+'protectcomment' => 'Ssebba:',
+'protectexpiry' => 'Itsala:',
+'protect_expiry_invalid' => 'Akud n usali ur illi nican.',
+'protect_expiry_old' => 'Akud usali izri, idwl d amzruy.',
+'protect-text' => "tzemred ad teẓṛed u atbedeld aswir n uḥeṭṭu n Tasna ya da '''$1'''.",
+'protect-locked-access' => "Amiḍan inecc war ɣars turagt bac ad ibeddel aswir n uḥeṭṭu n Tasna .
 Aqa (settings) n Tasna '''$1''':",
-'protect-cascadeon'           => 'Tasna ya tẓarq ruxa mayenzi tudef di {{PLURAL:$1|Tasna, iɣa illa|Tasniwin, iɣa illa}} aḥeṭṭu n usmuzzar(cascading protection).
+'protect-cascadeon' => 'Tasna ya tẓarq ruxa mayenzi tudef di {{PLURAL:$1|Tasna, iɣa illa|Tasniwin, iɣa illa}} aḥeṭṭu n usmuzzar(cascading protection).
 Tezemred ad tbedeld aswir n uḥeṭṭu n Tasna ya, maca war itegg walu i uḥeṭṭu n usmuzzar(cascading protection).',
-'protect-default'             => 'Ejj marra isqdacn.',
-'protect-fallback'            => 'itxessat turagt n "$1"',
+'protect-default' => 'Ejj marra isqdacn.',
+'protect-fallback' => 'itxessat turagt n "$1"',
 'protect-level-autoconfirmed' => 'Bluka iseqdacen war ɣasen ca amiḍan',
-'protect-level-sysop'         => 'inedbalen waha',
-'protect-summary-cascade'     => 'Asmuzzar',
-'protect-expiring'            => 'itsala deg $1 (UTC)',
-'protect-cascade'             => 'Ḥḍa Tasniwin i yudfen di Tasna ya (cascading protection)',
-'protect-cantedit'            => 'war tezemred ca ad tbedeld iswiren n uḥeṭṭu n Tasna ya, mayenzi war ɣark turagt bac ad tẓṛegd.',
-'protect-expiry-options'      => '2 tasεεat:2 hours,1 ass:1 day,3 ussan:3 days,1 amalass:1 week,2 imallasen:2 weeks,1 ayur:1 month,3 iyuren:3 months,6 iyuren:6 months,1 asggas:1 year,infinite:infinite',
-'restriction-type'            => 'Turagt:',
-'restriction-level'           => 'Aswir uskref:',
+'protect-level-sysop' => 'inedbalen waha',
+'protect-summary-cascade' => 'Asmuzzar',
+'protect-expiring' => 'itsala deg $1 (UTC)',
+'protect-cascade' => 'Ḥḍa Tasniwin i yudfen di Tasna ya (cascading protection)',
+'protect-cantedit' => 'war tezemred ca ad tbedeld iswiren n uḥeṭṭu n Tasna ya, mayenzi war ɣark turagt bac ad tẓṛegd.',
+'protect-expiry-options' => '2 tasεεat:2 hours,1 ass:1 day,3 ussan:3 days,1 amalass:1 week,2 imallasen:2 weeks,1 ayur:1 month,3 iyuren:3 months,6 iyuren:6 months,1 asggas:1 year,infinite:infinite',
+'restriction-type' => 'Turagt:',
+'restriction-level' => 'Aswir uskref:',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Arri',
 
 # Undelete
-'undeletebtn'            => 'Ar-ad',
+'undeletebtn' => 'Ar-ad',
 'undelete-search-submit' => 'Tarzzut',
 
 # Namespace form on various pages
-'namespace'      => 'Tallunt-izwel:',
-'invert'         => 'Dren mayn testid (tixtard)',
+'namespace' => 'Tallunt-izwel:',
+'invert' => 'Dren mayn testid (tixtard)',
 'blanknamespace' => '(Amezwaru)',
 
 # Contributions
 'contributions' => 'Tiggawin n useqdac',
-'mycontris'     => 'Tiggawin inu',
-'contribsub2'   => 'i $1 ($2)',
-'uctop'         => '(snnj)',
-'month'         => 'Zg wayur (d zik):',
-'year'          => 'Zg usggwas (d zik):',
+'mycontris' => 'Tiggawin inu',
+'contribsub2' => 'i $1 ($2)',
+'uctop' => '(snnj)',
+'month' => 'Zg wayur (d zik):',
+'year' => 'Zg usggwas (d zik):',
 
-'sp-contributions-newbies'     => 'Ẓar Tabdart n tiggawin n useqdac a deg umiḍan amaynu waha',
+'sp-contributions-newbies' => 'Ẓar Tabdart n tiggawin n useqdac a deg umiḍan amaynu waha',
 'sp-contributions-newbies-sub' => 'i imiḍan imaynuten',
-'sp-contributions-blocklog'    => 'sbdd tabdart n talghut',
-'sp-contributions-talk'        => 'Awal',
-'sp-contributions-search'      => 'Arzu x tiggawin',
-'sp-contributions-username'    => 'Tansa IP d isem useqdac:',
-'sp-contributions-submit'      => 'Tarzzut',
+'sp-contributions-blocklog' => 'sbdd tabdart n talghut',
+'sp-contributions-talk' => 'Awal',
+'sp-contributions-search' => 'Arzu x tiggawin',
+'sp-contributions-username' => 'Tansa IP d isem useqdac:',
+'sp-contributions-submit' => 'Tarzzut',
 
 # What links here
-'whatlinkshere'           => 'Min iteqqnen ghar da',
-'whatlinkshere-title'     => 'Tasniwin id-izedyen ɣar "$1"',
-'whatlinkshere-page'      => 'Tasna:',
-'linkshere'               => "Tasna ya tzedi ɣa '''[[:$1]]''':",
-'nolinkshere'             => "war tlli ca n Tasna tqqen-d da '''[[:$1]]'''.",
-'isredirect'              => 'Tasna n (redirect)',
-'istemplate'              => 'Asidef',
-'isimage'                 => 'amaqqan n tugna',
-'whatlinkshere-prev'      => '{{PLURAL:$1|deffar|deffar $1}}',
-'whatlinkshere-next'      => '{{PLURAL:$1|zzat|zzat $1}}',
-'whatlinkshere-links'     => '← tizdayin',
+'whatlinkshere' => 'Min iteqqnen ghar da',
+'whatlinkshere-title' => 'Tasniwin id-izedyen ɣar "$1"',
+'whatlinkshere-page' => 'Tasna:',
+'linkshere' => "Tasna ya tzedi ɣa '''[[:$1]]''':",
+'nolinkshere' => "war tlli ca n Tasna tqqen-d da '''[[:$1]]'''.",
+'isredirect' => 'Tasna n (redirect)',
+'istemplate' => 'Asidef',
+'isimage' => 'amaqqan n tugna',
+'whatlinkshere-prev' => '{{PLURAL:$1|deffar|deffar $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|zzat|zzat $1}}',
+'whatlinkshere-links' => '← tizdayin',
 'whatlinkshere-hidelinks' => '$1 timqqan',
 
 # Block/unblock
-'blockip'                  => 'Sbdd asqdac a',
-'ipboptions'               => '2 n timirin:2 hours,1 n wass:1 day,3 n wussan:3 days,1 imalass:1 week,2 imallassn:2 weeks,1 wayur:1 month,3 wayurn:3 months,6 wayurn:6 months,1 asggwas:1 year,tartalla:infinite',
-'ipblocklist'              => 'Tabdart n tansiwin IP d isemawen n iseqdacen ig iteblukan',
-'ipblocklist-submit'       => 'Tarzzut',
-'blocklink'                => 'Sbedd',
-'unblocklink'              => 'Ṛẓem',
-'contribslink'             => 'Tiggawin',
-'blocklogpage'             => 'Ẓareqq aɣmis',
-'blocklogentry'            => 'ibloka [[$1]] ar $2 $3',
+'blockip' => 'Sbdd asqdac a',
+'ipboptions' => '2 n timirin:2 hours,1 n wass:1 day,3 n wussan:3 days,1 imalass:1 week,2 imallassn:2 weeks,1 wayur:1 month,3 wayurn:3 months,6 wayurn:6 months,1 asggwas:1 year,tartalla:infinite',
+'ipblocklist' => 'Tabdart n tansiwin IP d isemawen n iseqdacen ig iteblukan',
+'ipblocklist-submit' => 'Tarzzut',
+'blocklink' => 'Sbedd',
+'unblocklink' => 'Ṛẓem',
+'contribslink' => 'Tiggawin',
+'blocklogpage' => 'Ẓareqq aɣmis',
+'blocklogentry' => 'ibloka [[$1]] ar $2 $3',
 'block-log-flags-nocreate' => 'timggit n imiḍanen imaynutn ttwasbdd',
 
 # Move page
-'movepagetext'     => "mala tesxedmed taseddast(form) a swadday, ad tessenaqled maṛṛa amzruy ines ɣar isem amaynu.
+'movepagetext' => "mala tesxedmed taseddast(form) a swadday, ad tessenaqled maṛṛa amzruy ines ɣar isem amaynu.
 isem aqbur ad idwel d Tasna n (redirect) ɣar isem amaynu .
 tzemred ad tebedled (redirects) bac ad qnent ɣar isem amezwaru s ufus.
 mala war texsed ca, ẓar [[Special:DoubleRedirects|double]] niɣ [[Special:BrokenRedirects|broken redirects]].
@@ -626,21 +625,21 @@ manaya itebeddal Tasniwin, ixessa ad tesned mliḥ man tegged zzat ma ad tkemled
 *Mala war tixtard tabelludt a swadday.
 
 mala amya, itxessa cekk ad tesnaqled s ufus mala txisd.",
-'movearticle'      => 'Smutti tasna:',
-'newtitle'         => 'Ghar yizwl amaynu:',
-'move-watch'       => 'Ẓar Tasna ya',
-'movepagebtn'      => 'Snaqel Tasna',
-'pagemovedsub'     => 'Asmutti itwagg',
-'movepage-moved'   => '\'\'\'"$1" twanql ɣar "$2"\'\'\'',
-'articleexists'    => 'Tasna s isem a tella da, niɣ isem itucid war icni.
+'movearticle' => 'Smutti tasna:',
+'newtitle' => 'Ghar yizwl amaynu:',
+'move-watch' => 'Ẓar Tasna ya',
+'movepagebtn' => 'Snaqel Tasna',
+'pagemovedsub' => 'Asmutti itwagg',
+'movepage-moved' => '\'\'\'"$1" twanql ɣar "$2"\'\'\'',
+'articleexists' => 'Tasna s isem a tella da, niɣ isem itucid war icni.
 ixdar isem nniḍn.',
-'talkexists'       => "'''Tasna twanql , maca Tasna n usiwl ins war twanqel ca maymmi qaddin ict nninḍ.
+'talkexists' => "'''Tasna twanql , maca Tasna n usiwl ins war twanqel ca maymmi qaddin ict nninḍ.
 snaqlitent s ufus.'''",
-'movedto'          => 'smutti ghar',
-'movetalk'         => 'Snaqel Tasniwin n usiwl igg illan akid-s',
-'movelogpage'      => 'Snaql aɣmis',
-'movereason'       => 'Ssebba:',
-'revertmove'       => 'sedwel',
+'movedto' => 'smutti ghar',
+'movetalk' => 'Snaqel Tasniwin n usiwl igg illan akid-s',
+'movelogpage' => 'Snaql aɣmis',
+'movereason' => 'Ssebba:',
+'revertmove' => 'sedwel',
 
 # Export
 'export' => 'Sekk tasniwin',
@@ -649,76 +648,76 @@ snaqlitent s ufus.'''",
 'allmessages' => 'inzan n unagraw',
 
 # Thumbnails
-'thumbnail-more'  => 'Smghar',
+'thumbnail-more' => 'Smghar',
 'thumbnail_error' => 'Error creating thumbnail: $1',
 
 # Import log
 'importlogpage' => 'Siri-d aɣmis',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Tasna inu',
-'tooltip-pt-mytalk'               => 'Tasna usiwl inu',
-'tooltip-pt-preferences'          => 'Isemyifiyen inu',
-'tooltip-pt-watchlist'            => 'Tabdart n Tasniwin umi txmamd bac ad-ten teẓṛegd',
-'tooltip-pt-mycontris'            => 'Umuɣ n tiwuriwin inu',
-'tooltip-pt-login'                => 'Neqqar ac adef s umiḍan nnek; maca malla texsed waha',
-'tooltip-pt-logout'               => 'Ufugh',
-'tooltip-ca-talk'                 => 'Amsawal xef tasna n ukettur',
-'tooltip-ca-edit'                 => 'Tzemmared a tẓeṛged tasna ya.
+'tooltip-pt-userpage' => 'Tasna inu',
+'tooltip-pt-mytalk' => 'Tasna usiwl inu',
+'tooltip-pt-preferences' => 'Isemyifiyen inu',
+'tooltip-pt-watchlist' => 'Tabdart n Tasniwin umi txmamd bac ad-ten teẓṛegd',
+'tooltip-pt-mycontris' => 'Umuɣ n tiwuriwin inu',
+'tooltip-pt-login' => 'Neqqar ac adef s umiḍan nnek; maca malla texsed waha',
+'tooltip-pt-logout' => 'Ufugh',
+'tooltip-ca-talk' => 'Amsawal xef tasna n ukettur',
+'tooltip-ca-edit' => 'Tzemmared a tẓeṛged tasna ya.
 Bbeẓ x ufeskar n uzar-timeẓṛi zzat i gha txemmled min turid',
-'tooltip-ca-addsection'           => 'Arni tinit deg usiwl a.',
-'tooltip-ca-viewsource'           => 'Tasna ya tẓarq. tzemred atẓred aɣbal ines.',
-'tooltip-ca-history'              => 'Isughulen izrin n tasna ya.',
-'tooltip-ca-protect'              => 'Ẓarq Tasna ya',
-'tooltip-ca-delete'               => 'Kks Tasna ya',
-'tooltip-ca-move'                 => 'Snaql Tasna a',
-'tooltip-ca-watch'                => 'Arni tasna ya ghar tbdart uḥṭṭu nnc',
-'tooltip-ca-unwatch'              => 'Kkes Tasna ya zi Tabdart uḥṭṭu inec',
-'tooltip-search'                  => 'Rzu {{SITENAME}}',
-'tooltip-search-go'               => 'Uyur ghar tasna s yizwel a s imant nnes malla tella',
-'tooltip-search-fulltext'         => 'Rzu di tasniwin x waḍṛis a',
-'tooltip-p-logo'                  => 'Tasbtirt Tamzwarut',
-'tooltip-n-mainpage'              => 'Adef ghar tasna tamezwarut',
-'tooltip-n-mainpage-description'  => 'Adef ghar tasna tamezwarut',
-'tooltip-n-portal'                => 'Xf usenfar, mayn tzemmared a tegged, mani gha tafed tighawsiwin',
-'tooltip-n-currentevents'         => 'Af tilgha n ugilal xf tmsarin titurawin',
-'tooltip-n-recentchanges'         => 'Tabdart n isenfilen imaynuten di Wiki.',
-'tooltip-n-randompage'            => 'Zdem ict tasna d tagacurant',
-'tooltip-n-help'                  => 'Mani gha tessned',
-'tooltip-t-whatlinkshere'         => 'Tabdart n marra tasniwin n Wiki i d-iteqqnen da',
-'tooltip-t-recentchangeslinked'   => 'Isenfilen n drus zggwami di tasniwin i yetwaqqnen zi tasna ya',
-'tooltip-t-contributions'         => 'Ẓar Tabdart n tiggawin n useqdac a',
-'tooltip-t-emailuser'             => 'Sekk e-mail i bnadem a',
-'tooltip-t-upload'                => 'Zdem-d isatulen',
-'tooltip-t-specialpages'          => 'Tabdart n marra tasniwin tinemmezrayin',
-'tooltip-t-print'                 => 'Tanghelt usiggez n tasna ya',
-'tooltip-ca-nstab-main'           => 'Ẓeṛ tasna n ukettur',
-'tooltip-ca-nstab-user'           => 'Ẓar Tasna n user',
-'tooltip-ca-nstab-project'        => 'Ẓṛ tasna n usnfar',
-'tooltip-ca-nstab-image'          => 'Ẓar Tasna n ufaylu',
-'tooltip-ca-nstab-template'       => 'Ẓṛ tamudmt',
-'tooltip-ca-nstab-help'           => 'Ẓar Tasna n tallalt',
-'tooltip-ca-nstab-category'       => 'Ẓṛ tasna n taggayt',
-'tooltip-minoredit'               => 'egg-itt d taẓṛigt tamẓyant',
-'tooltip-save'                    => 'Xmml isnfiln nnk',
-'tooltip-preview'                 => 'Ẓṛ mayn turid, zzat i t gha txmmld!',
-'tooltip-diff'                    => 'Ẓar tiẓṛigin i teggid deg uḍṛiṣ a.',
+'tooltip-ca-addsection' => 'Arni tinit deg usiwl a.',
+'tooltip-ca-viewsource' => 'Tasna ya tẓarq. tzemred atẓred aɣbal ines.',
+'tooltip-ca-history' => 'Isughulen izrin n tasna ya.',
+'tooltip-ca-protect' => 'Ẓarq Tasna ya',
+'tooltip-ca-delete' => 'Kks Tasna ya',
+'tooltip-ca-move' => 'Snaql Tasna a',
+'tooltip-ca-watch' => 'Arni tasna ya ghar tbdart uḥṭṭu nnc',
+'tooltip-ca-unwatch' => 'Kkes Tasna ya zi Tabdart uḥṭṭu inec',
+'tooltip-search' => 'Rzu {{SITENAME}}',
+'tooltip-search-go' => 'Uyur ghar tasna s yizwel a s imant nnes malla tella',
+'tooltip-search-fulltext' => 'Rzu di tasniwin x waḍṛis a',
+'tooltip-p-logo' => 'Tasbtirt Tamzwarut',
+'tooltip-n-mainpage' => 'Adef ghar tasna tamezwarut',
+'tooltip-n-mainpage-description' => 'Adef ghar tasna tamezwarut',
+'tooltip-n-portal' => 'Xf usenfar, mayn tzemmared a tegged, mani gha tafed tighawsiwin',
+'tooltip-n-currentevents' => 'Af tilgha n ugilal xf tmsarin titurawin',
+'tooltip-n-recentchanges' => 'Tabdart n isenfilen imaynuten di Wiki.',
+'tooltip-n-randompage' => 'Zdem ict tasna d tagacurant',
+'tooltip-n-help' => 'Mani gha tessned',
+'tooltip-t-whatlinkshere' => 'Tabdart n marra tasniwin n Wiki i d-iteqqnen da',
+'tooltip-t-recentchangeslinked' => 'Isenfilen n drus zggwami di tasniwin i yetwaqqnen zi tasna ya',
+'tooltip-t-contributions' => 'Ẓar Tabdart n tiggawin n useqdac a',
+'tooltip-t-emailuser' => 'Sekk e-mail i bnadem a',
+'tooltip-t-upload' => 'Zdem-d isatulen',
+'tooltip-t-specialpages' => 'Tabdart n marra tasniwin tinemmezrayin',
+'tooltip-t-print' => 'Tanghelt usiggez n tasna ya',
+'tooltip-ca-nstab-main' => 'Ẓeṛ tasna n ukettur',
+'tooltip-ca-nstab-user' => 'Ẓar Tasna n user',
+'tooltip-ca-nstab-project' => 'Ẓṛ tasna n usnfar',
+'tooltip-ca-nstab-image' => 'Ẓar Tasna n ufaylu',
+'tooltip-ca-nstab-template' => 'Ẓṛ tamudmt',
+'tooltip-ca-nstab-help' => 'Ẓar Tasna n tallalt',
+'tooltip-ca-nstab-category' => 'Ẓṛ tasna n taggayt',
+'tooltip-minoredit' => 'egg-itt d taẓṛigt tamẓyant',
+'tooltip-save' => 'Xmml isnfiln nnk',
+'tooltip-preview' => 'Ẓṛ mayn turid, zzat i t gha txmmld!',
+'tooltip-diff' => 'Ẓar tiẓṛigin i teggid deg uḍṛiṣ a.',
 'tooltip-compareselectedversions' => 'Ẓar imsebeḍiyen jar tunɣilin n Tasna ya.',
-'tooltip-watch'                   => 'Arni Tasna ya ɣa Tabdart uḥṭṭu inec',
+'tooltip-watch' => 'Arni Tasna ya ɣa Tabdart uḥṭṭu inec',
 
 # Browsing diffs
 'previousdiff' => '← imṣebḍan n zzat',
-'nextdiff'     => 'Amṣebḍi zzat  →',
+'nextdiff' => 'Amṣebḍi zzat  →',
 
 # Media information
 'file-info-size' => '$1 × $2 pixel, tiddisize n ufaylu: $3, anawtype n MIME: $4',
-'file-nohires'   => 'walu ca n resolution yemɣa x wa.',
-'svg-long-desc'  => 'Afaylu n SVG, dis $1 × $2 pixel, Tiddi n ufaylu: $3',
+'file-nohires' => 'walu ca n resolution yemɣa x wa.',
+'svg-long-desc' => 'Afaylu n SVG, dis $1 × $2 pixel, Tiddi n ufaylu: $3',
 'show-big-image' => 'Resolution ameqran',
 
 # Special:NewFiles
 'newimages' => 'Amewlaf n ifayluten imaynuten',
-'ilsubmit'  => 'Tarzzut',
+'ilsubmit' => 'Tarzzut',
 
 # Bad image list
 'bad_image_list' => 'Tameslayt amya :
@@ -728,12 +727,12 @@ Tazdayt tamzwarut di tebrit ixessa atzdi ɣa afaylu war icni  .
 kur tazdayt tdeffad a tmekkas .',
 
 # Metadata
-'metadata'          => 'Timuca Meta',
-'metadata-help'     => 'Afaylu a ɣar-s tilɣa(informations) nniḍn, teqqad ad tili tarnitent camera niɣ scanner i tiggin.
+'metadata' => 'Timuca Meta',
+'metadata-help' => 'Afaylu a ɣar-s tilɣa(informations) nniḍn, teqqad ad tili tarnitent camera niɣ scanner i tiggin.
 mala afaylu a itwabeddel x mamec ja illa g umezwaru, ca n tilɣa teqqad ad ilint msebḍant x ufaylu amezwaru.',
-'metadata-expand'   => 'Sicen-d tilɣa nnumɣarent',
+'metadata-expand' => 'Sicen-d tilɣa nnumɣarent',
 'metadata-collapse' => 'Snuffar tilgha innumgharn',
-'metadata-fields'   => 'Igran n EXIF metadata i yllan di tbrat a ad adfn di tasna n twlaft xmnni d-gha twḍa  tflwit n metadata.
+'metadata-fields' => 'Igran n EXIF metadata i yllan di tbrat a ad adfn di tasna n twlaft xmnni d-gha twḍa  tflwit n metadata.
 Innḍni ad twaffrn dg umzwar.
 * make
 * model
@@ -750,13 +749,13 @@ Innḍni ad twaffrn dg umzwar.
 * gpsaltitude',
 
 # External editor support
-'edit-externally'      => 'Ẓṛeg afaylu a s usnas zi baṛṛa',
+'edit-externally' => 'Ẓṛeg afaylu a s usnas zi baṛṛa',
 'edit-externally-help' => 'Xemm [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] i ktar n tilɣa(informations).',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'marra',
 'namespacesall' => 'marra',
-'monthsall'     => 'marra',
+'monthsall' => 'marra',
 
 # Multipage image navigation
 'imgmultigo' => 'Raḥ ɣa!',
@@ -767,10 +766,10 @@ Innḍni ad twaffrn dg umzwar.
 # Watchlist editing tools
 'watchlisttools-view' => 'Sicen ibeddilen i ssaɣan ɣar wayawya',
 'watchlisttools-edit' => 'Ẓar d tẓṛegd Tabdart uḥṭṭu',
-'watchlisttools-raw'  => 'Ẓṛeg Tabdart uḥṭṭu tamenzut',
+'watchlisttools-raw' => 'Ẓṛeg Tabdart uḥṭṭu tamenzut',
 
 # Special:Version
-'version'              => 'Tunɣilt',
+'version' => 'Tunɣilt',
 'version-specialpages' => 'Tudmawin Special',
 
 # Special:FileDuplicateSearch
index aeac76c..4b12a40 100644 (file)
@@ -934,7 +934,6 @@ Fa stim che navigar cun agid da las coalliziuns reinizialisescha tia tscherna.',
 
 # Diffs
 'history-title' => 'Cronica da versiuns da "$1"',
-'difference' => '(differenza tranter versiuns)',
 'difference-multipage' => '(Differenzas tranter las paginas)',
 'lineno' => 'Lingia $1:',
 'compareselectedversions' => 'cumparegliar las versiuns selecziunadas',
index c1d4116..7bf69c3 100644 (file)
@@ -692,6 +692,8 @@ Motivul invocat este ''$2''.",
 'filereadonlyerror' => 'Imposibil de modificat fișierul „$1”, deoarece depozitul de fișiere „$2” este în modul „doar citire”.
 
 Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
+'invalidtitle-knownnamespace' => 'Titlu invalid cu spațiul de nume „$2” și textul „$3”',
+'invalidtitle-unknownnamespace' => 'Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”',
 
 # Virus scanner
 'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
@@ -1078,6 +1080,8 @@ Acsete argumente au fost omise.',
 'parser-template-loop-warning' => 'Buclă de formate detectată: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Limită de adâncime a recursiei depășită ($1)',
 'language-converter-depth-warning' => 'Limita adâncimii convertorului de limbă a fost depășită ($1)',
+'node-count-exceeded-category' => 'Pagini unde numărul de noduri este depășit',
+'node-count-exceeded-warning' => 'Pagina a depășit numărul de noduri',
 
 # "Undo" feature
 'undo-success' => 'Modificarea poate fi anulată. Verificați diferența de dedesupt și apoi salvați pentru a termina anularea modificării.',
@@ -1255,7 +1259,8 @@ Folosirea linkurilor de navigare va reseta această coloană.',
 
 # Diffs
 'history-title' => 'Istoricul versiunilor pentru „$1”',
-'difference' => '(Diferența dintre versiuni)',
+'difference-title' => 'Diferență între versiunile paginii „$1”',
+'difference-title-multipage' => 'Diferență între paginile „$1” și „$2”',
 'difference-multipage' => '(Diferență între pagini)',
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Compară versiunile marcate',
@@ -1869,6 +1874,7 @@ Pentru securitate optimă, img_auth.php este dezactivat.',
 'http-curl-error' => 'Eroare la preluarea adresei URL: $1',
 'http-host-unreachable' => 'Adresa URL nu a putut fi accesată.',
 'http-bad-status' => 'A apărut o problemă în timpul solicitării HTTP: $1 $2',
+'http-truncated-body' => 'Corpul cererii a fost recepționat doar parțial.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Nu pot găsi adresa URL',
index 46a196c..d24fa35 100644 (file)
@@ -726,6 +726,7 @@ Arrecuerdete ca jndr'à le file personalizzete .css e .js s'ause scrivere le tit
 'note' => "'''Vide Bbuene:'''",
 'previewnote' => "'''Arrecuerdete queste è sole 'n'andeprime.'''
 le cangiaminde non g'onne state angore reggistrate!",
+'continue-editing' => "Condinue 'u cangiamende",
 'previewconflict' => "Sta andeprime fece vedè 'u teste ca ste jndr'à 'u teste de l'area de sus cumme avène fore ce tu decide cu reggistre.",
 'session_fail_preview' => "'''Ne dispiace! Non ge putime processà 'u cangiamende tue purcè s'a perse 'a sessione de le date.
 Pe piacere pruève 'n'otra vote.
@@ -825,6 +826,9 @@ Ste argumende onne state luete.",
 'parser-template-loop-warning' => "Amme acchiete 'nu cicle de template: [[$1]]",
 'parser-template-recursion-depth-warning' => "Ha state supranete 'u limite di ricorsione de le template ($1)",
 'language-converter-depth-warning' => "'U convertitore de lènghe ha subranate 'u limite de profonnetà ($1)",
+'node-count-exceeded-category' => "Pàggene addò 'u cunde de le node ha sbunnate",
+'expansion-depth-exceeded-category' => "Pàggene addò 'a profonnetà de l'espanzione jè supranate",
+'expansion-depth-exceeded-warning' => "Pàggene ca sbonnane 'a profonnetà de espanzione",
 
 # "Undo" feature
 'undo-success' => "'U cangiamende pò essere annullate.
@@ -1005,7 +1009,6 @@ Vide Bbuene ca ausanne le collegaminde de navigazzione sta culonne avène azzera
 
 # Diffs
 'history-title' => 'Liste de le versiune de "$1"',
-'difference' => "(Differenze 'mbrà versiune)",
 'difference-multipage' => "(Differenze 'mbrà le pàggene)",
 'lineno' => 'Linea $1:',
 'compareselectedversions' => 'Combronde le versiune selezionete',
@@ -1587,6 +1590,8 @@ Ce 'u probbleme angore jè presende, condatte 'n'[[Special:ListUsers/sysop|ammin
 'backend-fail-create' => "Non ge pozze ccrejà 'u file $1.",
 'backend-fail-readonly' => 'L\'archivije de rete "$1" jè pe stu mumende in sole letture. \'U mutive ha state: "$2"',
 'backend-fail-connect' => 'Non ge pozze connettere \'a memorie de rrete "$1".',
+'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".',
 
 # Lock manager
 'lockmanager-notlocked' => 'Non ge pozze sbloccà "$1"; jidde non g\'è bloccate.',
@@ -2700,6 +2705,8 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 'javascripttest-pagetext-noframework' => 'Sta pàgene jè riservate pe le esecuziune de le test de Javascript.',
 'javascripttest-pagetext-unknownframework' => 'Ambiende de teste scanusciute "$1".',
 'javascripttest-pagetext-frameworks' => 'Pe piacere scacchie une de le seguende ambiende de test: $1',
+'javascripttest-qunit-intro' => "Vide 'a [$1 documendazione d'u test] sus a mediawiki.org.",
+'javascripttest-qunit-heading' => 'Ambiende de test MediaUicchi JavaScript QUnit',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => "'A pàgene utende meje",
@@ -3883,10 +3890,12 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'api-error-duplicate-popup-title' => 'Dupleche {{PLURAL:$1|file|file}}',
 'api-error-empty-file' => "'U file ca tu è confermate ere vacande.",
 'api-error-emptypage' => 'Quanne se ne ccreje une, le pàggene vacande non ge sò permesse.',
+'api-error-fetchfileerror' => "Errore inderne: Quacchecose ha sciute stuèrte quanne ste analizzave 'u file.",
 'api-error-file-too-large' => "'U file ca tu è confermate jè troppe granne.",
 'api-error-filename-tooshort' => "'U nome d'u file jè troppe curte.",
 'api-error-filetype-banned' => 'Stu tipe de file jè vietate.',
 'api-error-filetype-missing' => "'U file jè senze 'n'estenzione.",
+'api-error-hookaborted' => "'U cangiamende ca tu stè pruève a ffà ha state inderrotte da 'n'estenzione.",
 'api-error-http' => "Errore inderne: Non ge se riesce a collegà a 'u server",
 'api-error-illegal-filename' => "'U nome d'u file non g'è permesse.",
 'api-error-invalid-file-key' => "Errore inderne: 'U file non ge se iacchie jndr'à memorie temboranèe.",
index 95dc0d0..a4b4420 100644 (file)
@@ -22,6 +22,7 @@
  * @author Claymore
  * @author Comp1089
  * @author DCamer
+ * @author Daniyar
  * @author Dim Grits
  * @author Don Alessandro
  * @author Eleferen
@@ -54,6 +55,7 @@
  * @author Putnik
  * @author Rave
  * @author Rubin
+ * @author Sagan
  * @author Sk
  * @author TarzanASG
  * @author Temuri rajavi
@@ -61,6 +63,7 @@
  * @author VasilievVV
  * @author Ytsukeng Fyvaprol
  * @author Александр Сигачёв
+ * @author Гусейн
  * @author ОйЛ
  * @author לערי ריינהארט
  * @author გიორგიმელა
@@ -688,6 +691,8 @@ $2',
 'filereadonlyerror' => "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».
 
 Установивший этот режим администратор оставил следующее разъяснение: «''$3''».",
+'invalidtitle-knownnamespace' => 'Недопустимый заголовок с пространством имен «$2» и текстом «$3»',
+'invalidtitle-unknownnamespace' => 'Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»',
 
 # Virus scanner
 'virus-badscanner' => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
@@ -1085,6 +1090,12 @@ $2
 'parser-template-loop-warning' => 'Обнаружена петля в шаблонах: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Превышен предел глубины рекурсии шаблона ($1)',
 'language-converter-depth-warning' => 'Превышен предел глубины преобразователя языков ($1)',
+'node-count-exceeded-category' => 'Странице, на которых превышено число узлов',
+'node-count-exceeded-warning' => 'На странице превышено число узлов',
+'expansion-depth-exceeded-category' => 'Страницы с превышением глубины раскрытия',
+'expansion-depth-exceeded-warning' => 'На странице превышен предел вложенности',
+'parser-unstrip-loop-warning' => 'Обнаружен незакрытый pre',
+'parser-unstrip-recursion-limit' => 'Превышен предел рекурсии ($1)',
 
 # "Undo" feature
 'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
@@ -1261,7 +1272,8 @@ $1",
 
 # Diffs
 'history-title' => '$1 — история изменений',
-'difference' => '(Различия между версиями)',
+'difference-title' => 'Разница между пересмотров " $1 "',
+'difference-title-multipage' => 'Разница между страницами " $1 «и» $2 "',
 'difference-multipage' => '(Различия между страницами)',
 'lineno' => 'Строка $1:',
 'compareselectedversions' => 'Сравнить выбранные версии',
@@ -1894,6 +1906,7 @@ $1',
 'http-curl-error' => 'Ошибка обращения к URL: $1',
 'http-host-unreachable' => 'Невозможно обратиться по указанному URL.',
 'http-bad-status' => 'Во время обработки HTTP-запроса обнаружена проблема: $1 $2',
+'http-truncated-body' => 'Тело запроса было получено лишь частично.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Невозможно обратить по указанному адресу.',
index 0f934fc..89422fc 100644 (file)
@@ -969,7 +969,6 @@ $1",
 
 # Diffs
 'history-title' => 'Історія змін сторінкы «$1»',
-'difference' => '(роздїл міджі ревізіями)',
 'difference-multipage' => '(Роздїлы міджі сторінками)',
 'lineno' => 'Рядок $1:',
 'compareselectedversions' => 'Порівнати выбраны верзії',
index a351629..4189aa1 100644 (file)
@@ -19,6 +19,7 @@
  * @author Mahitgar
  * @author Naveen Sankar
  * @author Omnipaedista
+ * @author Shantanoo
  * @author Shijualex
  * @author Shubha
  * @author Vibhijain
@@ -1059,7 +1060,6 @@ $2
 
 # Diffs
 'history-title' => '"$1" इत्येतस्य आवर्तनेतिहासः :',
-'difference' => '(संस्करणानां भेदाः)',
 'lineno' => 'पंक्तिः $1:',
 'compareselectedversions' => 'चितानाम् आवृत्तीनां तोलनं क्रियताम्',
 'editundo' => 'निष्क्रियताम्',
@@ -1073,7 +1073,7 @@ $2
 'notitlematches' => 'न कस्यापि पृष्ठस्य शीर्षकम् अस्य समम्।',
 'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति',
 'prevn' => 'प्राक्तनानि {{PLURAL:$1|$1}}',
-'nextn' => 'अग्रिमाणि{{PLURAL:$1|$1}}',
+'nextn' => 'अग्रिमाणि {{PLURAL:$1|$1}}',
 'prevn-title' => 'प्राक्तन-{{PLURAL:$1|फलितम्| फलितानि}}',
 'nextn-title' => 'प्राक्तन-{{PLURAL:$1|फलितम्| फलितानि}}',
 'shown-title' => 'प्रत्येकस्मिन् पृष्ठे $1 {{PLURAL:$1|फलितम्|फलितानि}} दर्श्यताम्',
index 0885c5b..3c4f9f0 100644 (file)
@@ -987,7 +987,6 @@ $1",
 
 # Diffs
 'history-title' => 'Көннөрүү историята "$1"',
-'difference' => '(Торумнар бэйэ-бэйэлэриттэн уратылара)',
 'difference-multipage' => '(Сирэйдэр ыккардыларынааҕы уратылар)',
 'lineno' => '$1 строка:',
 'compareselectedversions' => 'Талыллыбыт торумнары тэҥнээ',
diff --git a/languages/messages/MessagesSat.php b/languages/messages/MessagesSat.php
new file mode 100644 (file)
index 0000000..6b4d1a0
--- /dev/null
@@ -0,0 +1,975 @@
+<?php
+/** Santali (Santali)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Albinus
+ * @author David Baskey
+ * @author Ghonokuashabaskey
+ * @author Nipon087
+ * @author Salvator
+ * @author Samar88
+ * @author Srabony90
+ */
+
+$messages = array(
+# User preference toggles
+'tog-hideminor' => 'Nitaḱ bodolaḱre huḍiṅ kạmi danaṅme',
+'tog-showtoc' => 'Ṭibilre menaḱako ńel ( sakamkore 3 khon jạti hedlayenko)',
+'tog-watchcreations' => 'Sakamko songe  Ińaḱ ńelok tạlikare benao',
+'tog-watchdefault' => 'Sakam tońgey me Iń do ińaḱ ńeloḱ tạlikare joṛaokeda',
+'tog-watchmoves' => 'Sakamko tońgeyme Ińaḱ ńelok tạlikare kulme',
+'tog-watchdeletion' => 'Sakamko tońgeyme Ińaḱ ńeloḱ tạlika khon get́ giḍikam',
+'tog-enotifwatchlistpages' => 'E-mailạńme one tinre in̕aḱ n̕eloḱ tạlika do bodolok',
+'tog-enotifusertalkpages' => 'E-mailạn̕me one tinre in̕aḱ roṛaḱ laṛcaṛ sakam do bodoloḱa',
+'tog-enotifminoredits' => 'E-mailạn̕me arhõ one tinre in̕aḱ sakamre huḍiń kạmi hoyoḱ',
+'tog-shownumberswatching' => 'Ńelok laṛcaṛkoaḱ songkha uduḱme',
+'tog-oldsig' => 'Menaḱ signạtar',
+'tog-uselivepreview' => 'Jewet́ ńeloḱ beoharme (JavaScript jaruṛ menaḱa)',
+'tog-watchlisthideown' => 'Ńeloḱ talikare ińaḱ joṛao kamiko danaṅme',
+'tog-watchlisthideminor' => 'Ńeloḱ tạlikare ińak huḍiṅ joṛao kạmiko danaṅme',
+'tog-ccmeonemails' => 'E-mail reaḱ kopy kulạńme Eṭaḱ laṛcaṛko kulakome',
+
+'underline-always' => 'Sanam okte',
+'underline-never' => 'Tis hõ ban̕',
+
+# Dates
+'sunday' => 'Aṭhowar',
+'monday' => 'Som',
+'tuesday' => 'Mońgol',
+'wednesday' => 'Budh',
+'thursday' => 'Lukhibar',
+'friday' => 'Sokolbar',
+'saturday' => 'Sạnicar',
+'sun' => 'Aṭhwar',
+'mon' => 'Som',
+'tue' => 'Mongolbar',
+'wed' => 'Budhbar',
+'thu' => 'Lukhibar',
+'fri' => 'Sokolbar',
+'sat' => 'Sạnicar',
+'january' => 'Jạnuạri',
+'february' => 'Februạri',
+'march' => 'Marc',
+'april' => 'Epril',
+'may_long' => 'Me̠',
+'june' => 'Jun',
+'july' => 'Julại',
+'august' => 'A̠go̠sṭ',
+'september' => 'Se̠ṕṭembạ̣r',
+'october' => 'O̠ḱ́ṭo̠bo̠r',
+'november' => 'Nove̠mbo̠r',
+'december' => 'Ḍisembo̠r',
+'january-gen' => 'Jạnuạri',
+'february-gen' => 'Februạri',
+'march-gen' => 'Marc',
+'april-gen' => 'Epril',
+'may-gen' => 'Me',
+'june-gen' => 'Jun',
+'july-gen' => 'Julại',
+'august-gen' => 'Ago̠sṭ',
+'september-gen' => 'Se̠ṕṭembo̠r',
+'october-gen' => 'O̠ḱ́ṭo̠bo̠r',
+'november-gen' => 'Nove̠mbo̠r',
+'december-gen' => 'December',
+'jan' => 'Jạn',
+'feb' => 'Febr',
+'mar' => 'Ma̠r',
+'apr' => 'Epr',
+'may' => 'Me',
+'jun' => 'Ju̠n',
+'jul' => 'Ju̠l',
+'aug' => 'Ago̠',
+'sep' => 'Seṕ',
+'oct' => 'Okṭ',
+'nov' => 'No̠v',
+'dec' => 'Dis',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|Bivag|Bivagko}}',
+'category_header' => 'Sakam korenaḱ rokom sokom "$1"',
+'subcategories' => 'Huḍiń rokom sokomko',
+'hidden-categories' => '{{PLURAL:$1|Dãnań renaḱ|Dãnań renaḱ ko}}',
+'category-subcat-count' => '{{PLURAL:$2| keṭagorire eken tayom hudińkeṭagori menaḱa. |Noa keṭagorire tayom menaḱa {{PLURAL:$1 hudińkeṭagoriko}}, jotokote $2}}',
+'category-article-count' => '{{PLURAL:$2| Noa keṭagoriredo eken tayomtenaḱ sakam menaḱa.| Tayom {{PLURAL:$2| sakam do |$1 sakamko kana}} nia keṭagorire, sanamkote  hoyoḱkana $2 .}}',
+'listingcontinuesabbrev' => 'Calaḱa',
+'noindex-category' => 'Unuduḱ sakamkodo bạnuḱa',
+
+'about' => 'Lạgitte, Lạgti',
+'newwindow' => 'Nãwã khiṛki jhijme',
+'cancel' => 'Badme',
+'moredotdotdot' => 'Aema',
+'mypage' => 'In̕aḱ sakam',
+'mytalk' => 'Iñaḱ́ ro̠ṛ',
+'navigation' => 'Ñamme',
+
+# Cologne Blue skin
+'qbfind' => 'N̕am',
+'qbbrowse' => 'Sendra',
+'qbedit' => 'Tońge',
+'qbpageoptions' => 'Noa sakam',
+'qbmyoptions' => 'In̕anḱ sakamko',
+'qbspecialpages' => 'Asokay teaḱ sakamko',
+'faq' => 'Baḍae kupuliko',
+
+# Vector skin
+'vector-action-addsection' => 'Asol katha joṛaome',
+'vector-action-delete' => 'Giḍi',
+'vector-action-move' => 'Ocok',
+'vector-action-protect' => 'Bańcao',
+'vector-action-undelete' => 'Bań getgiḍi',
+'vector-action-unprotect' => 'Bodol rukhiyạ',
+'vector-view-create' => 'Tearme',
+'vector-view-edit' => 'So̠mpado̠n',
+'vector-view-history' => 'Jạṛ ńelme',
+'vector-view-view' => 'Paṛhaḱme',
+'vector-view-viewsource' => 'Ńamoḱaḱ ńelme',
+'actions' => 'Kạmi',
+'namespaces' => 'Ñutum jaiga',
+'variants' => 'Etaḱko',
+
+'errorpagetitle' => 'vul',
+'returnto' => "$1 te ruar-rok' me",
+'tagline' => 'Oka khoć',
+'help' => 'Go̠ṛo̠',
+'search' => 'Se̠ndra',
+'searchbutton' => 'Se̠ndra',
+'go' => 'Calaḱme',
+'searcharticle' => 'Calaḱme',
+'history' => 'Sakam reaḱ jạṛ',
+'history_short' => 'Jạṛ',
+'printableversion' => 'Chapai lekan version',
+'permalink' => 'Terejuge joṛao',
+'print' => 'Chapa',
+'view' => 'Udukme',
+'edit' => 'So̠mpado̠n',
+'create' => 'Tearme',
+'editthispage' => 'Noa sakam joṛaome',
+'create-this-page' => 'Noa sakam benao me',
+'delete' => 'muchau me',
+'deletethispage' => 'Noa sakam do get giḍikam',
+'undelete_short' => 'Baṅ get giḍik',
+'protect' => "banchao'",
+'protect_change' => 'Judạ',
+'protectthispage' => 'Noa sakam ban̕caome',
+'unprotect' => 'Bodol ban̕cao',
+'newpage' => 'Nãwã sakam',
+'talkpage' => 'Noa sakam galmaraome',
+'talkpagelinktext' => 'Ro̠ṛme',
+'specialpage' => 'Osokayteaḱ sakam',
+'personaltools' => 'Nijaḱ jontropạti',
+'postcomment' => 'Nãwã pahaṭa',
+'articlepage' => 'Menaḱ sakam uduḱme',
+'talk' => 'Galmarao',
+'views' => 'Ñel koyoḱ',
+'toolbox' => 'Jontopạti baḱso',
+'userpage' => 'Laṛcaṛićaḱ sakam uduḱme',
+'projectpage' => 'Porjakṭ sakam uduḱme',
+'imagepage' => 'Rẽt sakam uduḱme',
+'mediawikipage' => 'Mesag sakam uduḱme',
+'viewhelppage' => 'Goṛoaḱ sakam n̕elme',
+'viewtalkpage' => 'Galmarao ńelme',
+'otherlanguages' => 'Eṭagak pạrsi',
+'redirectedfrom' => '$1 khon ạcur heć akana',
+'redirectpagesub' => 'Bań sojhe sakam',
+'lastmodifiedat' => 'Noa sakam do sạjao hoena $1, $2 te',
+'protectedpage' => 'Rukhíạ sakamko',
+'jumpto' => 'Calaḱme :',
+'jumptonavigation' => 'Ñamme',
+'jumptosearch' => 'Sendra',
+'pool-timeout' => 'Somoy paromena cạbi lạgit́te tạṅgi hoyoḱkana',
+'pool-errorunknown' => 'Bań baḍayaḱ bhul',
+
+# 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' => 'babo̠tre',
+'aboutpage' => 'Project: Babo̠t',
+'copyrightpage' => '{{ns:project}}: Eḱteạr',
+'currentevents' => 'Cạlit ghoṭnako',
+'currentevents-url' => 'Project: Nitaḱ evenṭ ko',
+'disclaimers' => 'Dạbi bạnuḱko',
+'disclaimerpage' => 'Project: Sadharon ḍiskleimarko(General disclaimer)',
+'edithelp' => 'Tońge goṛo',
+'edithelppage' => 'Help:So̠mpado̠n',
+'helppage' => 'Help: Bhitri renaḱ',
+'mainpage' => 'Mukhiạ Sakam',
+'mainpage-description' => 'Mukhiạ sakam',
+'policy-url' => 'Project:Ritiniti',
+'portal' => 'Khũṭ boloḱ ho̠r',
+'portal-url' => 'Project: Khũṭ bolokt họr',
+'privacy' => 'Nijaḱ eḱtear',
+'privacypage' => 'Project: Nijaḱ eḱteạr',
+
+'ok' => 'Ṭhik gea',
+'retrievedfrom' => '"$1" khon ñam ạgui',
+'youhavenewmessages' => 'Amaḱ do $1 ($2) menaḱa',
+'newmessageslink' => 'Nãwã sombat',
+'newmessagesdifflink' => 'Mucạt bodol',
+'youhavenewmessagesmulti' => 'Amaḱ nãwã mesagko do $1 menaḱa',
+'editsection' => 'So̠mpado̠n',
+'editold' => 'So̠mpado̠n',
+'viewsourceold' => 'Ńamoḱ jayga',
+'editlink' => 'Tońge',
+'viewsourcelink' => '̕Ńel renaḱ ḍahar',
+'editsectionhint' => 'Sapṛao dhara: $1',
+'toc' => 'Menaḱaḱko',
+'showtoc' => 'Uduḱme',
+'hidetoc' => 'uku, Danaṅ',
+'collapsible-collapse' => 'Murchạo caba',
+'collapsible-expand' => 'Phaylao',
+'thisisdeleted' => 'N̕el se doho ruạṛ',
+'viewdeleted' => '$1 Ńelme',
+'feedlinks' => 'Jom oco',
+'site-atom-feed' => ' $1 Jom oco',
+'page-atom-feed' => '"$1" khon khudri jom',
+'red-link-title' => '$1 (niạ sakamdo bạnuḱa)',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'Sakam',
+'nstab-user' => 'Laṛcaṛicaḱ sakam',
+'nstab-media' => 'Midiạ sakam',
+'nstab-special' => 'Jạruṛ pata',
+'nstab-project' => 'Porject reaḱ sakam',
+'nstab-image' => 'Fail',
+'nstab-mediawiki' => 'Mesag',
+'nstab-template' => 'Sajao sakam',
+'nstab-help' => 'Goṛo sakam',
+'nstab-category' => 'Juṛu ko',
+
+# Main script and global functions
+'nosuchaction' => 'Noṅkanaḱ kạmi bạnuḱa',
+'nosuchspecialpage' => 'Noṅkanaḱ asokay sakam do banuḱa',
+
+# General errors
+'error' => 'bhul',
+'laggedslavemode' => "'''Sontoroḱme:''' sakamre do nahaḱ nãwãnaḱko paseć bạnuḱa.",
+'missing-article' => '"$1" $2 noa ńutumanaḱ sakhiyaxt sakamre olakanaḱ do bań ṅamoka.
+Noa hoy renaḱ karon do hoyoḱkana cabak tạrik pharak se noare joṛao sakam do get giḍi akana.
+Judi noa do karon bań hoylen khan, noa do am sopṭoyer re kạtictem ńam daṛeyaḱa.
+Daya katet́ noa do nonde [[Special:ListUsers/sysop|administrator]],  ṭhen lạime, URL hotete.',
+'missingarticle-rev' => '(Nãwã aro#: $1)',
+'missingarticle-diff' => '(Pharak: $1, $2)',
+'internalerror' => 'Bhitri reaḱ bhul',
+'internalerror_info' => 'Bhitri reaḱ bhul:',
+'filedeleteerror' => '1 sakam do baṅ get́ giḍiḱ lena',
+'badarticleerror' => 'Noa sakamre kạmiko do baṅ puraolena.',
+'cannotdelete' => 'Nao sakam se rẽt do baṅ get giḍilena.
+Noa do pasec eṭaḱ hoṛ hotete lahare get giḍi akana.',
+'cannotdelete-title' => 'Sakam do baṅ get giḍiḱkana',
+'badtitle' => "barich' bishó́́́́y",
+'badtitletext' => 'Amaḱ nehorakaḱ sakam ńutum do bań puraoa, bạnuka, se be sudhrạo joṛao bhitri katha se bhitri wiki ńutum.
+Noa re do mit se aema bisó menaḱa oka do ńutumre bań beoharok.',
+'viewsource' => 'Ńamoḱaḱ ńelme',
+'protectedpagetext' => 'Noa sakam do ol toṅge lạgit́te do bańcao gea.',
+'namespaceprotected' => "Amaḱ do sakamko joṛao lạgit́te ạidạri banuḱ tama '''$1''' ńutumjayga.",
+'ns-specialprotected' => 'Asokay teaḱ sakamkodo baṅ oltoṅgea.',
+
+# Virus scanner
+'virus-scanfailed' => 'Esken baṅ hoelena (Code $1)',
+'virus-unknownscanner' => 'Baṅ urum anṭvayras:',
+
+# Login and logout pages
+'welcomecreation' => '==Johar,==
+Amaḱ ekaunṭ do tearena.
+Amaḱ [Asokaete:Pasindko {{SITENAME}} pasindko]] bodol alom hiṛińa.',
+'yourname' => 'Beoboharicaḱ ńutum',
+'yourpassword' => 'Uku namber',
+'yourpasswordagain' => 'Arhõ oku namber olme',
+'remembermypassword' => 'In̕aḱ boloḱaḱ disạyme',
+'securelogin-stick-https' => 'Bhitri bolo kate HTTPS re soṅge tãhenme',
+'login' => "bolok' duar",
+'nav-login-createaccount' => 'Boloḱ́ duạr / ekaunt tearme',
+'userlogin' => 'Bhitri bolon / ekaunṭ tear',
+'userloginnocreate' => 'Bhitri bolo',
+'logout' => 'Bahre oḍoń',
+'userlogout' => 'Bahre oḍoń',
+'notloggedin' => 'Bhitri baṅ bolokana',
+'nologin' => 'Ekaunṭ bạnuḱtama?',
+'nologinlink' => 'account tear me',
+'createaccount' => 'Ṭhai benaome',
+'gotaccount' => 'Ekaunṭ menaḱgeya?',
+'gotaccountlink' => 'Bhitri bolon',
+'userlogin-resetlink' => 'Amaḱ boloḱ talam cạbi sanamem hiṛińkeda?',
+'createaccountmail' => 'E-mail hotete',
+'createaccountreason' => 'Karon',
+'badretype' => 'Am do okaṭaḱ oku nambarkom em keda ona do baṅ milạolena.',
+'userexists' => 'Laṛcaṛicaḱ ńutum em hoyena ona do beohar hoyakana.
+Dayakatet́ eṭagaḱ ńutum bachaome.',
+'loginerror' => 'Bhitri bolok do vulgea',
+'createaccounterror' => 'Ekaunṭ do baṅ benao lena:',
+'loginsuccesstitle' => 'Bhitri boloḱ do moctege puraoena',
+'loginsuccess' => "'''Am do nitoḱ bolo menama {{SITENAME}} re",
+'nouserspecified' => 'Am do pusṭaote laṛcaṛićaḱ ńutum em hoyoḱtama.',
+'login-userblocked' => 'Nui laṛcaṛic doe esetgea. bhitri boloḱ ạidạri bań emoḱ kana.',
+'wrongpassword' => 'Bań milaoaḱ oku nambar em hoyakana.
+Daya kate arhõ mitdhom kurumuṭuyme.',
+'wrongpasswordempty' => 'Em hoyen oku nambar do cetge banuḱa.
+Daya katet́ arhõ kurumuṭuyme.',
+'passwordtooshort' => 'Oku nambar do kom katet́ hoyoḱ jạruṛa 6 olko mudre',
+'password-name-match' => 'Amaḱ oku nambar do amaḱ ńutum khon eṭaḱ hoyoḱ jạruṛtama.',
+'password-login-forbidden' => 'Noa laṛcaṛicaḱ ńutum ar oku nambar do ạnlekate baṅkana.',
+'mailmypassword' => 'E-mail reaḱ nãwã uko katha',
+'passwordremindertitle' => 'Nãwã nitlạgit oku nambar {{SITENAME}} lạgit́te',
+'noemail' => 'Nonḍe do laṛcaṛlạgit́te jahan oku nambar sap doho bạnuḱa.',
+'noemailcreate' => 'Am do mitṭen jewet e-mail ṭhikạna em jaruṛ menaḱtama.',
+'passwordsent' => '"$1" ṭhikạnate resṭariyen e-mail lạgit́te mitṭen oku nambar em hoyena.
+Daya kate ńam porte arhõ bhitri boloḱme.',
+'mailerror' => 'Vulte kulakan mail:',
+'emailconfirmlink' => 'Amaḱ e-mail ṭhikana do sạriyme.',
+'cannotchangeemail' => 'Ekaunṭ e-mail ṭhikạnakodo noa wiki re baṅ bodoloḱ kana.',
+'accountcreated' => 'Ekaunṭ do teyarena',
+'accountcreatedtext' => '$1 lạgit́te ekaunṭ do benaoena.',
+'createaccount-title' => '{{SITENAME}} lạgit́te ekaunṭ benao',
+'createaccount-text' => 'Okoe co am lạgit́te mitṭen ekaunṭko amaḱ e-mail ṭhikạna lạgit {{SITENAME}} re ($4) ńutum "$2", oku nambar "$3".
+Am do mesagem baṅ daṛeyaḱa, judi noa ekaunṭ do vulge benaolen khan.',
+'login-abort-generic' => 'Amaḱ bhitri boloḱ do baṅ hoylena - batena.',
+'loginlanguagelabel' => 'katha: $1',
+
+# Change password dialog
+'resetpass' => 'Oku nambar bodol',
+'resetpass_header' => 'Ekaunṭ oku namber bodol',
+'oldpassword' => 'Mare uku nombor',
+'newpassword' => 'Nãwã oku nomber',
+'retypenew' => 'Doṛhate oku namber olme',
+'resetpass_submit' => 'Oku namber joṛao ar bhitri bolok',
+'resetpass_success' => 'Amaḱ oku namber do napayte bodolena!
+Nitoḱ do am bhitritem boloḱkana...',
+'resetpass_forbidden' => 'Oku namber do baṅ bodoloklena',
+'resetpass-no-info' => 'Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.',
+'resetpass-submit-loggedin' => 'Oku namber bodol',
+'resetpass-submit-cancel' => 'Bạgi',
+
+# Special:PasswordReset
+'passwordreset' => 'Nãwãte oku nambar emme',
+'passwordreset-legend' => 'Nãwãte oku nambar emme',
+'passwordreset-username' => 'Beoharicaḱ ńutum:',
+'passwordreset-email' => 'E-mail ṭhikạna:',
+'passwordreset-emailelement' => 'Beoharicaḱ ńutum:
+Nit lạgit oku nambar:',
+'passwordreset-emailsent' => 'Mitṭen disạ ruaṛ e-mail do kulena.',
+'passwordreset-emailsent-capture' => 'Mit́ṭen disạ ruaṛaḱ e-mail dokulena, oka do latarre ńeloḱ kana.',
+'passwordreset-emailerror-capture' => 'Mit́ṭen disạ ruạṛ e-mail do hatoena, oka do latarre ńelok kana, menkhan beoharic ṭhen do baṇ seṭerlena.',
+
+# Special:ChangeEmail
+'changeemail' => 'E-mail ṭhikạna do bodolme',
+'changeemail-header' => 'Ekaunṭ e-mail ṭhikạna do bodolme',
+'changeemail-text' => 'Amaḱ e-mail ṭhikạna bodol lạgit́te noa forom purao me. Am do noa sariyaḱ lạgit́te amaḱ oku nambar em jạruṛtama.',
+'changeemail-no-info' => 'Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.',
+'changeemail-oldemail' => 'Nitaḱ e-mail ṭhikạna:',
+'changeemail-newemail' => 'Nãwã e-mail ṭhikạna:',
+'changeemail-none' => '(Okaṭaḱ hõ baṅ)',
+'changeemail-submit' => 'E-mail bodolme',
+'changeemail-cancel' => 'Badme',
+
+# Edit page toolbar
+'bold_sample' => 'Moṭa onol',
+'bold_tip' => 'Moṭa onol',
+'italic_sample' => 'Beka onol',
+'italic_tip' => 'Beka onol',
+'link_sample' => 'Joṛaotet́ reaḱ bohoḱ',
+'link_tip' => 'Bhitri reak joṛaotet́',
+'extlink_sample' => 'http://www.nạmuna.makaṛgạṭi ạmạli',
+'extlink_tip' => 'Baherenaḱ jońṛao (disạyme htt://prefix)',
+'headline_sample' => 'Bohok katha',
+'headline_tip' => 'level 2 guḍkatha',
+'nowiki_sample' => 'Begor format olko bhoraome',
+'nowiki_tip' => 'wiki formatting bạgiyaḱme',
+'image_tip' => 'Tol Fael',
+'media_tip' => 'file reaḱ jońṛao',
+'sig_tip' => 'Amaḱ suhi sãote okte',
+'hr_tip' => 'Barabạri dag',
+
+# Edit pages
+'summary' => 'Guṭ katha',
+'subject' => 'Bisoy/Bohoḱ katha:',
+'minoredit' => 'Noa do hudiń joṛao kami',
+'watchthis' => 'Noa sakam ńelme',
+'savearticle' => 'Sakam sebhme',
+'preview' => 'Ńel, Unuduḱ',
+'showpreview' => 'Unuduḱ',
+'showlivepreview' => 'Jewet uduk',
+'showdiff' => 'Bodolko ńeloḱma',
+'anoneditwarning' => "'''Sabdhan:''' amdo begor logkatem bolowakana.
+Amaḱ IP ṭhikana do noa sakam sompadon jạṛre rekorḍoḱa.",
+'anonpreviewwarning' => '"Am do bhitri bam bolo akana. Noa sakamre amaḱ kạmiko jạre IP ṭhiikạ̣nare rukhiyạ ḱa."',
+'newarticle' => '(Nãwa)',
+'newarticletext' => 'Am do okaṭaḱ somporko sakamem pańjayetkan ona do nito hạbic banuka.
+Sakam benao lạgitte, noa latar baksore ol ehoṕme
+Am do judim vul lekahan, amaḱ sendray jaygare "ruạṛ" baṭon linme.',
+'noarticletext' => 'Nitoḱ noa sakamre do ol bạnuḱa.
+
+You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
+or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
+'noarticletext-nopermission' => 'Noa sakamre do nitoḱ o̠l banuḱa.
+
+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>.',
+'previewnote' => "'''Disạyme noa do eken ńeln̕am lạgit.'''
+Amaḱ bodolaḱ kodo nit habićte bań ban̕cao akana!",
+'continue-editing' => 'Toṅge calaḱkana',
+'editing' => 'Sampadon; joṛao',
+'creating' => 'Benao',
+'editingsection' => 'Joṛao $1 (hạṭiń)',
+'editingcomment' => 'Joṛao',
+'yourtext' => 'Amaḱ ol',
+'templatesused' => 'Noa sakamre beoharen phormat se phormatko',
+'template-protected' => 'Rukhiạ',
+'template-semiprotected' => '(Kạṭic-rukhiyạ)',
+'hiddencategories' => 'Noa sakam do mitṭen hoṛkanay',
+'permissionserrorstext-withaction' => 'Amaḱ do aydạri bạnuḱtama, Noa karon pan̕jay lạgitte',
+'recreate-moveddeleted-warn' => "'''Sontorokme: am do arhõ doṛhate sakamem teyareda oka do sedayre get giḍiyen.
+Am do gunạnme cet́ noa joṛao kạmi am lạgit́te ganoḱ ase bań.
+Noa get ar tala ocok sakam nonḍe em hoyena dhok lagit́te.",
+'moveddeleted-notice' => 'Noa sakam do get giḍiyakana.
+Get ar ocoḱ giḍi sakam do latarre emakan reference lạgit em hoena.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => '"Sontoroḱme" Noa format do lạṭu geya.
+Thoṛa format do noare banuḱana.',
+'post-expand-template-inclusion-category' => 'Sakamko oka borḍre noa tahẽna ona doe paromkeda',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Ekaunṭ do baṅ tearlena',
+
+# History pages
+'viewpagelogs' => 'Noa sakam reaḱ cạbi udukme',
+'currentrev-asof' => 'Mucạt nãwã aroy',
+'revisionasof' => 'Nãwã aro sakam 1',
+'revision-info' => 'Ńel/pańja ruạṛ $1 khon $2',
+'previousrevision' => 'Pạhilaḱ paṛhao ruạṛ',
+'nextrevision' => "nãwate n'el ruar",
+'currentrevisionlink' => 'Nitoḱaḱ nãwa aroy',
+'cur' => 'Boge',
+'next' => 'Laha seć',
+'last' => 'Laha renaḱ',
+'page_first' => 'Pahilaḱ',
+'page_last' => 'Mucạt́aḱ',
+'history-fieldset-title' => 'Sendray jaṛ',
+'history-show-deleted' => 'khạli get giḍiyaḱ koge',
+'histfirst' => "adi laha-ak'",
+'histlast' => 'Nahak',
+'historyempty' => '(banuḱa)',
+
+# Revision feed
+'history-feed-title' => 'Jạṛ nãwã aroy',
+'history-feed-item-nocomment' => 're',
+
+# Revision deletion
+'rev-deleted-user' => '(laṛcaṛić ńutum ocoḱena)',
+'rev-delundel' => 'ńeloḱ/danaṅ',
+'rev-showdeleted' => 'Uduḱme',
+'revisiondelete' => 'Get giḍi/nãwã aro baṅ getgiḍi',
+'revdelete-show-file-submit' => 'Hẽ',
+'revdelete-radio-same' => '(alom bodola)',
+'revdelete-radio-set' => 'Hẽ',
+'revdel-restore' => 'Judạ lekate ńel',
+'revdel-restore-deleted' => 'giḍikaḱ ńel ruạṛ',
+'revdel-restore-visible' => 'Ńeloḱ leka paṛhao ruạṛ',
+'pagehist' => 'Sakam reaḱ jạṛ',
+'deletedhist' => 'Get giḍi jạṛ',
+'revdelete-reasonotherlist' => 'Eṭaḱak karon',
+
+# Merge log
+'revertmerge' => 'bań mit́',
+
+# Diffs
+'history-title' => '"$1" noa jạṛ nãwã aroy',
+'lineno' => 'Sạr $1:',
+'compareselectedversions' => 'Noa barea nãwã bachawanaḱ talare tolonayme',
+'editundo' => 'ruạṛ',
+
+# Search results
+'searchresults' => 'Se̠ndra fo̠l',
+'searchresults-title' => '"$1"  renaḱ Sẽndra  phol',
+'prevn' => 'Laha reaḱ {{PLURAL:$1|$1}}',
+'nextn' => 'Táyom teaḱ {{PLURAL:$1|$1}}',
+'prevn-title' => 'Laha renaḱ sakam $1 {{PLURAL:$1|result|results}}',
+'nextn-title' => 'Tayom $1 {{PLURAL:$1|result|results}}',
+'shown-title' => 'Mit́ ṭen kateć sakam $1 {{PLURAL:$1|result|results}} nelmẽ',
+'viewprevnext' => 'Ńelme ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Noa wiki re do \"[[:\$1]] ńutum sakam menaḱa",
+'searchmenu-new' => 'wiki re [[:$1]]nãwã sakam tear',
+'searchprofile-articles' => 'Menaḱaḱ sakamko',
+'searchprofile-project' => 'Go̠ṛo ar Project sakam',
+'searchprofile-images' => 'Multimedia',
+'searchprofile-everything' => 'Sanamak koge',
+'searchprofile-advanced' => 'Sompadon',
+'searchprofile-articles-tooltip' => '$1 re ñelme',
+'searchprofile-project-tooltip' => '$1 re sẽndraeme',
+'searchprofile-images-tooltip' => 'File sendra',
+'searchprofile-everything-tooltip' => 'Sanam ko modre sẽndra ( roṛ sakam modre hõ)',
+'searchprofile-advanced-tooltip' => 'Judạ ńutum re sẽndra',
+'search-result-size' => 'Katha Kathako',
+'search-redirect' => '($1 te sujhi doṛha )',
+'search-section' => '(Pahaṭa $1)',
+'search-suggest' => 'Am do cet́ $1 em menocoyet tãhẽkana',
+'searchrelated' => 'songenko',
+'searchall' => 'Sanam',
+'showingresultsheader' => "'''$4'''  lạgit́ {{PLURAL:$5|Pho̠l ńamoḱ́akan - '''$1''' of '''$3'''|Pho̠l ńamoḱ́akan '''$1 - $2''' of '''$3'''}}",
+'search-nonefound' => 'Kupuli leka roṛruạṛ bạnuḱa',
+'powersearch-togglelabel' => 'Sendra',
+'powersearch-toggleall' => 'Sanamaḱ',
+'powersearch-togglenone' => 'Okaṭaḱ hõ baṅ',
+
+# Quickbar
+'qbsettings-none' => 'Okaṭaḱ hõ baṅ',
+
+# Preferences page
+'preferences' => 'Pạsindko',
+'mypreferences' => 'Iñaḱ pạsindko',
+'changepassword' => 'Uku nombor bodolme',
+'prefs-skin' => 'Harta',
+'skin-preview' => 'Ńel, Unuduḱ',
+'datedefault' => 'Pạsind banuḱa',
+'prefs-resetpass' => 'Uku nombor bodolme',
+'prefs-changeemail' => 'E-mail ṭhikạna bodolme',
+'prefs-setemail' => 'E-mail ṭhikana benaome',
+'saveprefs' => 'Rukhiyạymẽ',
+'resetprefs' => 'Baṅ rukhiyạaḱ ocogmẽ',
+'rows' => 'Sạrko:',
+'searchresultshead' => 'Sendra',
+'timezoneregion-africa' => 'Aphrika',
+'timezoneregion-america' => 'Amirika',
+'timezoneregion-asia' => 'Esiya',
+'prefs-files' => 'Rẽtko',
+'youremail' => 'E-mail:',
+'username' => 'Beoharićaḱ ńutum:',
+'uid' => 'Beoharićaḱ cinhạo nombor',
+'yourrealname' => 'Sạ̣ri ńutum',
+'gender-male' => 'Baba hoṛ',
+'gender-female' => 'Gogo hoṛ, Kuṛi, Kuṛi gidrạ',
+'email' => 'E-mail',
+'prefs-help-email' => 'E-mail ṭhikana do bạṛtitege, menkhan uku namber nãwãte benao jạruṛa, am do amaḱ uku nomborem hiṛiń keda.',
+'prefs-help-email-others' => 'Am são e-mail hotete jogajog dohoy lạgitte mitṭen joṛao se amaḱ katha roṛaḱ sakam bachao jońme.
+Amaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'E-mail ṭhikạna do jewetge ńamena',
+'email-address-validity-invalid' => 'Amaḱ jewet e-mail ṭhkạna emmẽ',
+
+# User rights
+'userrights' => 'Beoharićaḱ laṛcaṛ ektiạrko',
+'userrights-lookup-user' => 'Beoharkoaḱ gãotako laṛcaṛ',
+'userrights-user-editname' => 'Beoharićaḱ ńutum emmẽ',
+'editusergroup' => 'Beoharićaḱ gãotako toṅgeymẽ',
+'userrights-editusergroup' => 'Beoharićaḱ gãotako toṅgeymẽ',
+'saveusergroups' => 'Beoharićaḱ gãotako rukhiyaymẽ',
+
+# Rights
+'right-edit' => 'Sakamko toṅge',
+'right-createpage' => 'Sakamko benoamẽ (Okako do galmarao sakamko baṅkan)',
+'right-createtalk' => 'Galmarao sakamko benaomẽ',
+'right-createaccount' => 'Nãwã beoharićaḱ ekaunṭ tearmẽ',
+'right-move' => 'Sakamko ocogmẽ',
+'right-move-subpages' => 'Sakam saõte kạtic sakamko ocogmẽ',
+'right-movefile' => 'Rẽtko ocogmẽ',
+'right-upload' => 'Rẽtko rakabmẽ',
+'right-delete' => 'Sakamko get giḍiymẽ',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'noa sakam joṛao',
+
+# Recent changes
+'recentchanges' => 'Nãwã bo̠do̠lko',
+'recentchanges-legend' => 'Nahaḱ bodol teaḱko',
+'recentchanges-label-newpage' => 'Noa sompadon do nãwã mint́ṭen sakame tearkeda',
+'recentchanges-label-minor' => 'Noado hudiń mạchi sompadonkana',
+'recentchanges-label-bot' => 'Noa sompadon do bot darate purauena',
+'recentchanges-label-unpatrolled' => 'Noa sompadon do ńit́ hạbić baṅ ńel ńamakana',
+'rcnotefrom' => '$2 habić bodolak ko do latare ńeloḱkana',
+'rclistfrom' => 'Nãwã  bodolko uduḱme $1 khon ehoṕkate',
+'rcshowhideminor' => '$1 kaṭic culuń tońge',
+'rcshowhidebots' => ' boṭko $1',
+'rcshowhideliu' => 'Beoharićaḱ boloḱ $1',
+'rcshowhideanons' => '$1 Nũtum bańa bebohariḱ',
+'rcshowhidemine' => '$1 ińaḱ tońge',
+'rclinks' => '$2 din lahare $1 bodol unuduḱme <br />$3',
+'diff' => 'Judạ',
+'hist' => 'Jạr',
+'hide' => 'Danaṅ',
+'show' => 'Udugme',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Purạote uduḱ',
+'rc-enhanced-hide' => 'Purạo cuku',
+
+# Recent changes linked
+'recentchangeslinked' => 'Sãotenaḱ bodolko',
+'recentchangeslinked-toolbox' => 'Noṛjoṛ palaṭko',
+'recentchangeslinked-title' => 'Bodolaḱko do "$1" sãote joṛao geya',
+'recentchangeslinked-noresult' => 'Joṛao sakam re emoḱ oktere jahanaḱ bodolko bạnuḱa.',
+'recentchangeslinked-summary' => "Noa do ona tạlika kana oka do nebetarge bodol hoyakan oka do asokayte hatao akan sakam khon.
+
+[[Special:Watchlist|your watchlist]] renaḱ sakamko do '''bold''' .",
+'recentchangeslinked-page' => 'sakạm ńutum',
+'recentchangeslinked-to' => 'Joṛaoaḱ sakamre ńel ocoyme emaḱ sakam bạgi katet',
+
+# Upload
+'upload' => 'Fael aploḍme',
+'uploadbtn' => 'Rẽt rakabmẽ',
+'uploadlogpage' => 'Chạbi do uthạome',
+'filename' => 'Rẽt ńutum',
+'filedesc' => 'Guṭ katha',
+'fileuploadsummary' => 'Guṭ katha',
+'savefile' => 'Rẽt rukhiyaymẽ',
+'uploadedimage' => 'Rakaṕ hoyena',
+'upload-description' => 'Rẽt reaḱ jạṛ',
+'watchthisupload' => 'Noa rẽt ńelmẽ',
+
+'upload-file-error' => 'Bhitri reaḱ bhul',
+
+'license' => 'Laisence benao',
+'license-header' => 'Laisense benao',
+
+# Special:ListFiles
+'imgfile' => 'Rẽt',
+'listfiles' => 'Rẽt reaḱ tạlika',
+'listfiles_date' => 'Tạrikh',
+'listfiles_name' => 'Ńutum',
+'listfiles_user' => 'Beoharić, Laṛcaṛic',
+
+# File description page
+'file-anchor-link' => 'Re̕t',
+'filehist' => 'Fael renaḱ Jạṛ',
+'filehist-help' => 'date re click me/somóy re click me fail reak obostha nel lagit',
+'filehist-deleteall' => 'Joto get giḍi',
+'filehist-deleteone' => 'Get giḍi',
+'filehist-revert' => 'Lahaleka',
+'filehist-current' => 'Nitaḱ',
+'filehist-datetime' => '̣Tạrikh/So̠mo̠y',
+'filehist-thumb' => 'Ṭip',
+'filehist-thumbtext' => '$1 lekan thambnail varson',
+'filehist-user' => 'Laṛcaṛić',
+'filehist-dimensions' => 'Maṕ',
+'filehist-comment' => 'Roṛ',
+'imagelinks' => 'Fael bebohar',
+'linkstoimage' => 'Noa sakam do niạ rẽtre/fayel joṛao menaḱa',
+'nolinkstoimage' => 'Nonḍe do noa são joṛao sakam banuka',
+'sharedupload-desc-here' => 'Noa rẽt do nonḍe khon-  $1 ar paseć eṭaḱaḱ porjekṭko beoharakana.
+Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
+
+# Random page
+'randompage' => 'Joṛao sakam',
+
+# Statistics
+'statistics' => 'Halot',
+'statistics-pages' => 'Sakamko',
+
+'disambiguationspage' => 'sujhi',
+
+# Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|baiṭ|baiṭ}}',
+'nmembers' => 'Sãoten/ Sãotenko',
+'prefixindex' => 'Sanam sakam re joṛao menaḱ',
+'shortpages' => 'Huḍiń sakamko',
+'longpages' => 'Jiliń sakamko',
+'listusers' => 'beoharićaḱ tạlika',
+'usercreated' => 'Ayo baba: tạrikh okte',
+'newpages' => 'Nãwa Patako',
+'newpages-username' => 'Beoharićaḱ ńutum:',
+'ancientpages' => 'Mare sakamko',
+'move' => 'Ocoḱme, Kulme',
+'movethispage' => 'Noa sakam ocogmẽ',
+
+# Book sources
+'booksources' => 'Puthi ńamoḱ ṭhại/jayga',
+'booksources-search-legend' => 'Puthi reak ṭhai sendrayme',
+'booksources-go' => 'Calaḱme',
+
+# Special:Log
+'log' => 'Cạbiko',
+
+# Special:AllPages
+'allpages' => 'joto sakam',
+'alphaindexline' => '$1 hạbić $2',
+'allarticles' => 'Sanam sakam',
+'allpagesprev' => 'Tayom sećaḱ',
+'allpagesnext' => 'Laha seć',
+'allpagessubmit' => 'Calaḱme',
+
+# Special:Categories
+'categories' => 'rokom sokom',
+
+# Special:LinkSearch
+'linksearch-line' => '$2 joṛao menaḱa $2re',
+
+# Special:ListUsers
+'listusers-submit' => 'Udugmẽ',
+'listusers-blocked' => '(Esetgea)',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Laṛcaṛićaḱ tear cạbi',
+
+# Special:ListGroupRights
+'listgrouprights-group' => 'Gaõta',
+'listgrouprights-rights' => 'Ạidạriko',
+'listgrouprights-helppage' => 'Goṛo:Gaõta ạidạri',
+'listgrouprights-members' => 'Saõtenkoaḱ tạlika',
+'listgrouprights-addgroup-all' => 'Joto gaõtare ko soṅgekom',
+'listgrouprights-removegroup-all' => 'Joto gaõtaren ko ocoḱgiḍikom',
+
+# E-mail user
+'emailuser' => 'Nui beoharić e-mail emayme',
+'emailpage' => 'E-mail beoharić',
+'noemailtitle' => 'E-mail ṭhikạna do banuḱa',
+'emailusername' => 'Beoharićaḱ ńutum:',
+'emailusernamesubmit' => 'Em',
+'emailfrom' => 'Kulić:',
+'emailto' => 'Ńamić:',
+'emailmessage' => 'Mesag',
+'emailsend' => 'Kulmẽ',
+
+# Watchlist
+'watchlist' => "Inak' n'el ko",
+'mywatchlist' => 'Iñak jagarna tạlikạ',
+'watchlistfor2' => 'Lạgit',
+'watch' => 'Ńelme',
+'unwatch' => "bang nelok' a",
+'wlshowlast' => 'Mucạt 1 ghonta mucạt 2 maha uduḱme',
+'watchlist-options' => 'Ńelok tạlika reak sonketko',
+
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'Ńeloḱ kana...',
+
+'changed' => 'Bodolena',
+
+# Delete
+'deletepage' => 'Sakam get giḍikam',
+'delete-legend' => 'Get giḍi',
+'actioncomplete' => 'kami Chabae-ena',
+'actionfailed' => 'Kami bang hoe-lena',
+'dellogpage' => 'Mãrao log',
+
+# Rollback
+'rollbacklink' => 'Ghurlạo ạcur',
+
+# Protect
+'protectlogpage' => 'Rukhiyạy tala cạbi',
+'protectedarticle' => 'Rukhiyạre menaḱa',
+'protectcomment' => 'karon',
+'protectexpiry' => 'Cabaḱ',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Toṅge',
+'restriction-move' => 'Ocoḱmẽ, Kulmẽ',
+'restriction-create' => 'Tearmẽ, Benaomẽ',
+
+# Undelete
+'undeletelink' => 'Ńel/doho ruạṛ',
+'undeleteviewlink' => 'Ńel',
+
+# Namespace form on various pages
+'namespace' => 'Ńutum reaḱ ṭhai',
+'invert' => 'Seć bachao',
+'blanknamespace' => 'Mukhiạ̣',
+
+# Contributions
+'contributions' => 'Beharićaḱ Kạmiko',
+'contributions-title' => 'Laṛcaṛicaḱ kạmiko lạgit',
+'mycontris' => 'Ińaḱ kạmiko',
+'contribsub2' => '$1 ($2) lạgitte',
+'uctop' => '(coṭ utạr)',
+'month' => 'Cando khon (ar etohopreaḱ)',
+'year' => "Nia serma reak' pahil khoch'",
+
+'sp-contributions-newbies' => 'Nãwã ekaunṭ lạgit kạmiko uduḱme',
+'sp-contributions-blocklog' => 'Tala eset',
+'sp-contributions-uploads' => 'Rakaṕme',
+'sp-contributions-logs' => 'Tala',
+'sp-contributions-talk' => 'Roṛ',
+'sp-contributions-search' => 'Kạmiko emoḱ lạgitte sendrayme',
+'sp-contributions-username' => 'IP ṭhikạna se laṛcaṛićaḱ n̕utum',
+'sp-contributions-toponly' => 'Khạli nahaḱ nãwã aroyen joṛao kamiko udukme',
+'sp-contributions-submit' => 'Sendra',
+
+# What links here
+'whatlinkshere' => 'Cet́ link ko no̠nḍe do',
+'whatlinkshere-title' => 'Noa sakam do 1 sakam tuluc joṛao menaḱa',
+'whatlinkshere-page' => 'Sakam',
+'linkshere' => 'Noa sakam do joṛao menaka:',
+'nolinkshere' => 'Sakamko joṛao bạnuḱa',
+'isredirect' => 'Bań sojhe sakam',
+'istemplate' => 'Ar mit́ teć sãote joṛao',
+'isimage' => 'Ret joṛao',
+'whatlinkshere-prev' => 'Tayom renaḱ Táoy renaḱko',
+'whatlinkshere-next' => 'Laha renaḱ Laha renaḱko',
+'whatlinkshere-links' => 'Joṛaoko',
+'whatlinkshere-hideredirs' => '$1 acurgeya',
+'whatlinkshere-hidetrans' => 'Bodolaḱ danaṅ',
+'whatlinkshere-hidelinks' => 'Joṛao danaṅ se uduḱme',
+'whatlinkshere-hideimages' => 'phoṭo em',
+'whatlinkshere-filters' => 'Sapha',
+
+# Block/unblock
+'block' => 'Beoharić esedem',
+'blockip' => 'Beoharić esedem',
+'blockip-title' => 'Beoharić esedem',
+'blockip-legend' => 'Beoharić esedem',
+'ipboptions' => '2 Ghonṭa : 2 hours, 1 maha:1 day, 3 maha : 3 days,1 hapta :1 week, 2 hapta : 2 weeks, 1 cando :1 month, 3 cando : 3 months,6 cando :6 months,  1 serma :1 year,  Aemamaha : infinite',
+'ipblocklist' => 'Beoharic esetgeyay',
+'ipblocklist-submit' => 'Sendra',
+'emailblock' => 'E-mail do esetgea',
+'blocklink' => 'Eset',
+'unblocklink' => 'bań block',
+'change-blocklink' => 'block judạ',
+'contribslink' => 'em daṛeaḱ',
+'emaillink' => 'E-mail kulmẽ',
+'blocklogpage' => 'Tala eset',
+'blocklogentry' => 'Eset [[$1]] sãote cabaḱ okte oka do $2 $3',
+'block-log-flags-nocreate' => 'Ekaunṭ benao do bondogeya',
+'block-log-flags-noemail' => 'E-mail do esetgea',
+'block-log-flags-hiddenname' => 'Beoharićaḱ ńutum do ukugea',
+'blockme' => 'Esedińmẽ',
+'proxyblocksuccess' => 'Hoena',
+
+# Move page
+'movepagebtn' => 'Sakam ocogmẽ, Sakam kulmẽ',
+'pagemovedsub' => 'Ocogoḱ do hoena',
+'movelogpage' => 'Tala cạbi ocoḱme',
+'revertmove' => 'ruạr agu',
+
+# Export
+'export' => 'Aguyen sakamko',
+'export-addcat' => 'Joṛaomẽ',
+'export-addns' => 'Joṛaomẽ',
+
+# Namespace 8 related
+'allmessagesname' => 'Ńutum',
+'allmessagesdefault' => 'Bań bhul mesag ol',
+'allmessages-filter-all' => 'Sanamaḱ',
+'allmessages-filter-submit' => 'Calaḱmẽ',
+
+# Thumbnails
+'thumbnail-more' => 'Lạṭui mẽ',
+
+# Special:Import
+'import-upload-filename' => 'Rẽt ńutum',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'Amak bebohar sakam',
+'tooltip-pt-mytalk' => 'Amaḱ katha ro̠ṛrenaḱ́ pata',
+'tooltip-pt-preferences' => 'Amaḱ Kusíyaḱ',
+'tooltip-pt-watchlist' => 'Mit́ṭen tạlika okaṭak am do nãwã aroy lạgitem ńeleḱkan',
+'tooltip-pt-mycontris' => 'Amaḱ kạmi reaḱ tạlika',
+'tooltip-pt-login' => 'Am do log in lagit́ metao am kana; menkhan noa do jarur bań kana',
+'tooltip-pt-logout' => 'Onḍńme',
+'tooltip-ca-talk' => 'Galmãrao bhitri renaḱ sakam lạgit́',
+'tooltip-ca-edit' => 'Noa sakam em edit daṛeaḱ. Daya kateć save laha re preview batton bebohar me.',
+'tooltip-ca-addsection' => 'Nãwã sekson sạrdi',
+'tooltip-ca-viewsource' => 'Noa sakam do poṭom gea
+Ona te source em ńel daṛeaḱ',
+'tooltip-ca-history' => 'Noa sakam renaḱ calao parom ńel ruạṛ',
+'tooltip-ca-protect' => 'ñia sakam bachaome',
+'tooltip-ca-delete' => 'nia sakam muchau me',
+'tooltip-ca-move' => 'Noa sakam kulme',
+'tooltip-ca-watch' => 'Noa sakam do amaḱ ńelok tạlikare joṛaome',
+'tooltip-ca-unwatch' => 'Amaḱ ńeloḱ tạlika khon noa sakam bagiyam',
+'tooltip-search' => 'Sendra {{Saiṭñitum}}',
+'tooltip-search-go' => 'Mitṭen sakamre calaḱme one okare noa ńutum menaḱa',
+'tooltip-search-fulltext' => 'Noa ol ńam lạgit sakamko ńelme',
+'tooltip-p-logo' => 'Mukhiạ sakamre calaḱme',
+'tooltip-n-mainpage' => 'Mukhiạ sakamre calaḱme',
+'tooltip-n-mainpage-description' => 'Mukhiạ sakamre calaḱme',
+'tooltip-n-portal' => 'Niạ pro̠je̠ḱ́ṭreaḱ Biso̠yko, Cet́́em ceka daṛia,Okare̠ sendra ñamoḱ́a',
+'tooltip-n-currentevents' => 'Nitaḱ events re jos hudis ńãm me',
+'tooltip-n-recentchanges' => 'Uiki nãhaḱ palaṭrenaḱ́ tạlikạ',
+'tooltip-n-randompage' => 'Ãr hõ sakam ko agui mẽ',
+'tooltip-n-help' => 'Sendra ñamreaḱ jayga',
+'tooltip-t-whatlinkshere' => 'Sanam wiki sakam renaḱ list ar link do nonde',
+'tooltip-t-recentchangeslinked' => 'Noa sakam re nitaḱ bodol akan sakam renaḱ linked',
+'tooltip-feed-atom' => 'Noa sakam lạgit́ atom jomaḱ',
+'tooltip-t-contributions' => 'Beoharićak kami reaḱ tạ̣lika',
+'tooltip-t-emailuser' => 'Nui beoharić mitṭen e-mail kulayme',
+'tooltip-t-upload' => 'Failko aploḍ̣me',
+'tooltip-t-specialpages' => 'Jạruṛ patakureaḱ tạlikạ',
+'tooltip-t-print' => 'Printoḱ lekan sakam',
+'tooltip-t-permalink' => 'Terejuge joṛaokam ñel sakam',
+'tooltip-ca-nstab-main' => 'Bahal sakam ńel me',
+'tooltip-ca-nstab-user' => 'Beoharićaḱ sakam uduḱme',
+'tooltip-ca-nstab-special' => 'Noa do nij/bises sakam kana, amem menle rehõ bam joṛao dareaḱa',
+'tooltip-ca-nstab-project' => "project page nel' me",
+'tooltip-ca-nstab-image' => 'Fael sakam ńel',
+'tooltip-ca-nstab-template' => 'Forom uduḱme',
+'tooltip-ca-nstab-help' => 'Goṛo sakam ńelmẽ',
+'tooltip-ca-nstab-category' => 'Rokom sokom sakamko udukme',
+'tooltip-minoredit' => 'Noa do huḍiń joṛao lekate lekhay me',
+'tooltip-save' => 'Bodolaḱko rukhiyayme',
+'tooltip-preview' => 'Amaḱ bodolaḱ uduḱme, noa beoharme ạuri rukhiyayre',
+'tooltip-diff' => 'Uduḱme okaṭaḱ onolem bodolakada',
+'tooltip-compareselectedversions' => 'Noa barea sakam talareaḱ bepaneyaḱ nãwã aróme',
+'tooltip-watch' => 'Amaḱ ńeloḱ sakamre noa do dohoyme',
+'tooltip-rollback' => '"Ghurlạ ạcur" noa sakam taṛam ruạṛ ńel sapha ona do amaḱ mũcạt́ mit́ dhom click re',
+'tooltip-undo' => 'Noa joṛao kạmire ulṭao "bạgiyaḱme" ar ńeloḱ lekate noa joṛao jhicme. Noa do am guḍ karon joṛaoe ektiyariye emama.',
+'tooltip-preferences-save' => 'Pạsindko rukhiyaymẽ',
+'tooltip-summary' => 'Khaṭote guṭ katha bhoraome',
+
+# Attribution
+'others' => 'Eṭagaḱko',
+
+# Info page
+'pageinfo-header-edits' => 'Toṅgeko',
+'pageinfo-header-watchlist' => 'Ńeloḱ tạlika',
+'pageinfo-header-views' => 'Ńelme',
+'pageinfo-subjectpage' => 'Sakam',
+'pageinfo-talkpage' => 'Galmarao sakam',
+'pageinfo-watchers' => 'Ńeńelkoaḱ nombor',
+
+# Browsing diffs
+'previousdiff' => "mareak' kamiko",
+'nextdiff' => 'Nãwã joṛao',
+
+# Media information
+'file-info-size' => '$1 x $2 pixels, file size: $3, MIME type: $4',
+'file-nohires' => 'Aema resulation nondḍe banuḱa',
+'show-big-image' => 'Purạo resulation',
+
+# Special:NewFiles
+'ilsubmit' => 'Sendra',
+
+# Bad image list
+'bad_image_list' => 'Format do latar re leka',
+
+# Metadata
+'metadata' => 'Meṭa khobor',
+'metadata-help' => 'Noa rẹt redo bạṛti kathako menaḱa, paseć noa do ḍejiṭal kemera se skenar bebohar hoy kate ḍijiṭal benao. Judi noa ret noa reaḱ asolak khon nãwã aro lenkhan, paseć sanamaḱko thoṛa bań sodoroḱa noa retredo.',
+'metadata-fields' => 'Noa ciṭhire menaḱ photo reaḱ metadata jayga ṭalika do photo reaḱ sakamreye uduga, tinre ona metadata tibil do cabaḱa.
+Eṭagaḱ sanamko do ońkage eset tahẽna.
+Benao, Teyar
+Moḍel
+tạrik okte asolak
+hire okte
+f nombor
+isospeeddratings
+jeleń',
+
+# EXIF tags
+'exif-imagewidth' => 'Ganḍe',
+'exif-imagelength' => 'Usul',
+'exif-datetime' => 'Rẽt bodol reaḱ tạrikh ar okte',
+'exif-artist' => 'Onoliạ',
+
+# External editor support
+'edit-externally' => 'Noa rẽt tońge joṛao lạ̣gitte bahre reaḱ koejoń  beoharme',
+'edit-externally-help' => '(Nonḍe ńelme [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] bạṛtite baḍay lạgit)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'Sanam, sanamak, sanamko',
+'namespacesall' => 'sanam',
+'monthsall' => 'Sanamak',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'Jońgṛao bodolaḱko ńel',
+'watchlisttools-edit' => 'Ńelok tạlika ńel ar joṛao',
+
+# Special:SpecialPages
+'specialpages' => 'Jạruṛ patako',
+
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Tag]] saphay:',
+
+);
index 3b9163a..05dd5ea 100644 (file)
@@ -617,7 +617,6 @@ Cosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente
 
 # Diffs
 'history-title' => 'Istòria de is revisiones de "$1"',
-'difference' => '(Diferèntzias intre revisiones)',
 'lineno' => 'Lìnia $1:',
 'compareselectedversions' => 'Cumpara versiones scioberadas',
 'editundo' => 'annudda',
index f84871a..14bcaa2 100644 (file)
@@ -731,6 +731,7 @@ Siddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina
 '''Siddu chistu è nu tintativu liggìttimu di canciamentu, arriprova. Siddu lu prubbrema pirsisti, si pò pruvari a [[Special:UserLogout|sculligàrisi]] e effittuari n'accessu novu.'''",
 'token_suffix_mismatch' => "'''Lu canciamentu nun fu sarvatu pirchì lu client ammustrau di gèstiri 'n modu sbagghiatu li caràttiri di puntiggiatura nta lu token assuciatu a iddu. P'evitari na curruzzioni pussìbbili dô testu dâ pàggina, fu rifiutatu tuttu lu canciamentu. Sta situazzioni pò virificàrisi, certi voti, quannu s'adòpiranu arcuni sirvizza di proxy anònimi via web chi prisèntanu bug.'''",
 'editing' => 'Canciu di la vuci "$1"',
+'creating' => 'Stai criannu $1',
 'editingsection' => 'Canciamentu di $1 (sezzioni)',
 'editingcomment' => 'Canciu di $1 (nova sizzioni)',
 'editconflict' => "Cunflittu d'edizzioni supra $1",
@@ -950,7 +951,6 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 
 # Diffs
 'history-title' => 'Crunoluggìa dî canciamenti di "$1"',
-'difference' => '(Diffirenzi tra li rivisioni)',
 'lineno' => 'Lìnia $1:',
 'compareselectedversions' => 'Fari lu paraguni',
 'showhideselectedversions' => 'Ammustra/ammuccia virsioni silizziunati',
index 485583e..37b5f79 100644 (file)
@@ -692,7 +692,6 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F
 
 # Diffs
 'history-title' => 'Revision history of "$1"',
-'difference' => '(Difference atween revisions)',
 'lineno' => 'Line $1:',
 'compareselectedversions' => 'Compare selectit versions',
 'editundo' => 'undo',
index 5505e63..298fd95 100644 (file)
@@ -515,7 +515,6 @@ You cannot use the 'e-mail this user' feature unless a valid e-mail address is s
 
 # Diffs
 'history-title' => '"$1" جي سوانح',
-'difference' => '(مسودن درميان تفاوت)',
 'lineno' => 'سِٽَ $1:',
 'compareselectedversions' => 'چونڊيل پرت ڀيٽيو',
 'editundo' => 'اڻڪريو',
index 4637bae..8dad189 100644 (file)
@@ -763,7 +763,6 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 
 # Diffs
 'history-title' => 'Cronologia di li mudìfigghi di "$1"',
-'difference' => '(Diffarènzia i li ribisioni)',
 'lineno' => 'Riga $1:',
 'compareselectedversions' => 'Cunfronta li versioni sciubaraddi',
 'editundo' => 'annulla',
index cd677cd..8722978 100644 (file)
@@ -459,7 +459,6 @@ Eará bajasdoallit sáhtet lohkat čihkojuvvon sisdoalu ja máhcahit dan.",
 'deletedhist' => 'Šluhtejuvvon veršuvnnaid historjá',
 
 # Diffs
-'difference' => 'Veršuvnnaid erohusat',
 'lineno' => 'Gurgadas $1:',
 'compareselectedversions' => 'Veardde válljejuvvon veršuvnnaid',
 'editundo' => 'šluhtte',
index 0cf1cb8..37e544a 100644 (file)
@@ -576,6 +576,7 @@ Tamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėn
 'updated' => '(Atnaujėnta)',
 'note' => "'''Pastebiejims:'''",
 'previewnote' => "'''Nepamėrškėt, kū tas tėktās pervaiza, pakeitėmā da nier ėšsauguotė!'''",
+'continue-editing' => 'Dėrbtė tuoliau',
 'previewconflict' => 'Šėta parvaiza paruod teksta ėš vėršotinėjė teksta redagavėma lauka tēp, kāp ans bus ruodoms, jei pasirinksėt anū ėšsauguotė.',
 'session_fail_preview' => "'''Atsiprašuom! Mes nagalėm vīkdītė Tamstas keitėma diel sesėjės doumenū praradima.
 Prašuom pamiegintė vielēk. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''",
@@ -583,6 +584,7 @@ Prašuom pamiegintė vielēk. Jei šėtā napaded, pamieginkėt atsėjongtė ėr
 ''Kadaogi šėtom pruojekte grīnasės HTML īr ijongts, parveiza īr pasliepta kāp atsargoma prėimonė priš JavaScript atakas.''
 '''Jei tā teisiets keitėma bandīms, prašuom pamiegint viel. Jei šėtā napaded, pamieginkėt atsėjongtė ėr prėsėjongtė atgal.'''",
 'editing' => 'Taisuoms straipsnis - $1',
+'creating' => 'Dėrbama $1',
 'editingsection' => 'Taisuoms $1 (skėrsnelis)',
 'editingcomment' => 'Taisuoms $1 (naus skīrius)',
 'editconflict' => 'Ėšpreskėt kuonflėkta: $1',
@@ -702,7 +704,6 @@ Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta
 
 # Diffs
 'history-title' => 'Poslapė „$1“ istuorėjė',
-'difference' => '(Skėrtomā terp versėju)',
 'lineno' => 'Eilotė $1:',
 'compareselectedversions' => 'Palīgintė pasėrinktas versėjės',
 'editundo' => 'atšauktė',
index 359b1c8..c4ea0eb 100644 (file)
@@ -594,6 +594,9 @@ $2',
 'ns-specialprotected' => 'Posebne stranice se ne mogu uređivati.',
 'titleprotected' => 'Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].
 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“.',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -688,6 +691,7 @@ Nijedan e-mail neće biti poslan za bilo koju uslugu od slijedećih.',
 'invalidemailaddress' => 'Ova e-mail adresa ne može biti prihvaćena jer je u neodgovarajućem obliku.
 Molimo vas da unesete ispravnu adresu ili ostavite prazno polje.',
 'cannotchangeemail' => 'Na ovom wikiju ne možete promeniti e-mail adresu računa.',
+'emaildisabled' => 'Ova web-stranica ne može da šalje e-poruke.',
 'accountcreated' => 'Korisnički račun je napravljen',
 'accountcreatedtext' => 'Korisnički račun za $1 je napravljen.',
 'createaccount-title' => 'Pravljenje korisničkog računa za {{SITENAME}}',
@@ -893,8 +897,9 @@ Posljednje stavke evidencije blokiranja možete pogledati ispod:',
 Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Osvježeno)',
 'note' => "'''Napomena:'''",
-'previewnote' => "'''Upamtite da je ovo samo pretpregled.'''
-Vaše izmjene još uvijek nisu snimljene!",
+'previewnote' => "'''Ne zaboravite da je ovo samo pregled'''
+Izmjene stranice nisu još sačuvane!",
+'continue-editing' => 'Nastavak uređivanja',
 'previewconflict' => 'Ovaj pretpregled reflektuje tekst u gornjem polju
 kako će izgledati ako pritisnete "Snimi stranicu".',
 'session_fail_preview' => "'''Izvinjavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi. Molimo pokušajte ponovno. Ako i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.'''",
@@ -908,6 +913,7 @@ Izmjena je odbačena da bi se spriječilo uništavanje teksta stranice.
 To se događa ponekad kad korisite problematični anonimni proxy koji je baziran na web-u.",
 'edit_form_incomplete' => "'''Neki dijelovi uređivačkog obrasca nisu došli do servera; dvaput provjerite da su vaše izmjene nepromjenjene i pokušajte ponovno.'''",
 'editing' => 'Uređujete $1',
+'creating' => 'Stvaranje $1',
 'editingsection' => 'Uređujete $1 (sekciju)',
 'editingcomment' => 'Uređujete $1 (nova sekcija)',
 'editconflict' => 'Sukobljenje izmjene: $1',
@@ -973,6 +979,7 @@ Izgleda da je obrisana.',
 'edit-no-change' => 'Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.',
 'edit-already-exists' => 'Stranica nije mogla biti kreirana.
 Izgleda da već postoji.',
+'defaultmessagetext' => 'Uobičajeni tekst poruke',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.
@@ -1133,7 +1140,8 @@ Molimo provjerite zapise.',
 
 # Suppression log
 'suppressionlog' => 'Registri sakrivanja',
-'suppressionlogtext' => 'Ispod je spisak brisanja i blokiranja koja su povezana sa sadržajem koji je sakriven od administratora. Vidi [[Special:IPBlockList|spisak IP blokiranja]] za pregled trenutno važećih blokada.',
+'suppressionlogtext' => 'Ispod je spisak brisanja i blokiranja koja su povezana sa sadržajem koji je sakriven od administratora. 
+Vidi [[Special:BlockList|spisak blokiranja]] za pregled trenutno važećih blokada.',
 
 # History merging
 'mergehistory' => 'Spoji historije stranice',
@@ -1167,7 +1175,6 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 
 # Diffs
 'history-title' => 'Historija izmjena stranice "$1"',
-'difference' => '(Razlika između revizija)',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Linija $1:',
 'compareselectedversions' => 'Uporedite označene verzije',
@@ -1559,6 +1566,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'newsectionsummary' => '/* $1 */ nova sekcija',
 'rc-enhanced-expand' => 'Pokaži detalje (neophodan JavaScript)',
 'rc-enhanced-hide' => 'Sakrij detalje',
+'rc-old-title' => 'prvobitno kreirano kao "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Srodne izmjene',
@@ -1727,6 +1735,7 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 '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-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“.',
@@ -1853,6 +1862,10 @@ Slijedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vo
 Molimo pogledajte [$2 stranicu opisa datoteke] za ostale informacije.',
 'sharedupload-desc-here' => 'Ova datoteka je sa $1 i može se koristiti i na drugim projektima.
 Opis sa njene [$2 stranice opisa datoteke] je prikazan ispod.',
+'sharedupload-desc-edit' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
+'sharedupload-desc-create' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 'filepage-nofile' => 'Ne postoji datoteka s ovim nazivom.',
 'filepage-nofile-link' => 'Ne postoji datoteka s ovim imenom, ali je možete [$1 postaviti].',
 'uploadnewversion-linktext' => 'Postavite novu verziju ove datoteke/fajla',
@@ -2066,6 +2079,7 @@ Možete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena
 'allpagesbadtitle' => 'Dati naziv stranice je nepravilan ili ima međujezički ili interwiki prefiks.
 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',
 
 # Special:Categories
 'categories' => 'Kategorije',
@@ -2566,8 +2580,8 @@ Evidencija sakrivanja je prikazana ispod kao referenca:',
 'blocklogentry' => 'blokiran [[$1]] s rokom: $2 $3',
 'reblock-logentry' => 'promjena postavki blokiranja za [[$1]] sa vremenom isteka u $2 $3',
 'blocklogtext' => 'Ovo je historija akcija blokiranja i deblokiranja korisnika.
-Automatsko blokirane IP adrese nisu uspisane ovde.
-Pogledajte [[Special:BlockList|blokirane IP adrese]] za spisak trenutnih zabrana i blokiranja.',
+Automatski blokirane IP adrese nisu navedene ovdje.
+Pogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih zabrana i blokiranja.',
 'unblocklogentry' => 'deblokiran $1',
 'block-log-flags-anononly' => 'samo anonimni korisnici',
 'block-log-flags-nocreate' => 'pravljenje računa onemogućeno',
@@ -2831,7 +2845,7 @@ Molimo pokušajte ponovno.',
 
 # JavaScriptTest
 'javascripttest' => 'Javaskript test',
-'javascripttest-disabled' => 'Ova funkcija je onemogućena.',
+'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“.',
@@ -3638,6 +3652,7 @@ 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-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Putanja datoteke',
@@ -3826,4 +3841,15 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 'api-error-uploaddisabled' => 'Postavljanje je onemogućeno na ovoj wiki.',
 'api-error-verification-error' => 'Ova datoteka je možda oštećenja ili ima pogrešan nastavak.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekunde}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minuta}}',
+'duration-hours' => '$1 {{PLURAL:$1|sat|sati}}',
+'duration-days' => '$1 {{PLURAL:$1|dan|dana}}',
+'duration-weeks' => '$1 {{PLURAL:$1|sedmica|sedmica}}',
+'duration-years' => '$1 {{PLURAL:$1|godina|godina}}',
+'duration-decades' => '$1 {{PLURAL:$1|decenija|decenija}}',
+'duration-centuries' => '$1 {{PLURAL:$1|vijek|vijekova}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenijum|milenijuma}}',
+
 );
index 9e8b7d5..282e2b8 100644 (file)
@@ -590,7 +590,6 @@ Tigira n ujbbad ns, ar takka yat tayafut bahra imqqurn,  ɣayan afan ur ttili.',
 
 # Diffs
 'history-title' => 'Asakud n umcggr n « $1 »',
-'difference' => 'laḥna gr tamzwarut d tamǧarut',
 'difference-multipage' => 'Amzaray (laḥna) gr tisniwin',
 'lineno' => 'Izriri $1:',
 'compareselectedversions' => 'Snahya gr ilqmn lli tuystaynin',
index 068065f..587aef4 100644 (file)
@@ -442,8 +442,8 @@ $1",
 'mainpage' => 'මුල් පිටුව',
 'mainpage-description' => 'මුල් පිටුව',
 'policy-url' => 'Project:ප්‍රතිපත්තිය',
-'portal' => 'පà·\8aâ\80\8dරජà·\8f à¶¯à·\8aà·\80à·\8fරය',
-'portal-url' => 'Project:පà·\8aâ\80\8dරජà·\8f à¶¯à·\8aà·\80à·\8fරය',
+'portal' => 'පà·\8aâ\80\8dරජà·\8f à¶´à·\92à·\80à·\92à·\83à·\94ම',
+'portal-url' => 'Project:පà·\8aâ\80\8dරජà·\8f à¶´à·\92à·\80à·\92à·\83à·\94ම',
 'privacy' => 'පුද්ගලිකත්ව ප්‍රතිපත්තිය',
 'privacypage' => 'Project:පුද්ගලිකත්ව ප්‍රතිපත්තිය',
 
@@ -578,7 +578,7 @@ URL  සඳහන් කරමින්, මෙම කරුණ [[Special:ListUs
 'editinginterface' => "'''අවවාදයයි:''' මෘදුකාංගයට අතුරුමුව පෙළ සැපයීමට භාවිතා වන පිටුවක් ඔබ විසින් සංස්කරණය කරනු ලබයි.
 මෙම පිටුවට සිදු කරන වෙනස්වීම් විසින් අනෙකුත් පරිශීලකයන්ගේ පරිශීලක අතුරුමුවෙහි පෙනුමට බලපෑම් එල්ල කෙරෙනු ඇත.
 පරිවර්තන සඳහා, මීඩියාවිකි ප්‍රාදේශීයකරන ව්‍යාපෘතිය, [//translatewiki.net/wiki/Main_Page?setlang=si translatewiki.net], භාවිතා කිරීම සලකා බැලීමට කාරුණික වන්න.",
-'sqlhidden' => '(එස්කිවුඑල් විපරම සඟවා ඇත)',
+'sqlhidden' => '(SQL query සඟවා ඇත)',
 'cascadeprotected' => '"තීරු දර්ශන" විකල්පය සක්‍රීයනය කොට එමගින් ආරක්‍ෂණය කල පහත දැක්වෙන {{PLURAL:$1|පිටුව|පිටු}} අඩංගු කර ඇති බැවින්, මෙම පිටුව සංස්කරණය කිරීමෙන් වලකා ඇත:
 $2',
 'namespaceprotected' => "'''$1''' නාමඅවකාශයෙහි පිටු සංස්කරණය කිරීමට ඔබහට අවසර නොමැත.",
@@ -600,7 +600,7 @@ $2',
 ඔබගේ බ්‍රවුසරයෙහි පූර්වාපේක්‍ෂී සංචිතය (කෑෂය) පිරිසිදුකරන තෙක්, සමහරක් පිටු විසින් ඔබ තවදුරටත් පිවිසී ඇති බවක් දිගටම පෙන්නුම් කිරීමට ඉඩ ඇත.",
 'welcomecreation' => '== ආයුබෝවන්, $1! ==
 
-à¶\94බâ\80\8dà¶\9cà·\9a à¶\9cà·\92ණà·\94ම à¶­à·\90නà·\93 à¶\87ත.
+à¶\94බâ\80\8dà¶\9cà·\9a à¶\9cà·\92ණà·\94ම à¶­à¶±à¶± à¶½à¶¯à·\93.
 ඔබ‍ගේ [[Special:Preferences|{{SITENAME}} අභිරුචි ]] වෙනස් කිරීම අමතක නොකරන්න.',
 'yourname' => 'පරිශීලක නාමය:',
 'yourpassword' => 'මුරපදය:',
@@ -876,8 +876,9 @@ $2
 රීති ප්‍රකාරව .css හා .js පිටු විසින් ඉංග්‍රීසි කුඩා-අකුරු ශීර්ෂ භාවිතා කෙරෙන බව සිහි තබා ගන්න, නිදසුන. {{ns:user}}:Foo/vector.css මිස {{ns:user}}:Foo/Vector.css නොවන බව.",
 'updated' => '(යාවත්කාලීන)',
 'note' => "'''සටහන:'''",
-'previewnote' => "'''මෙය පෙරදසුනක් පමණි.'''
-ඔබගේ වෙනස්කිරීම් තවමත් සුරක්ෂිත කොට නොමැත!",
+'previewnote' => "'''මෙය පෙරදසුනක් පමණක් බව සිහිතබාගන්න.'''
+ඔබගේ වෙනස්කිරීම් තවමත් සුරැකීමට ලක් කොට නොමැත!",
+'continue-editing' => 'සංස්කරණය කරගෙනයන්න',
 'previewconflict' => 'ඔබ විසින් සුරැකීම තෝරාගත්තොත්,  ඉහළ පෙළ සංස්කරණ සරියෙහි,  පෙළ දර්ශනය විය හැකි අයුර මෙම පෙර-දසුනෙන් ආවර්ජනය වේ.',
 'session_fail_preview' => "'''කණගාටුයි! සැසි දත්ත හානියක් හේතුවෙන් අප විසින් ඔබගේ  සංස්කරණය ක්‍රියායයනය කිරීමට නොහැකි වී ඇත.
 කරුණාකර නැවත උත්සාහ කරන්න.
@@ -892,6 +893,7 @@ $2
 සංස්කරණය නිෂ්ප්‍රභා කරන ලද්දේ පිටු පෙළ දූෂණය වීම වැලැක්වීමටය.
 දෝෂ-සපිරි වෙබ්-පාදක නිර්නාමික නියුතු සේවාවක් ඔබ විසින් භාවිත කිරීම නිසා මෙය සමහරවිට සිදුවිය හැක.'''",
 'editing' => '$1 සංස්කරණය කරමින් පවතියි',
+'creating' => '$1 තනමින්',
 'editingsection' => '$1 (ඡේදය) සංස්කරණය කරමින් පවතියි',
 'editingcomment' => '$1 සංස්කරණය කරමින් පවතියි (නව ඡේදයක්)',
 'editconflict' => 'සංස්කරණ ගැටුම: $1',
@@ -959,7 +961,7 @@ $2
 එය දැනටමත් පවතියි.',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => 'අවවාදයයි: මෙම පිටුවෙහි අධිවැය ව්‍යාකරණ විග්‍රහ ශ්‍රිත කැඳවුම් පමණට වඩා ඇත.
+'expensive-parserfunction-warning' => 'අවවාදයයි: මෙම පිටුවෙහි අධිවැය ව්‍යාකරණ විග්‍රහ ශ්‍රිත කැඳවුම් (expensive parser function calls) පමණට වඩා ඇත.
 
 එහි තිබිය යුතු වූයේ  {{PLURAL:$2|එක් කැඳවුමකට |කැඳවුම් $2 ට }} අඩුවෙන් වුවද, මෙහි දැනට  {{PLURAL:$1|එක් කැඳවුමක්|කැඳවුම්  $1 ක්}} අඩංගුව ඇත.',
 'expensive-parserfunction-category' => 'අධිවැය ව්‍යාකරණ විග්‍රහ ශ්‍රිත කැඳවුම් පමණට වඩා ඇති පිටු',
@@ -1101,7 +1103,7 @@ $1",
 'revdelete-modify-no-access' => '$1 දින, $2 වේලාවෙහි, අයිතමය වෙනස්කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: මෙම අයිතමය "පරිසීමිත" ලෙසින් සලකුණු කර ඇත.
 ඔබට ඒ සඳහා ප්‍රවේශයන් නොමැත.',
 'revdelete-modify-missing' => 'අනන්‍යාංක $1 දරණ අයිතමය වෙනස් කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: එය දත්ත ගබඩාවෙන් අස්ථානගතවී ඇත!',
-'revdelete-no-change' => "'''à¶\85à·\80à·\80à·\8fදයයà·\92:''' $1 à¶¯à·\92න, $2 à·\80à·\9aලà·\8fà·\80à·\99à·\84à·\92, à¶\85යà·\92තමය à¶¯à·\90නටමතà·\8a à¶¯à·\98à·\81à·\8aâ\80\8dයතà·\8f à¶´à¶»à·\92à·\83à·\8aථà·\92තà·\93නà·\8a à¶\89ලà·\8aලà·\8f à·\83à·\92ට ඇත.",
+'revdelete-no-change' => "'''à¶\85à·\80à·\80à·\8fදයයà·\92:''' $1 à¶¯à·\92න, $2 à·\80à·\9aලà·\8fà·\80à·\99à·\84à·\92, à¶\85යà·\92තමය à¶¯à·\90නටමතà·\8a à¶¯à·\98à·\81à·\8aâ\80\8dයතà·\8f à·\83à·\90à¶\9aà·\83à·\94මà·\8a à¶\89ලà·\8aලà·\8f ඇත.",
 'revdelete-concurrent-change' => '$1 දින, $2 වේලාවෙහි, අයිතමය වෙනස් කිරීමෙහිදී දෝෂයක් ඇතිවී ඇත: එය වෙනස්කිරීමට ඔබ උත්සාහ ගන්නා අතරතුරදී තවත් අයෙකු විසින් එහි ස්තිතිය වෙනස් කර ඇති බවක් පෙනෙන්නට ඇත.
 කරුණාකර ලඝු-සටහන් පරික්ෂාකර බලන්න.',
 'revdelete-only-restricted' => '$2 දිනැති අයිතමය සැඟවීමේ දෝෂය , $1:අනෙකුත් සැඟවීම් විකල්පයන් අතුරින් එකක් තෝරාගන්නේ නැතිව, පරිපාලකයන්ගේ දර්ශනයෙන් අයිතමයන් සැඟවීම  ඔබහට සිදුකල නොහැක.',
@@ -1135,7 +1137,7 @@ $1",
 'mergehistory-empty' => 'සංශෝධනයන් කිසිවක් ඒකාබද්ධ කල නොහැක.',
 'mergehistory-success' => ' [[:$1]] හි  {{PLURAL:$3|සංශෝධනයක්|සංශෝධන  $3 ක්}}සාර්ථක ලෙස   [[:$2]] හා සමග ඒකාබද්ධ කරන ලදි.',
 'mergehistory-fail' => 'ඉතිහාස ඒකාබද්ධය සිදු කල නොහැක, පිටු හා වේලා පරාමිතීන් නැවත පිරික්සා බලන්න.',
-'mergehistory-no-source' => 'මූල පිටුව $1 කොපවතී.',
+'mergehistory-no-source' => 'මූලාශ පිටුව $1 නොපවතී.',
 'mergehistory-no-destination' => 'අන්ත පිටුව $1 නොපවතී.',
 'mergehistory-invalid-source' => 'මූල පිටුව නීතික ශීර්ෂයක් සහිත විය යුතුය.',
 'mergehistory-invalid-destination' => 'අන්ත  පිටුව නීතික ශීර්ෂයක් සහිත විය යුතුය.',
@@ -1152,7 +1154,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1"හි සංශෝධන ඉතිහාසය',
-'difference' => '(අනුවාද අතර වෙනස්කම්)',
 'difference-multipage' => 'පිටු අතර වෙනස',
 'lineno' => 'පේළිය $1:',
 'compareselectedversions' => 'තෝරාගත් සංශෝධන සසඳන්න',
@@ -1287,10 +1288,10 @@ $1",
 'timezoneuseserverdefault' => 'විකියෙහි සාමාන්‍ය විදිහ භාවිත කරන්න ($1)',
 'timezoneuseoffset' => 'වෙනත් (හිලව්ව නියමාකාරයෙන් දක්වන්න)',
 'timezoneoffset' => 'Offset¹:',
-'servertime' => 'සර්වරයේ වේලාව:',
+'servertime' => "ස'වරයේ වේලාව:",
 'guesstimezone' => 'බ්‍රවුසරයෙන් පුරවන්න',
 'timezoneregion-africa' => 'අප්‍රිකාව',
-'timezoneregion-america' => 'à¶\87මරිකාව',
+'timezoneregion-america' => 'à¶\85මà·\99රිකාව',
 'timezoneregion-antarctica' => 'ඇන්ටාටිකාව',
 'timezoneregion-arctic' => 'අත්ලාන්තික්',
 'timezoneregion-asia' => 'ආසියාව',
@@ -1345,18 +1346,18 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-dateformat' => 'දින ආකෘතිය',
 'prefs-timeoffset' => 'වේලා හිලව්ව',
 'prefs-advancedediting' => 'වැඩිදුර තෝරාගැනීම් සැකසුම්',
-'prefs-advancedrc' => 'පà·\8aâ\80\8dරà¶\9cත à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
-'prefs-advancedrendering' => 'පà·\8aâ\80\8dරà¶\9cත à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
+'prefs-advancedrc' => 'à·\80à·\90ඩà·\92දà·\94ර à·\83à·\90à¶\9aà·\83à·\94මà·\8a à¶­à·\9dරà·\8fà¶\9cà·\90නà·\93ම',
+'prefs-advancedrendering' => 'à·\80à·\90ඩà·\92දà·\94ර à·\83à·\90à¶\9aà·\83à·\94මà·\8a à¶­à·\9dරà·\8fà¶\9cà·\90නà·\93ම',
 'prefs-advancedsearchoptions' => 'ප්‍රගත විකල්පයන්',
-'prefs-advancedwatchlist' => 'පà·\8aâ\80\8dරà¶\9cත à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
-'prefs-displayrc' => 'දරà·\8aà·\81න à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
+'prefs-advancedwatchlist' => 'à·\80à·\90ඩà·\92දà·\94ර à·\83à·\90à¶\9aà·\83à·\94මà·\8a à¶­à·\9dරà·\8fà¶\9cà·\90නà·\93ම',
+'prefs-displayrc' => 'දරà·\8aà·\81න à·\83à·\90à¶\9aà·\83à·\94මà·\8a à¶­à·\9dරà·\8fà¶\9cà·\90නà·\93ම',
 'prefs-displaysearchoptions' => 'විකල්ප පෙන්වන්න',
 'prefs-displaywatchlist' => 'විකල්ප පෙන්වන්න',
 'prefs-diffs' => 'වෙනස',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'විද්‍යුත්-තැපැල් ලිපිනය අනීතික බවක් පෙනෙයි.',
-'email-address-validity-invalid' => 'නà·\93තà·\92à¶\9a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a-තà·\90පà·\90ල් ලිපිනයක් ඇතුලත් කරන්න',
+'email-address-validity-invalid' => 'à·\80ලà¶\82à¶\9cà·\94 à·\80à·\92දà·\8aâ\80\8dයà·\94ත් ලිපිනයක් ඇතුලත් කරන්න',
 
 # User rights
 'userrights' => 'පරිශීලක හිමිකම් කළමනාකරණය',
@@ -1700,7 +1701,7 @@ $1',
 'upload-file-error' => 'අභ්‍යන්තර දෝෂය',
 'upload-file-error-text' => 'සේවාදායකයෙහි තාවකාලික ගොනුවක් තැනීමට උත්සාහ දැරීමෙහිදී අභ්‍යන්තර දෝෂයක් හට ගැනිණි.
 කරුණාකර [[Special:ListUsers/sysop|පරිපාලකවරයෙක්]] වෙත යොමුවන්න.',
-'upload-misc-error' => 'à\85ඥà·\8fත උඩුගත කිරීම් දෝෂය',
+'upload-misc-error' => 'à·\84ඳà·\94නà·\8f à¶±à·\9cà¶\9cතà·\8a උඩුගත කිරීම් දෝෂය',
 'upload-misc-error-text' => 'උඩුගත කිරීමේදී හඳුනාගත නොහැකි දෝෂයක් සිදුවිය.
 URLහි නීතික බව හා ප්‍රවේශ්‍ය බව තහවුරුකරගෙන නැවත උත්සාහ කරන්න.
 ගැටළුව තවදුරටත් පවතී නම්, [[Special:ListUsers/sysop|පරිපාලකවරයෙකු]] අමතන්න.',
@@ -2004,7 +2005,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'usercreated' => '$1 දින $2 වේලාවේදී {{GENDER:$3|තනන ලදි}}',
 'newpages' => 'අළුත් පිටු',
 'newpages-username' => 'පරිශීලක-නාමය:',
-'ancientpages' => 'පà·\94රà·\8fණතම පිටු',
+'ancientpages' => 'පà·\90රණà·\92ම පිටු',
 'move' => 'ගෙනයන්න',
 'movethispage' => 'මෙම පිටුව ගෙන යන්න',
 'unusedimagestext' => 'පහත ගොනු පවතින නමුත් ඒවා කිසිදු පිටුවකට කාවද්දා නොමැත.
@@ -2565,7 +2566,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'block-log-flags-angry-autoblock' => 'ආවර්ධිත ස්වයංක්‍රීය වාරණය සක්‍රීය කරන ලදි',
 'block-log-flags-hiddenname' => 'පරිශීලක-නාමය  සඟවා ඇත',
 'range_block_disabled' => 'පරාස වාරණයන් සිදුකිරීමට පරිපාලක වරුන්ට ඇති හැකියාව අක්‍රීය කරන ලදි.',
-'ipb_expiry_invalid' => 'à¶\89à¶\9aà·\94තà·\8aà·\80à·\93මà·\9a à¶\9aà·\8fලය à¶\85නà·\93තà·\92à¶\9aය.',
+'ipb_expiry_invalid' => 'à¶\9aලà·\8aà¶\89à¶\9aà·\94තà·\8aà·\80à·\93මà·\9a à·\80à·\9aලà·\8fà·\80 à·\80ලà¶\82à¶\9cà·\94 à¶±à·\90ත.',
 'ipb_expiry_temp' => 'සැඟවුනු පරිශීලක-නාම වාරණයන් ස්ථීර ඒවා විය යුතුය.',
 'ipb_hide_invalid' => 'මෙම ගිණුම යටපත්කිරීම කල නොහැකියි; පමණට වඩා සංස්කරණ සිදු කර ඇතිවා විය හැක.',
 'ipb_already_blocked' => '"$1" දැනටමත් වාරණයට ලක් කර ඇත',
@@ -2688,20 +2689,20 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 අන්ත පිටුව "[[:$1]]" දැනටමත් පවතියි.
 එය මකාදමා ගෙනයාම සඳහා පෙත එළි කිරීමට ඔබ හට ඇවැසිද?',
 'delete_and_move_confirm' => 'ඔව්, පිටුව මකා දමන්න',
-'delete_and_move_reason' => '"[[$1]]" ගෙනයෑම සඳහා ඉඩ ලබාගැනීම සඳහා මකාදමන ලදී',
+'delete_and_move_reason' => '"[[$1]]" ගෙනයෑම ඉඩ ලබාගැනීම සඳහා මකාදමන ලදී',
 'selfmove' => 'මූල හා අන්ත ශීර්ෂ දෙකම එකමය;
 පිටුවක් එය වෙතම ගෙන යා නොහැක.',
 'immobile-source-namespace' => '"$1" නාමඅවකාශයෙහි පිටු ගෙනයාම සිදුකල නොහැක',
 'immobile-target-namespace' => '"$1" නාමඅවකාශය වෙත පිටු ගෙනයාම සිදුකල නොහැක',
-'immobile-target-namespace-iw' => 'à¶\85නà·\8aතරà·\8aà·\80à·\92à¶\9aà·\93 à·\83බà·\90ඳà·\92ය, à¶´à·\92ටà·\94 à¶\9cà·\99නයà·\91ම à·\83ඳà·\84à·\8f à¶±à·\93තà·\92à¶\9a à¶\91ලà·\8aලයක් නොවේ.',
+'immobile-target-namespace-iw' => 'à¶\85නà·\8aතරà·\8aà·\80à·\92à¶\9aà·\93 à·\83බà·\90ඳà·\92ය, à¶´à·\92ටà·\94 à¶\9cà·\99නයà·\91ම à·\83ඳà·\84à·\8f à·\80ලà¶\82à¶\9cà·\94 à¶\89ලà¶\9aà·\8aà¶\9aයක් නොවේ.',
 'immobile-source-page' => 'මෙම පිටුව ගෙනයාහැක්කක් නොවේ.',
 'immobile-target-page' => 'එම අන්ත ශීර්ෂයට ගෙන යෑම කල නොහැක.',
 'imagenocrossnamespace' => 'ගොනුවක්, ගොනුවක්-නොවන නාමඅවකාශයකට ගෙනයෑම කල නොහැක',
 'nonfile-cannot-move-to-file' => 'ගොනුවක්-නොවන්න ගොනු නාමඅවකාශයට ගෙනයෑම කල නොහැක',
-'imagetypemismatch' => 'නව ගොනු ප්‍රසර්ජනය එහි වර්ගය හා නොගැලපේ',
-'imageinvalidfilename' => 'ඉලක්කගත ගොනු නාමය අනීතිකයි',
-'fix-double-redirects' => 'මà·\94ලà·\8a à·\81à·\93රà·\8aà·\82යට à¶\91ලà·\8aලà·\80න à¶\9aà·\92à·\83à·\92යමà·\8a à¶ºà·\85à·\92-යà·\9cමà·\94à·\80à·\93මà·\8a à¶\8bඩà·\94à¶\9cත කරන්න',
-'move-leave-redirect' => 'යà·\85à·\92-යà·\9cමà·\94à·\80à¶\9aà·\8a à·\84à·\90ර à¶¯à¶¸න්න',
+'imagetypemismatch' => 'නව ගොනු ප්‍රසර්ජනය(extension) එහි වර්ගය හා නොගැලපේ',
+'imageinvalidfilename' => 'ඉලක්ක ගොනු නාමය වලංගුනැත',
+'fix-double-redirects' => 'මà·\94ලà·\8a à¶¸à·\8fතà·\98à¶\9aà·\8fà·\80ට à¶\91ලà·\8aලà·\80න à¶ºà·\85à·\92-යà·\9cමà·\94 à¶\85පà·\8aඩà·\9aටà·\8a කරන්න',
+'move-leave-redirect' => 'යà·\85à·\92-යà·\9cමà·\94à·\80à¶\9aà·\8a à·\83à¶\9aà·\83à·\8f à¶\9cà·\99නයන්න',
 'protectedpagemovewarning' => "'''අවවාදයයි:''' පරිපාලක වරප්‍රසාද සතු පරිශීලකයන්ට පමණක් ගෙන යෑ හැකි පරිදී මෙම පිටුව අවුරා ඇත.
 ආසන්නතම ලඝු සටහන යොමුවන් සඳහා පහතින් සපයනු ලැබේ:",
 'semiprotectedpagemovewarning' => "'''සටහන:''' ලේඛනගත පරිශීලකයන්ට පමණක් ගෙන යෑ හැකි පරිදි මෙම පිටුව අවුරා ඇත.
@@ -2983,8 +2984,8 @@ $1',
 'filedelete-archive-read-only' => 'වෙබ්සේවාදායකය විසින්  "$1"සංරක්ෂික විරෙක්ටරියට ලිවීම සිදුකල නොහැක.',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à¶´à·\90රà·\90ණà·\92 à·\83à¶\82à·\83à·\8aà¶\9aරණය',
-'nextdiff' => 'නවීන සංස්කරණය →',
+'previousdiff' => 'â\86\90 à¶´à·\90රණà·\92 à·\83à¶\82à·\83à·\8aà¶\9aරණ',
+'nextdiff' => 'නව සංස්කරණ →',
 
 # Media information
 'mediawarning' => "'''අවවාදයයි''': අනිෂ්ට කේතයන් මෙම ගොනුවෙහි අඩංගු විය හැක.
@@ -3220,7 +3221,7 @@ Others will be hidden by default.
 'exif-countrycreated' => 'රූපය ගන්නා ලද රට',
 'exif-countrycodecreated' => 'රූපය ගන්නා ලද රටෙහි කේතය',
 'exif-provinceorstatecreated' => 'රූපය ගන්නා ලද පළාත හෝ ප්‍රාන්තය',
-'exif-citycreated' => 'රà·\96පය à¶\9cනà·\8aනà·\8f à¶½à¶¯ à¶±à¶\9cරය',
+'exif-citycreated' => 'රà·\96පය à¶\9cනà·\8aනà·\8f à¶½à¶¯ à¶´à·\94රà·\80රය',
 'exif-sublocationcreated' => 'රූපය ගන්නා ලද නගර උප-ස්ථානය',
 'exif-worldregiondest' => 'ලෝක ප්‍රදේශය දක්වා ඇත',
 'exif-countrydest' => 'පෙන්වනලද රට',
@@ -3230,7 +3231,7 @@ Others will be hidden by default.
 'exif-sublocationdest' => 'පුරවරයේ උප-ස්ථානය දක්වා ඇත',
 'exif-objectname' => 'කෙටි මාතෘකාව',
 'exif-specialinstructions' => 'විශේෂ උපදෙස්',
-'exif-headline' => 'à·\81ිරස්තලය',
+'exif-headline' => 'à·\83ිරස්තලය',
 'exif-credit' => 'විශ්වාසය/ප්‍රතිපාදකයා',
 'exif-source' => ' මූලාශ්‍රය',
 'exif-editstatus' => 'රූපයේ සංස්කරණ තත්ත්වය',
@@ -3276,7 +3277,7 @@ Others will be hidden by default.
 'exif-event' => 'විස්තර දක්වන ලද සිද්ධිය',
 'exif-organisationinimage' => 'විස්තර දක්වන ලද සංවිධානය',
 'exif-personinimage' => 'පුද්ගලික වචනයෙන් විස්තර කරන ලද',
-'exif-originalimageheight' => 'à¶\9aà·\90පà·\94මට පෙර රූපයෙහි උස',
+'exif-originalimageheight' => 'à¶\9aපà·\8aපà·\8fදà·\94à·\80ට පෙර රූපයෙහි උස',
 
 # EXIF attributes
 'exif-compression-1' => 'අසංක්ෂිප්ත',
@@ -3290,7 +3291,7 @@ Others will be hidden by default.
 'exif-photometricinterpretation-2' => 'RGB',
 'exif-photometricinterpretation-6' => 'YCbCr',
 
-'exif-unknowndate' => 'à¶\85ඥà·\8fත දිනයකි',
+'exif-unknowndate' => 'නà·\9cදනà·\8aනà·\8f දිනයකි',
 
 'exif-orientation-1' => 'සාමාන්‍ය',
 'exif-orientation-2' => 'තිරස වටා පෙරලා',
@@ -3394,8 +3395,8 @@ Others will be hidden by default.
 'exif-exposuremode-1' => 'හස්තීය නිරාවරණය',
 'exif-exposuremode-2' => 'ස්වයං සමුච්චය',
 
-'exif-whitebalance-0' => 'à·\83à·\8aà·\80යà¶\82à¶\9aà·\8aâ\80\8dරà·\93ය à·\81à·\8aà·\80à·\9aත තුලනය',
-'exif-whitebalance-1' => 'à·\84à·\83à·\8aතà·\93ය  à·\81à·\8aà·\80à·\9aත à¶­à·\94ලනය',
+'exif-whitebalance-0' => 'à·\83à·\94දà·\94 à¶´à·\8fට à·\83à·\8aà·\80යà¶\82à¶\9aà·\8aâ\80\8dරà·\93යà·\80 තුලනය',
+'exif-whitebalance-1' => 'à\94බà·\80à·\92à·\83à·\92නà·\8a à·\83à·\94දà·\94 à¶´à·\8fට  à¶­à·\94ලනයà¶\9aà·\92රà·\93ම',
 
 'exif-scenecapturetype-0' => 'සම්මත',
 'exif-scenecapturetype-1' => 'භූතල තලීය',
@@ -3479,7 +3480,7 @@ Others will be hidden by default.
 'exif-dc-source' => 'මූලාශ්‍ර මාධ්‍ය',
 'exif-dc-type' => 'මාධ්‍ය වර්ගය',
 
-'exif-rating-rejected' => 'ප්‍රතික්ෂිප්ත',
+'exif-rating-rejected' => 'ප්‍රතික්‍ෂේපිත',
 
 'exif-isospeedratings-overflow' => '65535 ට වඩා විශාලතර',
 
@@ -3650,7 +3651,7 @@ This confirmation code will expire at $4.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => '{{PLURAL:$1|තත්පරයකට|තත්පර $1 කට}} වඩා නැවුම් වෙනස්වීම්, ලැයිස්තුවෙහි පෙන්නුම් නොවීමට ඉඩ ඇත.',
-'lag-warn-high' => 'දත්ත-ගබඩා සේවාදායකයෙහි අධික විලම්බය නිසා, වෙනස්වීමට පසු ගතවූයේ  {{PLURAL:$1|එක් තත්පරයක්|තත්පර $1 ක්}} පමණක් නම්, ලැයිස්තුවෙහි අන්තර්ගතවී නොතිබිය හැක.',
+'lag-warn-high' => "දත්තසංචිත ස'වරයේ අධි විලම්බය නිසා, වෙනස්වීමට පසු ගතවූයේ  {{PLURAL:$1|එක් තත්පරයක්|තත්පර $1 ක්}} පමණක් නම්, ලැයිස්තුවෙහි අන්තර්ගතවී නොතිබිය හැක.",
 
 # Watchlist editor
 'watchlistedit-numitems' => 'සාකච්ඡා පිටු ගණනය නොකල විට, ඔබගේ මුර-ලැයිස්තුවෙහි  {{PLURAL:$1|ශීර්ෂ එකක්|ශීර්ෂ $1 ක්}} අඩංගු වේ.',
@@ -3761,7 +3762,7 @@ This confirmation code will expire at $4.',
 'version-hook-name' => 'හසුරු නම',
 'version-hook-subscribedby' => 'දායකවී ඇත්තේ',
 'version-version' => '(අනුවාදය $1)',
-'version-license' => 'බලපතà·\8aâ\80\8dරය',
+'version-license' => 'à·\80රපත',
 'version-poweredby-credits' => "මෙම විකිය '''[//www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'අනෙකුත්',
 'version-license-info' => 'MediaWiki යනු නිදහස් මෘදුකාංගයකි; නිදහස් මෘදුකාංග පදනමේ (Free Software Foundation) හි GNU General Public License නම් බලපත්‍රයේ වගන්තිවලට අනුව ඔබට එය නැවත බෙදාහැරීම සහ/හෝ සංස්කරණය කළ හැක; ඒ, එම බලපත්‍රයේ 2වන හෝ (ඔබට කැමති නම්) ඉන්පසු එන සංස්කරණයකට අනුවය.
@@ -3799,7 +3800,7 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 * <span class="mw-specialpagecached">කෑෂිත වි‍ශේෂ පිටු (යල් පැන ගිය විය හැක).</span>',
 'specialpages-group-maintenance' => 'නඩත්තු වාර්තා',
 'specialpages-group-other' => 'අනෙකුත් විශේෂ පිටු',
-'specialpages-group-login' => 'පà·\8aâ\80\8dරà·\80à·\92à·\82à·\8aට à·\80න්න / ගිණුමක් තනන්න',
+'specialpages-group-login' => 'පà·\92à·\80à·\92à·\83à·\99න්න / ගිණුමක් තනන්න',
 'specialpages-group-changes' => 'මෑත වෙනස්වීම් හා ලඝු-සටහන්',
 'specialpages-group-media' => 'මාධ්‍ය වාර්තා හා උඩුගත කිරීම්',
 'specialpages-group-users' => 'පරිශීලකයන් හා හිමිකම්',
@@ -3808,11 +3809,11 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'specialpages-group-pagetools' => 'පිටු මෙවලම්',
 'specialpages-group-wiki' => 'විකි දත්ත හා මෙවලම්',
 'specialpages-group-redirects' => 'විශේෂ පිටු යළි-යොමුකිරීම',
-'specialpages-group-spam' => 'à\85යà·\8fචà·\92ත-තà·\90පà·\91ල මෙවලම්',
+'specialpages-group-spam' => 'à·\83à·\8aපà·\91මà·\8a මෙවලම්',
 
 # Special:BlankPage
 'blankpage' => 'හිස් පිටුව',
-'intentionallyblankpage' => 'මà·\99ම à¶´à·\92ටà·\94à·\80 à\85භà·\92පà·\8aâ\80\8dරà·\9aතà·\80 à·\84à·\92à·\83à·\8aà·\80 à¶­à¶¶à¶± à¶½à¶¯à·\92',
+'intentionallyblankpage' => 'මà·\99ම à¶´à·\92ටà·\94à·\80 à·\83à·\92තà·\8fමතà·\8fම à·\84à·\92à·\83à·\8aà·\80 à¶­à¶¶à·\8f à¶\87ත.',
 
 # External image whitelist
 'external_image_whitelist' => '#මෙම පේළිය මෙම අයුරින්ම තිබීමට ඉඩ හරින්න <pre>
@@ -3942,13 +3943,13 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'api-error-ok-but-empty' => 'අභ්‍යන්තර දෝෂය: සර්වරයෙන් ප්‍රතිචාරයක් නොමැත.',
 'api-error-overwrite' => 'දැනටමත් තිබෙන ගොනුවක් යටපත් කෙරුමට ඉඩදෙනු නොලැබේ.',
 'api-error-stashfailed' => 'අභ්‍යන්තර දෝෂය: තාවකාලික ගොනුව සුරක්ෂිත කිරීමට සර්වරයට නොහැකි වුනි.',
-'api-error-timeout' => 'බලාපොරොත්තු වූ කාලය තුල සර්වරය ප්‍රතිචාර නොදක්වන ලදී.',
+'api-error-timeout' => 'බලාපොරොත්තු වූ කාලය තුල ස"වරය ප්‍රතිචාර නොදක්වන ලදී.',
 'api-error-unclassified' => 'හඳුනා නොගත් දෝෂයක් ඇතිවිය.',
 'api-error-unknown-code' => 'නොදත් දෝෂය: "$1"',
 'api-error-unknown-error' => 'අභ්‍යන්තර දෝෂය: ඔබ මෙම ගොනුව උඩුගත කිරීමට තැත් කිරීමේදී කුමක්දෝ වැරදුණා.',
 'api-error-unknown-warning' => 'නොදත් අවවාදය: $1',
 'api-error-unknownerror' => 'හඳුනාගත නොහැකි දෝෂය: "$1".',
 'api-error-uploaddisabled' => 'මෙම විකියෙහි උඩුගතකිරීම අක්‍රිය කොට ඇත.',
-'api-error-verification-error' => 'මà·\99ම à¶\9cà·\9cනà·\94à·\80 à·\83මà·\84රà·\80à·\92ට à¶¯à·\96à·\82à·\92ත à·\80à·\93 à¶\87ත, à·\84à·\9d à¶\91යට à·\80à·\90රදà·\92 à·\80à·\92à·\83à·\8aතà·\92රà·\8aණයà¶\9aà·\8a à¶\87ත.',
+'api-error-verification-error' => 'මà·\99ම à¶\9cà·\9cනà·\94à·\80 à¶´à·\85à·\94දà·\94à·\80à·\93 à·\84à·\9d à¶\91යට à·\80à·\90රදà·\92 à·\80à·\92à·\83à·\8aතà·\92රà·\8aණයà¶\9aà·\8a (extension) à¶\87තà·\94à·\80à·\8f à·\80à·\92යà·\84à·\90à¶\9a.',
 
 );
index 8de0e3a..6d331d8 100644 (file)
@@ -6,15 +6,6 @@
  *
  * @ingroup Language
  * @file
- *
- * @author Hydra
  */
 
 $fallback = 'en';
-
-$messages = array(
-# Vector skin
-'vector-view-create' => 'Start',
-'vector-view-edit'   => 'Change',
-
-);
index 71ce804..e756317 100644 (file)
@@ -409,7 +409,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'pokrač.',
 'index-category' => 'Indexované stránky',
 'noindex-category' => 'neindexované stránky',
-'broken-file-category' => 'Stránky s poškodenými odkazmi súbor',
+'broken-file-category' => 'Stránky s odkazom na neexistujúci súbor',
 
 'about' => 'Projekt',
 'article' => 'Stránka s obsahom',
@@ -964,6 +964,7 @@ Dolu je pre informáciu posledná položka zo záznamu blokovaní:',
 'note' => "'''Poznámka: '''",
 'previewnote' => "'''Nezabudnite, toto je iba náhľad stránky, ktorú upravujete.
 Zmeny ešte nie sú uložené!'''",
+'continue-editing' => 'Pokračovať v úpravách',
 'previewconflict' => 'Tento náhľad upravenej stránky zobrazuje text z horného poľa s textom tak, ako sa zobrazí potom, keď ju uložíte.',
 'session_fail_preview' => "'''Prepáčte, nemohli sme spracovať váš príspevok kvôli strate údajov relácie.
 Skúste to prosím ešte raz.
@@ -1058,6 +1059,10 @@ Tieto argumenty boli vynechané.',
 'parser-template-loop-warning' => 'Zistená slučka v šablónach: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Bol prekročený limit rekurzie šablón ($1)',
 'language-converter-depth-warning' => 'Bolo prekročené obmedzenie hĺbky ($1) jazykového konvertora',
+'node-count-exceeded-category' => 'Stránky s priveľkým počtom uzlov',
+'node-count-exceeded-warning' => 'Stránka prekročila povolený počet uzlov',
+'expansion-depth-exceeded-category' => 'Stránky s priveľkou hĺbkou expanzie',
+'expansion-depth-exceeded-warning' => 'Stránka prekročila povolenú hĺbku expanzie',
 
 # "Undo" feature
 'undo-success' => 'Úpravu je možné vrátiť. Prosím skontrolujte tento rozdiel, čím overíte, že táto úprava je tá, ktorú chcete, a následne uložte zmeny, čím ukončíte vrátenie.',
@@ -1234,7 +1239,6 @@ Uistite sa, že táto zmena zachová historickú kontinuitu zmien stránky.',
 
 # Diffs
 'history-title' => 'História revízií „$1“',
-'difference' => '(Rozdiel medzi revíziami)',
 'difference-multipage' => '(Rozdiel medzi stránkami)',
 'lineno' => 'Riadok $1:',
 'compareselectedversions' => 'Porovnať označené verzie',
@@ -3737,6 +3741,9 @@ Spolu s týmto programom by ste obdržať [{{SERVER}}{{SCRIPTPATH}}/COPYING kóp
 'version-software' => 'Nainštalovaný softvér',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Verzia',
+'version-entrypoints' => 'URL vstupných bodov',
+'version-entrypoints-header-entrypoint' => 'Vstupný bod',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Cesta k súboru',
index 55bac68..9311a1c 100644 (file)
@@ -222,8 +222,8 @@ $messages = array(
 'tog-watchlisthideown' => 'Na spisku nadzorov skrij moja urejanja',
 'tog-watchlisthidebots' => 'Na spisku nadzorov skrij urejanja botov',
 'tog-watchlisthideminor' => 'Skrij manjša urejanja na spisku nadzorov',
-'tog-watchlisthideliu' => 'Skrij urejanja prijavljenih uporabnikov v spisku nadzorov',
-'tog-watchlisthideanons' => 'Skrij urejanja anonimnih uporabnikov v spisku nadzorov',
+'tog-watchlisthideliu' => 'Skrij urejanja prijavljenih uporabnikov na spisku nadzorov',
+'tog-watchlisthideanons' => 'Skrij urejanja anonimnih uporabnikov na spisku nadzorov',
 'tog-watchlisthidepatrolled' => 'Skrij pregledana urejanja s spiska nadzorov',
 'tog-ccmeonemails' => 'Pošlji mi kopijo e-pošt, ki jih pošljem drugim uporabnikom',
 'tog-diffonly' => 'Ne prikaži vsebine strani pod primerjavo',
@@ -574,6 +574,8 @@ Podani razlog je bil »''$2''«.",
 'filereadonlyerror' => 'Ne morem spremeniti datoteke »$1«, ker je skladišče datotek »$2« v načinu, ki dovoljuje samo branje.
 
 Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
+'invalidtitle-knownnamespace' => 'Neveljaven naslov z imenskim prostorom »$2« in besedilom »$3«',
+'invalidtitle-unknownnamespace' => 'Neveljaven naslov z neznano številko imenskega prostora $1 in besedilom »$2«',
 
 # Virus scanner
 'virus-badscanner' => "Slaba konfiguracija: neznani virus skener: ''$1''",
@@ -608,7 +610,7 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod
 'createaccount' => 'Ustvari račun',
 'gotaccount' => 'Račun že imate? $1.',
 'gotaccountlink' => 'Prijavite se',
-'userlogin-resetlink' => 'Ste pozabili svoje podatke za prijavo?',
+'userlogin-resetlink' => 'Ste pozabili svoje prijavne podatke?',
 'createaccountmail' => 'Po e-pošti',
 'createaccountreason' => 'Razlog:',
 'badretype' => 'Gesli, ki ste ju vnesli, se ne ujemata.',
@@ -756,7 +758,7 @@ Začasno geslo: $2',
 'changeemail-oldemail' => 'Trenutni e-poštni naslov:',
 'changeemail-newemail' => 'Novi e-poštni naslov:',
 'changeemail-none' => '(noben)',
-'changeemail-submit' => 'Spremeni e-pošto',
+'changeemail-submit' => 'Spremeni e-naslov',
 'changeemail-cancel' => 'Prekliči',
 
 # Edit page toolbar
@@ -873,9 +875,9 @@ Najnovejši vnos v dnevniku blokad je prikazan spodaj:',
 Vedite, da .css in .js strani po meri uporabljajo naslov z malo začetnico, npr. {{ns:user}}:Blabla/vector.css namesto {{ns:user}}:Blabla/Vector.css.",
 'updated' => '(Posodobljeno)',
 'note' => "'''Opomba:'''",
-'previewnote' => "'''Pomnite, da je to le predogled strani.'''
+'previewnote' => "'''Pomnite, da stran le predogledujete.'''
 Vaših sprememb še nismo shranili!",
-'continue-editing' => 'Nadaljuj z urejanjem',
+'continue-editing' => 'Nadaljujte z urejanjem',
 'previewconflict' => 'V prikazanem predogledu je v zgornjem predelu urejanja navedeno besedilo, kakor se bo prikazalo, če ga boste shranili.',
 'session_fail_preview' => "'''Oprostite! Zaradi izgube podatkov o seji nam vašega urejanja žal ni uspelo obdelati.'''
 Prosimo, poskusite znova.
@@ -970,6 +972,12 @@ Naslednji argumenti so bili izpuščeni.",
 'parser-template-loop-warning' => 'V predlogi je bila odkrita zanka: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Prekoračena globina rekurzije predlog ($1)',
 'language-converter-depth-warning' => 'Prekoračena globina pretvorbe jezikov ($1)',
+'node-count-exceeded-category' => 'Strani s prekoračenim številom vozlišč',
+'node-count-exceeded-warning' => 'Stran je prekoračila število vozlišč',
+'expansion-depth-exceeded-category' => 'Strani s prekoračeno globino razširitve',
+'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)',
 
 # "Undo" feature
 'undo-success' => 'Urejanje ste razveljavili. Prosim, potrdite in nato shranite spodnje spremembe.',
@@ -1149,7 +1157,8 @@ Upoštevajte, da bo uporaba navigacijskih gumbov ponastavila ta stolpec.',
 
 # Diffs
 'history-title' => 'Zgodovina strani »$1«',
-'difference' => '(Primerjava redakcij)',
+'difference-title' => 'Razlika med redakcijama »$1«',
+'difference-title-multipage' => 'Razlika med stranema »$1« in »$2«',
 'difference-multipage' => '(Razlika med stranmi)',
 'lineno' => 'Vrstica $1:',
 'compareselectedversions' => 'Primerjaj izbrani redakciji',
@@ -1256,7 +1265,7 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo
 'prefs-watchlist-token' => 'Ključ spiska nadzorov:',
 'prefs-misc' => 'Druge nastavitve',
 'prefs-resetpass' => 'Spremeni geslo',
-'prefs-changeemail' => 'Spremeni e-pošto',
+'prefs-changeemail' => 'Spremeni e-poštni naslov',
 'prefs-setemail' => 'Nastavi e-poštni naslov',
 'prefs-email' => 'Možnosti e-pošte',
 'prefs-rendering' => 'Videz',
@@ -1271,10 +1280,10 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo
 'resultsperpage' => 'Prikazanih zadetkov na stran:',
 'stub-threshold' => 'Prag označevanja <a href="#" class="stub">škrbin</a> (v bajtih):',
 'stub-threshold-disabled' => 'Onemogočeno',
-'recentchangesdays' => 'Število dni prikazanih v zadnjih spremembah:',
+'recentchangesdays' => 'Število dni, prikazanih v zadnjih spremembah:',
 'recentchangesdays-max' => 'Največ $1 {{PLURAL:$1|dan|dneva|dnevi|dni}}',
 'recentchangescount' => 'Privzeto število prikazanih urejanj:',
-'prefs-help-recentchangescount' => 'To vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.',
+'prefs-help-recentchangescount' => 'Vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.',
 'prefs-help-watchlist-token' => 'Izpolnjevanje tega polja s skrivnim ključem bo ustvarilo vir RSS za vaš spisek nadzorov.
 Kdorkoli pozna ta ključ bo lahko bral vaš spisek nadzorov, zato izbrite varen in čim daljši ključ.
 Tukaj je naključno ustvarjena vrednost, ki jo lahko uporabite: $1',
@@ -1333,14 +1342,15 @@ Podatek bo javno prikazan.',
 'email' => 'E-pošta',
 'prefs-help-realname' => 'Pravo ime je neobvezno.
 Če se ga odločite navesti, bo uporabljeno za priznavanje vašega dela.',
-'prefs-help-email' => 'E-poštni naslov ni obvezen, vendar vam omogoča, da vam v primeru pozabljenega gesla pošljemo novo.',
-'prefs-help-email-others' => 'Poleg tega vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elektronsko pošto brez razkritja vaše istovetnosti.',
+'prefs-help-email' => 'E-poštni naslov ni obvezen, vendar omogoča, da vam v primeru pozabljenega gesla pošljemo novo.',
+'prefs-help-email-others' => 'Omogočite lahko tudi možnost, da vam lahko ostali uporabniki pošiljajo e-pošto prek vaše uporabniške ali pogovorne strani.
+Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo razkrili.',
 'prefs-help-email-required' => 'E-poštni naslov je obvezen.',
 'prefs-info' => 'Osnovni podatki',
 'prefs-i18n' => 'Internacionalizacija',
 'prefs-signature' => 'Podpis',
 'prefs-dateformat' => 'Zapis datuma',
-'prefs-timeoffset' => 'Čas za izravnavo',
+'prefs-timeoffset' => 'Časovni odmik',
 'prefs-advancedediting' => 'Napredne možnosti',
 'prefs-advancedrc' => 'Napredne možnosti',
 'prefs-advancedrendering' => 'Napredne možnosti',
@@ -1515,7 +1525,7 @@ Podatek bo javno prikazan.',
 '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',
-'recentchanges-label-unpatrolled' => 'To urejanje še ni bilo pregledano',
+'recentchanges-label-unpatrolled' => 'Urejanje še ni bilo pregledano',
 'rcnote' => "Prikazujem {{PLURAL:$1|zadnjo spremembo|zadnji '''$1''' spremembi|zadnje '''$1''' spremembe|zadnjih '''$1''' sprememb|zadnjih '''$1''' sprememb}} v {{PLURAL:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} '''$2''' {{PLURAL:$2|dnevu|dneh|dneh|dneh|dneh}}, od $5, $4.",
 'rcnotefrom' => "Navedene so spremembe od '''$2''' dalje (prikazujem jih do '''$1''').",
 'rclistfrom' => 'Prikaži spremembe od $1 naprej',
@@ -1529,7 +1539,7 @@ Podatek bo javno prikazan.',
 'diff' => 'prim',
 'hist' => 'zgod',
 'hide' => 'skrij',
-'show' => 'prikaži',
+'show' => 'Prikaži',
 'minoreditletter' => 'm',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
@@ -1567,11 +1577,11 @@ Strani iz [[Special:Watchlist|vašega spiska nadzorov]] so '''odebeljene'''.",
 
 Dnevnik brisanja in prestavitev za to stran sta navedena tukaj:",
 'uploadtext' => "Spodnji obrazec lahko uporabite za nalaganje datotek.
-Za ogled ali iskanje že naloženih pojdite na [[Special:FileList|seznam naloženih datotek]], ponovne naložitve so zapisane tudi v [[Special:Log/upload|dnevniku nalaganja]], izbrisi pa v [[Special:Log/delete|dnevniku brisanja]].
+Za ogled ali iskanje že naloženih pojdite na [[Special:FileList|seznam naloženih datotek]]; ponovna nalaganja so zabeležena tudi v [[Special:Log/upload|dnevniku nalaganja]], izbrisi pa v [[Special:Log/delete|dnevniku brisanja]].
 
-Datoteko lahko na želeno stran vključite z naslednjo skladnjo
+Datoteko lahko na želeno stran vključite na naslednje načine:
 * '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></tt>''' (polna velikost)
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg|200px|thumb|left|opisno besedilo]]</nowiki></tt>''' (slika pomanjšana na velikost 200px, uokvirjena, z levo poravnavo in opisom »opisno besedilo«)
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg|200px|thumb|left|opisno besedilo]]</nowiki></tt>''' (slika pomanjšana na 200 slikovnih pik širine, uokvirjena, z levo poravnavo in opisom »opisno besedilo«)
 * '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></tt>''' (neposredna povezava z datoteko)",
 'upload-permitted' => 'Dovoljene vrste datotek: $1.',
 'upload-preferred' => 'Priporočene vrste datotek: $1.',
@@ -1793,6 +1803,7 @@ Za optimalno varnost je img_auth.php onemogočen.',
 'http-curl-error' => 'Napaka pri doseganju URL: $1',
 'http-host-unreachable' => 'Ni mogoče doseči URL.',
 'http-bad-status' => 'Med zahtevo HTTP je prišlo do težave: $1 $2',
+'http-truncated-body' => 'Prejeli smo samo del telesa zahteve.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Ni možno doseči URL',
@@ -1850,10 +1861,10 @@ Na voljo je tudi [[Special:WhatLinksHere/$2|celotni seznam]].',
 'morelinkstoimage' => 'Preglejte [[Special:WhatLinksHere/$1|več povezav]] na to datoteko.',
 'linkstoimage-redirect' => '$1 (preusmeritev datoteke) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Sledeča datoteka je dvojnik|Sledeči datoteki sta dvojnika|Sledeče $1 datoteke so dvojniki|Sledečih $1 datotek so dvojniki}} te datoteke ([[Special:FileDuplicateSearch/$2|več podrobnosti]]):',
-'sharedupload' => 'Datoteka je del $1 in se lahko uporabi v drugih projektih.',
-'sharedupload-desc-there' => 'Ta datoteka je iz $1 in se lahko uporablja v drugih projektih.
+'sharedupload' => 'Datoteka je del projekta $1 in se lahko uporabi v drugih projektih.',
+'sharedupload-desc-there' => 'Datoteka je iz projekta $1 in se lahko uporablja v drugih projektih.
 Prosimo, oglejte si [$2 opisno stran datoteke] za dodatne informacije.',
-'sharedupload-desc-here' => 'Ta datoteka je iz $1 in se lahko uporablja v drugih projektih.
+'sharedupload-desc-here' => 'Datoteka je iz projekta $1 in se lahko uporablja v drugih projektih.
 Povzetek na njeni [$2 opisni strani datoteke] je prikazan spodaj.',
 'sharedupload-desc-edit' => 'Datoteka je z $1 in jo morda uporabljajo drugi projekti.
 Morda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datoteke].',
@@ -2196,7 +2207,7 @@ Morebitne spremembe te strani in pripadajoče pogovorne strani bodo navedene tuk
 'unwatchthispage' => 'Prenehaj opazovati stran',
 'notanarticle' => 'Ni članek',
 'notvisiblerev' => 'Redakcija je bila izbrisana',
-'watchnochange' => 'V prikazanem časovnem obdobju se ni spremenila nobena med nadzorovanimi stranmi.',
+'watchnochange' => 'V prikazanem časovnem obdobju ni nihče spremenil nadzorovanih strani.',
 'watchlist-details' => 'Spremljate $1 {{PLURAL:$1|stran|strani|strani|strani|strani}} (pogovorne strani niso vštete).',
 'wlheader-enotif' => '* Obveščanje po elektronski pošti je omogočeno.',
 'wlheader-showupdated' => "* Od vašega zadnjega ogleda spremenjene strani so prikazanje '''krepko'''.",
@@ -2872,8 +2883,8 @@ Prosimo, poskusite znova.',
 'tooltip-ca-delete' => 'Brišite stran',
 'tooltip-ca-undelete' => 'Obnovite pred izbrisom napravljena urejanja strani.',
 'tooltip-ca-move' => 'Preimenujte stran',
-'tooltip-ca-watch' => 'Dodajte stran na seznam nadzorov',
-'tooltip-ca-unwatch' => 'Odstranite stran s seznama nadzorov',
+'tooltip-ca-watch' => 'Dodajte stran na spisek nadzorov',
+'tooltip-ca-unwatch' => 'Odstranite stran s spiska nadzorov',
 'tooltip-search' => 'Preiščite wiki',
 'tooltip-search-go' => 'Pojdi na strani z natanko takim imenom, če obstaja',
 'tooltip-search-fulltext' => 'Najde vneseno besedilo po straneh',
index 5a04acd..24e9a02 100644 (file)
@@ -756,7 +756,6 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 
 # Diffs
 'history-title' => 'Versionsgeschichte vun „$1“',
-'difference' => '(Underschied zwischa Versiona)',
 'lineno' => 'Zeile $1:',
 'compareselectedversions' => 'Gewählte Versiona vergleichen',
 'editundo' => 'rieckgängig',
index 9cc4c69..952dcf3 100644 (file)
@@ -700,7 +700,6 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 
 # Diffs
 'history-title' => 'Taariikhda badalka "$1"',
-'difference' => '(Kala duwanaanshaha bedelyada)',
 'lineno' => 'Safka $1:',
 'compareselectedversions' => 'Is barbardhig bedelyada aad dooratay',
 'showhideselectedversions' => 'Itusi/qari bedelaadyada aad dooratay',
index 5008bb0..eecf85f 100644 (file)
@@ -1142,7 +1142,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 
 # Diffs
 'history-title' => 'Historiku i redaktimeve te "$1"',
-'difference' => '(Ndryshime midis versioneve)',
 'difference-multipage' => '(Ndryshimi midis faqeve)',
 'lineno' => 'Rreshti $1:',
 'compareselectedversions' => 'Krahasoni versionet e zgjedhura',
index cec0017..1863631 100644 (file)
@@ -999,7 +999,7 @@ $2
 'minoredit' => 'мања измена',
 'watchthis' => 'надгледај ову страницу',
 'savearticle' => 'Сачувај страницу',
-'preview' => 'Преглед',
+'preview' => 'Претпреглед',
 'showpreview' => 'Прикажи претпреглед',
 'showlivepreview' => 'Тренутни преглед',
 'showdiff' => 'Прикажи измене',
@@ -1096,6 +1096,7 @@ $2
 'note' => "'''Напомена:'''",
 'previewnote' => "'''Имајте у виду да је ово само преглед.'''
 Ваше измене још нису сачуване!",
+'continue-editing' => 'Настави уређивање',
 'previewconflict' => 'Овај преглед осликава како ће текст у текстуалном оквиру изгледати.',
 'session_fail_preview' => "'''Нисмо могли да обрадимо вашу измену због губитка података сесије.'''
 Покушајте поново.
@@ -1374,7 +1375,6 @@ $1",
 
 # Diffs
 'history-title' => 'Историја измена за „$1“',
-'difference' => '(разлике између измена)',
 'difference-multipage' => '(разлике између страница)',
 'lineno' => 'Ред $1:',
 'compareselectedversions' => 'Упореди изабране измене',
@@ -2514,7 +2514,7 @@ $UNWATCHURL
 Погледајте ''$2'' за више детаља.",
 'dellogpage' => 'Дневник брисања',
 'dellogpagetext' => 'Испод је списак последњих брисања.',
-'deletionlog' => 'иÑ\81Ñ\82оÑ\80иÑ\98а брисања',
+'deletionlog' => 'Ð\94невник брисања',
 'reverted' => 'Враћено на ранију измену',
 'deletecomment' => 'Разлог:',
 'deleteotherreason' => 'Други/додатни разлог:',
@@ -3159,7 +3159,7 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'Ажурирај списак',
 'tooltip-recreate' => 'Поново направите страницу иако је обрисана',
 'tooltip-upload' => 'Започните отпремање',
-'tooltip-rollback' => 'â\80\9eÐ\92Ñ\80аÑ\82иâ\80\9c Ð¿Ð¾Ð½Ð¸Ñ\88Ñ\82ава Ð¿Ð¾Ñ\81ледÑ\9aÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\81 Ñ\98едним ÐºÐ»Ð¸ÐºÐ¾Ð¼',
+'tooltip-rollback' => '„Врати“ поништава последњу измену ове странице једним кликом',
 'tooltip-undo' => 'Враћа ову измену и отвара образац за уређивање.',
 'tooltip-preferences-save' => 'Сачувај поставке',
 'tooltip-summary' => 'Унесите кратак опис',
@@ -3917,7 +3917,7 @@ $5
 
 # Delete conflict
 'deletedwhileediting' => "'''Упозорење''': ова страница је обрисана након што сте почели с уређивањем!",
-'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|је обрисао}} ову страницу након што сте почели да је уређујете, са следећим разлогом:
+'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете, са следећим разлогом:
 : ''$2''
 Потврдите да стварно желите да направите страницу.",
 'confirmrecreate-noreason' => 'Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.',
index e525dfd..aea9fb8 100644 (file)
@@ -1279,7 +1279,6 @@ Korišćenje navigacionih veza će poništiti ovu kolonu.',
 
 # Diffs
 'history-title' => 'Istorija izmena za „$1“',
-'difference' => '(razlike između izmena)',
 'difference-multipage' => '(razlike između stranica)',
 'lineno' => 'Red $1:',
 'compareselectedversions' => 'Uporedi izabrane izmene',
@@ -2414,7 +2413,7 @@ Potvrdite svoju nameru, da razumete posledice i da ovo radite u skladu s [[{{Med
 Pogledajte ''$2'' za više detalja.",
 'dellogpage' => 'Dnevnik brisanja',
 'dellogpagetext' => 'Ispod je spisak poslednjih brisanja.',
-'deletionlog' => 'istorija brisanja',
+'deletionlog' => 'Dnevnik brisanja',
 'reverted' => 'Vraćeno na raniju izmenu',
 'deletecomment' => 'Razlog:',
 'deleteotherreason' => 'Drugi/dodatni razlog:',
index 2fa2545..641ef8d 100644 (file)
@@ -629,7 +629,6 @@ A kan ben trowe efu dribi.
 
 # Diffs
 'history-title' => 'Historia fu "$1"',
-'difference' => '(A difrenti fu den kenki)',
 'lineno' => 'Lini $1:',
 'compareselectedversions' => 'Luku den difrenti fu den versi di teki',
 'editundo' => "drai pot' baka",
index 515b1b6..12b6848 100644 (file)
@@ -74,8 +74,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Antaal fon do beooboachtjende Benutsere anwiese',
 'tog-oldsig' => 'Foarbekiek fon ju aktuälle Signatuur:',
 'tog-fancysig' => 'Unnerskrift as Wikitext behonnelje (sunner automatiske Ferlinkenge)',
-'tog-externaleditor' => 'Externen Editor as Standoard benutsje (bloot foar Experte, der mouten spezielle Ienstaalengen ap dän oaine Computer moaked wäide.
-[//www.mediawiki.org/wiki/Manual:External_editors Moor Information hiertou.])',
+'tog-externaleditor' => 'Externen Editor as Standoard benutsje (bloot foar Experte, der mouten spezielle Ienstaalengen ap dän oaine Computer moaked wäide. [//www.mediawiki.org/wiki/Manual:External_editors Moor Information hiertou.])',
 'tog-externaldiff' => 'Extern Diff-Program as Standoard benutsje (bloot foar Experte, der mouten spezielle Ienstaalengen ap dän oaine Computer moaked wäide.
  [//www.mediawiki.org/wiki/Manual:External_editors Wiedere Informatione hiertou.])',
 'tog-showjumplinks' => '"Wikselje tou"-Links muugelk moakje',
@@ -913,7 +912,6 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa
 
 # Diffs
 'history-title' => 'Versionsgeskichte fon "$1"',
-'difference' => '(Unnerskeed twiske Versione)',
 'difference-multipage' => '(Unnerskeed twiske Sieden)',
 'lineno' => 'Riege $1:',
 'compareselectedversions' => 'Wäälde Versione ferglieke',
index 501f5b8..9d77317 100644 (file)
@@ -1024,7 +1024,6 @@ Pastikeun yén ieu parobahan bisa miara jujutan kaca sagemblengna.',
 
 # Diffs
 'history-title' => 'Jujutan révisi "$1"',
-'difference' => '(Béda antarrévisi)',
 'difference-multipage' => '(béda antarkaca)',
 'lineno' => 'Baris ka-$1:',
 'compareselectedversions' => 'Bandingkeun vérsi nu dipilih',
index d189278..19d1cd3 100644 (file)
@@ -703,6 +703,8 @@ Den uppgivna anledningen är "\'\'$2\'\'".',
 'filereadonlyerror' => 'Det går inte att ändra filen "$1", eftersom fildatabasen "$2" är i skrivskyddat läge.
 
 Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => 'Ogiltig titel med namnrymden "$2" och texten "$3"',
+'invalidtitle-unknownnamespace' => 'Ogiltig titel med okänt namnrymdsnummer $1 och texten "$2"',
 
 # Virus scanner
 'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
@@ -985,6 +987,7 @@ Den har inte sparats än!'''",
 'note' => "'''Obs!'''",
 'previewnote' => "'''Kom ihåg att detta bara är en förhandsvisning.'''
 Dina ändringar har ännu inte sparats!",
+'continue-editing' => 'Fortsätt redigera',
 'previewconflict' => 'Den här förhandsvisningen är resultatet av den
 redigerbara texten ovanför,
 så som det kommer att se ut om du väljer att spara.',
@@ -1081,6 +1084,10 @@ Dessa parametrar har uteslutits.',
 'parser-template-loop-warning' => 'Mall-loop upptäckt: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Gräns för mallrekursionsdjup överskriden ($1)',
 'language-converter-depth-warning' => 'Gräns för språkkonverteringsdjup överskriden ($1)',
+'node-count-exceeded-category' => 'Sidor där antal nodar har överskrids',
+'node-count-exceeded-warning' => 'Sidan har överskridit antalet nodar',
+'expansion-depth-exceeded-category' => 'Sidor där expansionsdjupet överskrids',
+'expansion-depth-exceeded-warning' => 'Sidan överskrider expansionsdjupet',
 
 # "Undo" feature
 'undo-success' => 'Redigeringen kan göras ogjord.
@@ -1260,7 +1267,8 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.',
 
 # Diffs
 'history-title' => 'Versionshistorik för "$1"',
-'difference' => '(Skillnad mellan versioner)',
+'difference-title' => 'Skillnader mellan revideringar av "$1"',
+'difference-title-multipage' => 'Skillnader mellan sidorna "$1" och "$2"',
 'difference-multipage' => '(Skillnad mellan sidor)',
 'lineno' => 'Rad $1:',
 'compareselectedversions' => 'Jämför angivna versioner',
@@ -3771,6 +3779,7 @@ Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Publi
 'version-software' => 'Installerad programvara',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Version',
+'version-entrypoints' => 'StartpunktsURLer',
 'version-entrypoints-header-entrypoint' => 'Ingångspunkt',
 'version-entrypoints-header-url' => 'URL',
 
index 484b493..6b54e12 100644 (file)
@@ -1031,7 +1031,6 @@ Tazama [[Special:BlockList|orodha ya uzuio wa IP]] kuona orodha ya zuio zilizopo
 
 # Diffs
 'history-title' => 'Historia ya mapitio ya "$1"',
-'difference' => '(Tofauti baina ya mapitio)',
 'difference-multipage' => '(Tofauti kati ya kurasa)',
 'lineno' => 'Mstari $1:',
 'compareselectedversions' => 'Linganisha mapitio mawili uliyochagua',
index fd0783d..3c7fb48 100644 (file)
@@ -411,7 +411,7 @@ Dej pozůr, co na ńykerych zajtach přeglůndarka može dali pokozywać co jež
 'welcomecreation' => '== Witej, $1! ==
 Uotwarli my sam lo Ćebje kůnto.
 Ńy zapomńij poštalować [[Special:Preferences|preferencyji lo {{GRAMMAR:D.lp|{{SITENAME}}}}]].',
-'yourname' => 'Mjano užytkowńika:',
+'yourname' => 'Mjano użytkowńika:',
 'yourpassword' => 'Hasuo:',
 'yourpasswordagain' => 'Naszkryflej ausdruk zaś',
 'remembermypassword' => 'Pamjyntej můj ausdruk na tym kůmputrze (nojdalij bez $1 {{PLURAL:$1|dźyń|dńůw}})',
@@ -420,14 +420,14 @@ Uotwarli my sam lo Ćebje kůnto.
 'externaldberror' => 'Je jaki feler we zewnyntřnyj baźe autentyfikacyjnyj, abo ńy moš uprawńyń potřebnych do aktualizacyji zewnyntřnego kůnta.',
 'login' => 'Zaloguj śe',
 'nav-login-createaccount' => 'Logowańy / tworzińy kůnta',
-'loginprompt' => 'Muśiš mjeć zouůnčůne cookies coby můc śe sam zalůgować.',
-'userlogin' => 'Lůgowańy / Twořyńy kůnta',
+'loginprompt' => 'Muśisz mjeć zołůnczůne cookies coby můc śe sam zalůgować.',
+'userlogin' => 'Lůgowańy / Tworzyńy kůnta',
 'userloginnocreate' => 'Zalůguj śe',
 'logout' => 'Wyloguj',
 'userlogout' => 'Uodloguj śe',
 'notloggedin' => 'Ńy ježeś zalůgowany',
 'nologin' => "Ńy moš kůnta? '''$1'''.",
-'nologinlink' => 'Twůř kůnto',
+'nologinlink' => 'Twůrz kůnto',
 'createaccount' => 'Zouůž nowe kůnto',
 'gotaccount' => "Mosz już kůnto? '''$1'''.",
 'gotaccountlink' => 'Naloguj śe',
@@ -438,16 +438,16 @@ Uotwarli my sam lo Ćebje kůnto.
 'userexists' => 'Mjano użytkowńika, kere żeś wybroł, je zajynte. Wybjer, prosza, inksze mjano.',
 'loginerror' => 'Feler při logůwańu',
 'createaccounterror' => 'Ńy możno stworzić konta $1',
-'nocookiesnew' => 'Kůnto užytkowÅ\84ika zostouo utwoÅ\99ůne, nale Å\84y ježeÅ\9b zalůgowany. {{SITENAME}} užywo Ä\87osteÄ\8dek do logůwaÅ\84o. MoÅ¡ wyuůnÄ\8done Ä\87osteÄ\8dka. Coby Å\9be zalůgowaÄ\87, uodymknij Ä\87osteÄ\8dka a podej mjano a hasuo swojigo kůnta.',
+'nocookiesnew' => 'Kůnto użytkowÅ\84ika zostoÅ\82o utworzůne, nale Å\84y jeżeÅ\9b zalůgowany. {{SITENAME}} używo Ä\87osteczek do logůwaÅ\84o. Mosz wyÅ\82ůnczone Ä\87osteczka. Coby Å\9be zalůgowaÄ\87, uodymknij Ä\87osteczka a podej mjano a hasÅ\82o swojigo kůnta.',
 'nocookieslogin' => '{{SITENAME}} užywo ćosteček do lůgowańo užytkowńikůw. Moš zablokowano jejich uobsuůga. Sprůbuj zaś jak zauůnčyš uobsuůga ćosteček.',
 'nocookiesfornew' => 'Konto sprowjorza ńy uostoło stworzone. Sprawdź, cze mosz uodymkńynto obsługe cookies.',
-'noname' => 'To Å\84y je půprowne mjano užytkowńika.',
+'noname' => 'To Å\84y je půprowne mjano użytkowńika.',
 'loginsuccesstitle' => 'Lůgowańy udane',
 'loginsuccess' => "'''Terozki ježeś zalůgowany do {{SITENAME}} jako \"\$1\".'''",
 'nosuchuser' => 'Ńy ma sam użytkowńika uo mjańe "$1".
 Sprowdź szrajbůng, abo [[Special:UserLogin/signup|utwůrz nowe kůnto]].',
 'nosuchusershort' => 'Ńy mo sam užytkowńika uo mjańe "$1".',
-'nouserspecified' => 'Podej mjano užytkowńika.',
+'nouserspecified' => 'Podej mjano użytkowńika.',
 'login-userblocked' => 'Tyn sprowjorz ma zawrzite sprowjyńa. Ńy możno sie zalgować.',
 'wrongpassword' => 'Hasuo kere žeś naškryflou je felerne. Poprůbůj naškryflać je ješče roz.',
 'wrongpasswordempty' => 'Hasuo kere žeś podou je puste. Naškryflej je ješče roz.',
@@ -733,7 +733,7 @@ Powinno być myńi jak $2 {{PLURAL:$2|wywouańy|wywouańo|wywouań}}, a terozki
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Ńy idźe utwořić kůnta',
-'cantcreateaccount-text' => "Twořyńy kůnta s tygo adresu IP ('''$1''') zostouo zawarte bez užytkowńika [[User:$3|$3]].
+'cantcreateaccount-text' => "Tworzyńy kůnta s tygo adresu IP ('''$1''') zostoło zawarte bez użytkowńika [[User:$3|$3]].
 
 Skuli: ''$2''",
 
@@ -792,7 +792,7 @@ Inkśi admińistratorzi {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp
 'revdelete-hide-image' => 'Schrůń zawartość plika',
 'revdelete-hide-name' => 'Schrůń akcyjo a cyl',
 'revdelete-hide-comment' => 'Schrůń kůmyntoř sprowjyńo',
-'revdelete-hide-user' => 'SchrůÅ\84 mjano užytkowńika/adres IP',
+'revdelete-hide-user' => 'SchrůÅ\84 mjano użytkowńika/adres IP',
 'revdelete-hide-restricted' => 'Schrůń informacyje zarůwno przed admińistratorůma jak i przed inkszymi',
 'revdelete-radio-same' => '(byz pomjyń)',
 'revdelete-radio-set' => 'Ja',
@@ -861,7 +861,6 @@ $1',
 
 # Diffs
 'history-title' => 'Historyjo sprowjyń "$1"',
-'difference' => '(Růžńice mjyndzy škryflańami)',
 'difference-multipage' => '(Porůwnańje zajt)',
 'lineno' => 'Lińijo $1:',
 'compareselectedversions' => 'zrůwnej uobrane wersyje',
@@ -1007,7 +1006,7 @@ $1',
 'default' => 'důmyślńy',
 'prefs-files' => 'Pliki',
 'youremail' => 'E-brif:',
-'username' => 'Mjano užytkowńika:',
+'username' => 'Mjano użytkowńika:',
 'uid' => 'ID užytkowńika:',
 'prefs-memberingroups' => 'Naležy do {{PLURAL:$1|grupy|grup:}}',
 'yourrealname' => 'Prawdźiwe mjano',
@@ -1078,7 +1077,7 @@ $1',
 'right-move' => 'Přećepane zajty',
 'right-move-subpages' => 'Přećep zajty wroz s jejich podzajtůma',
 'right-move-rootuserpages' => 'Překludzańy zajtůw uod užytkowńikůw',
-'right-suppressredirect' => 'Ńy twůř překerowańo ze starygo mjana jak přećepuješ zajta',
+'right-suppressredirect' => 'Ńy twůrz przekerowańo ze starygo mjana jak przećepujesz zajta',
 'right-upload' => 'Wćepane pliki',
 'right-reupload' => 'Nadpisuj pliki kere sam juž sům wćepane',
 'right-reupload-own' => 'Nadpisuj plik wćepany sam bez tygo somygo užytkowńika',
@@ -1100,7 +1099,7 @@ $1',
 'right-suppressionlog' => 'Pokož prywatne lůgi',
 'right-block' => 'Zawjyrańy sprowjorzům możebnośći edytowańo',
 'right-blockemail' => 'Zablokuj užytkowńikowi wysyuańy e-brifůw',
-'right-hideuser' => 'Zablokuj mjano užytkowÅ\84ika i schrůÅ\84 to pÅ\99ed publiÄ\8dnym dostympym',
+'right-hideuser' => 'Zablokuj mjano użytkowÅ\84ika i schrůÅ\84 to przed publicznym dostympym',
 'right-ipblock-exempt' => 'Uobejdź zawarća uod sprowjyń do IP, autozawarća i zawarća zakresůw',
 'right-proxyunbannable' => 'Uobejdź autůmatyčne zawarća uod sprowjyń do proxy',
 'right-protect' => 'Zmjyń poźůmy zawarć i sprowjej zawarte zajty',
@@ -1483,7 +1482,7 @@ Zajta uznawano je za ujydnoznačńajůnco kej zawiyro šablůn uokreślůny we [
 'usereditcount' => '$1 {{PLURAL:$1|sprowjyńe|sprowjyńa|sprowjyń}}',
 'usercreated' => '{{GENDER:$3:Utworzono}} $1 uo $2',
 'newpages' => 'Nowe zajty',
-'newpages-username' => 'Mjano užytkowńika:',
+'newpages-username' => 'Mjano użytkowńika:',
 'ancientpages' => 'Nojstarše artikle',
 'move' => 'Przećep',
 'movethispage' => 'Přećepej ta zajta',
@@ -1854,7 +1853,7 @@ $1',
 'sp-contributions-talk' => '↓ dyskusyjo',
 'sp-contributions-userrights' => 'Zařůndzańy prowami užytkowńikůw',
 'sp-contributions-search' => 'Šnupej za wkuodym',
-'sp-contributions-username' => 'Adres IP abo mjano užytkowńika',
+'sp-contributions-username' => 'Adres IP abo mjano użytkowńika',
 'sp-contributions-toponly' => 'Ukoż jyno ůostanie wersyje',
 'sp-contributions-submit' => 'Šnupej',
 
@@ -1883,18 +1882,18 @@ $1',
 'blockiptext' => 'Tyn formulař suužy do zawjerańo sprowjyń spod uokreślůnygo adresu IP abo kůnkretnymu užytkowńikowi.
 Zawjerać noležy jydyńy po to, by zapobjec wandalizmům, zgodńy s [[{{MediaWiki:Policy-url}}|přijyntymi zasadami]].
 Podej powůd (np. umješčajůnc mjana zajtůw, na kerych dopuščůno śe wandalizmu).',
-'ipadressorusername' => 'Adres IP abo mjano užytkowńika',
+'ipadressorusername' => 'Adres IP abo mjano użytkowńika',
 'ipbexpiry' => 'Wygaso:',
 'ipbreason' => 'Čymu:',
 'ipbreasonotherlist' => 'Inkszy powůd',
-'ipbreason-dropdown' => '*Nojčynstše powody zawjerańo uod sprawjyń
-** Ataki na inkšych užytkowńikůw
-** Narušyńy praw autorskych
-** Å\83ydozwolůne mjano užytkowńika
-** Upen proxy/Tor
+'ipbreason-dropdown' => '*Nojczynstsze powody zawjerańo uod sprawjyń
+** Ataki na inkszych użytkowńikůw
+** Naruszyńy praw autorskych
+** Å\83ydozwolůne mjano użytkowńika
+** Open proxy/Tor
 ** Spamowańy
 ** Ůsuwańy treśći zajtůw
-** Wprowadzańy foywych informacyji
+** Wprowadzańy fołszywych informacyji
 ** Wulgaryzmy
 ** Wypisywańy guůpot na zajtach',
 'ipbcreateaccount' => 'Ńy dozwůl utwožyć kůnta',
@@ -1905,7 +1904,7 @@ Podej powůd (np. umješčajůnc mjana zajtůw, na kerych dopuščůno śe wanda
 'ipboptions' => '2 godźiny:2 hours,1 dźyń:1 day,3 dńi:3 days,1 tydźyń:1 week,2 tydńe:2 weeks,1 mjeśůnc:1 month,3 mjeśůnce:3 months,6 mjeśůncůw:6 months,1 rok:1 year,nawdy:infinite',
 'ipbotheroption' => 'inkšy',
 'ipbotherreason' => 'Inkšy powůd:',
-'ipbhidename' => 'SchrůÅ\84 mjano užytkowÅ\84ika/adres IP w rejeÅ\99e zawarÄ\87, na liÅ\9bÄ\87e aktywnych zawarÄ\87 i liÅ\9bÄ\87e užytkowńikůw',
+'ipbhidename' => 'SchrůÅ\84 mjano użytkowÅ\84ika/adres IP w rejerze zawarÄ\87, na liÅ\9bÄ\87e aktywnych zawarÄ\87 i liÅ\9bÄ\87e użytkowńikůw',
 'ipbwatchuser' => 'Dowej pozůr na zajta uosobisto i zajta godki tygo užytkowńika',
 'ipb-change-block' => 'Zmjyń sztalowańa zawarća uod sprowjyń',
 'badipaddress' => 'Felerny adres IP',
index ceefcc5..75341e8 100644 (file)
@@ -995,7 +995,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" பக்கத்தின் திருத்த வரலாறு',
-'difference' => '(திருத்தங்களுக்கிடையான வேறுபாடு)',
 'difference-multipage' => 'பக்கங்களுக்கு இடையேயான வேறுபாடு',
 'lineno' => 'வரிசை $1:',
 'compareselectedversions' => 'தெரிவு செய்யப்பட்ட பதிப்புக்களை ஒப்பிடவும்',
index 15cbc6f..3f8b82b 100644 (file)
@@ -553,7 +553,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '"$1" ಪುಟೊತ ಆವೃತ್ತಿ ಇತಿಹಾಸ',
-'difference' => '(ಆವೃತ್ತಿಲೆದ ನಡುತ ವ್ಯತ್ಯಾಸ)',
 'lineno' => '$1 ನೇ ಸಾಲ್:',
 'compareselectedversions' => 'ಆಯ್ಕೆ ಮಲ್ತಿನ ಆವೃತ್ತಿಲೆನ್ ಹೊಂದಾಣಿಕೆ ಮಲ್ತ್ ತೂಲೆ',
 'editundo' => 'ದುಂಬುದಲೆಕ',
index 07d026f..9c73a79 100644 (file)
@@ -1060,7 +1060,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" కూర్పుల చరితం',
-'difference' => '(సంచికల మధ్య తేడా)',
 'difference-multipage' => '(పేజీల మధ్య తేడా)',
 'lineno' => 'పంక్తి $1:',
 'compareselectedversions' => 'ఎంచుకున్న సంచికలను పోల్చిచూడు',
index 919b4c7..de424eb 100644 (file)
@@ -798,7 +798,6 @@ $1',
 
 # Diffs
 'history-title' => 'Таърихчаи вироишҳои "$1"',
-'difference' => '(Фарқияти байни нусхаҳо)',
 'lineno' => 'Сатри $1:',
 'compareselectedversions' => 'Нусхаҳои интихобшударо муқоиса кунед',
 'editundo' => 'ботил',
index 913d6ae..6a83f8b 100644 (file)
@@ -689,7 +689,6 @@ Itminon hosil kuned, ki in taƣjir davomnokiji ta'rixiji sahifaro nigoh dorad.",
 
 # Diffs
 'history-title' => 'Ta\'rixcai viroişhoi "$1"',
-'difference' => '(Farqijati bajni nusxaho)',
 'lineno' => 'Satri $1:',
 'compareselectedversions' => 'Nusxahoi intixobşudaro muqoisa kuned',
 'editundo' => 'botil',
index f26f2f0..33f4812 100644 (file)
@@ -830,6 +830,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 ในบางครั้งปัญหานี้จะเกิดขึ้นถ้าคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
 'edit_form_incomplete' => "'''บางส่วนของแบบฟอร์มแก้ไขไม่ได้ติดต่อเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังคงอยู่และลองใหม่อีกครั้ง'''",
 'editing' => 'กำลังแก้ไข $1',
+'creating' => 'สร้างหน้า $1',
 'editingsection' => 'กำลังแก้ไข $1 (เฉพาะส่วน)',
 'editingcomment' => 'กำลังแก้ไข $1 (หัวข้อใหม่)',
 'editconflict' => 'แก้ไขชนกัน: $1',
@@ -951,7 +952,7 @@ $1 เป็นผู้ดำเนินการบล็อกในคร
 [[Special:Search|ค้นหาในวิกินี้]] สำหรับหน้าอื่นที่อาจเกี่ยวข้อง',
 
 # Revision deletion
-'rev-deleted-comment' => '(à¸\84วามà¹\80หà¹\87à¸\99ถูกลบออก)',
+'rev-deleted-comment' => '(à¸\84ำอà¸\98ิà¸\9aายอยà¹\88าà¸\87ยà¹\88อถูกลบออก)',
 'rev-deleted-user' => '(ชื่อผู้ใช้ถูกลบออก)',
 'rev-deleted-event' => '(หน้าที่ใส่เข้ามาถูกลบออก)',
 'rev-deleted-user-contribs' => '[ชื่อผู้ใช้หรือหมายเลขไอพีถูกลบแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]',
@@ -1081,7 +1082,6 @@ $1",
 
 # Diffs
 'history-title' => 'ประวัติการแก้ไขหน้า "$1"',
-'difference' => '(ความแตกต่างระหว่างรุ่นปรับปรุง)',
 'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่างๆ)',
 'lineno' => 'แถว $1:',
 'compareselectedversions' => 'เปรียบเทียบสองรุ่นที่เลือก',
index 63941d5..2e3b780 100644 (file)
@@ -12,6 +12,7 @@
  * @author Flrn
  * @author Hanberke
  * @author Kaganer
+ * @author Reedy
  * @author Runningfridgesrule
  * @author The Evil IP address
  */
@@ -298,7 +299,7 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 
 'ok' => 'OK',
 'retrievedfrom' => '"$1" adresinden alyndy.',
-'youhavenewmessages' => 'Size <u>$1</u> bar. ($2)',
+'youhavenewmessages' => 'Size $1 bar. ($2)',
 'newmessageslink' => 'täze habarlaşyk',
 'newmessagesdifflink' => 'soňky üýtgeşme',
 'youhavenewmessagesmulti' => 'Size $1-de täze habarlaşyk bar.',
@@ -679,10 +680,10 @@ Sahypalary howpsuz ýagdaýda rdaktirlemegiňiz şeýle aýlawly ýol bar: ASCII
 'editingold' => "'''Duýdyryş: Sahypanyň möwriti geçen bir wersiýasyny redaktirleýärsiňiz.
 Eger ony ýazdyraýsaňyz, onda şu wersiýadan bäri edilen ähli özgerdişler ýok bolar.'''",
 'yourdiff' => 'Aratapawutlar',
-'copyrightwarning' => "'''Üns beriň:''' {{SITENAME}} saýtyna edilen ähli goşantlar <i>$2</i> ygtyýarnamasyna laýyklykdadyr (jikme-jiklikler üçin serediň:  $1).
+'copyrightwarning' => "'''Üns beriň:''' {{SITENAME}} saýtyna edilen ähli goşantlar $2 ygtyýarnamasyna laýyklykdadyr (jikme-jiklikler üçin serediň:  $1).
 Eden goşandyňyzyň başga ulanyjylar tarapyndan gypynç etmezden redaktirlenmegini ýa-da erkin hem-de çäklendirilmedik tertipde başga ýerlere paýlanmagyny islemeýän bolsaňyz, goşant etmäň.<br />
 Mundan hem başga, siz bu ýere goşant goşmak bilen bu goşandyň özüňiz tarapyndan ýazylandygyna, ýa-da jemgyýetçilige açyk bir çeşmeden ýa-da başga bir erkin çeşmeden göçürilip alnandygyna güwä geçýärsiňiz.<br />
-'''<center>AWTORLYK HUKUGY BOÝUNÇA GORALÝAN HIÇ BIR IŞI BU ÝERE BIRUGSAT GOŞMAŇ!</center>'''",
+'''AWTORLYK HUKUGY BOÝUNÇA GORALÝAN HIÇ BIR IŞI BU ÝERE BIRUGSAT GOŞMAŇ!'''",
 'copyrightwarning2' => "Üns beriň,  {{SITENAME}} saýtyna edilen ähli goşantlaryň başga ulanyjylar tarapyndan redaktirlenmegi, düzedilmegi ýa-da aýyrylmagy mümkindir.
 Eger-de işiňiziň gypynç etmezden redaktirlenmegini islemeýän bolsaňyz, onda ony goşant etmäň.<br />
 Şeýle-de, siz ony özüňiziň ýazandygyňyza ýa-da jemgyýetçilige açyk bir çeşmeden ýa-da bolmasa şoňa meňzeş bir erkin çeşmeden göçürip alandygyňyza güwä geçýärsiňiz (jikme-jiklikler üçin serediň: $1).
@@ -925,7 +926,6 @@ Nawigasiýa çykgytlaryny ulanmaklygyň bu sütüni başky ýagdaýyna getirjekd
 
 # Diffs
 'history-title' => '"$1" sahypasynyň geçmişi',
-'difference' => '(Wersiýalaryň aratapawudy)',
 'difference-multipage' => '(Sahypalaryň arasyndaky tapawut)',
 'lineno' => 'Setir $1:',
 'compareselectedversions' => 'Saýlanan wersiýalary deňeşdir',
index 4c4d860..f8afeaa 100644 (file)
@@ -1085,7 +1085,6 @@ Tiyakin na ang pagbabago ay makapagpapanatili ng pagkakatuluy-tuloy ng pahinang
 
 # Diffs
 'history-title' => 'Kasaysayan ng pagbabago ng "$1"',
-'difference' => '(Pagkakaiba sa pagitan ng mga pagbabago)',
 'difference-multipage' => '(Pagkakaiba sa pagitan ng mga pahina)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'Paghambingin ang mga napiling bersyon',
index f3aa01f..ae8577e 100644 (file)
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Линки жинтоно ријә быкәш:',
-'tog-justify' => 'Ð\9cÓ\99Ñ\82ни Ð±Ó\99 Ñ\81Ó\99һиÑ\84Ó\99 ÐºÓ\99но Ð±Ó\99Ñ\80абәр быкә.',
+'tog-justify' => 'Ð\9cÓ\99Ñ\82ни Ð±Ó\99 Ñ\81Ó\99һиÑ\84Ó\99 ÐºÓ\99но Ð±Ó\99Ñ\80обәр быкә.',
 'tog-hideminor' => 'Охоминә дәгишонәдә гәдә дәгишон нишо мәдә.',
-'tog-hidepatrolled' => 'Ð\88оÑ\85лÓ\99миÑ\88 Ð±Ñ\8bÓ\99 Ð´Ó\99Ñ\98иÑ\88иклиÑ\98он Ð½Ñ\8bÑ\88Ñ\83 Ð¼Ó\99дә.',
+'tog-hidepatrolled' => 'Ð\9dÑ\83Ñ\98Ó\99 Ð´Ó\99гиÑ\88он Ñ\81иÑ\98оһиÑ\98Ó\99дÓ\99 Ð´Ó\99винÓ\99 ÐºÐ°Ñ\80дÓ\99 Ð±Ñ\8bÓ\99 Ð´Ó\99гиÑ\88он Ð½Ð¸Ñ\88о Ð¼Ó\99кә.',
 'tog-newpageshidepatrolled' => 'Нијони огәтеј ноғо доә быә сәһифон бә тожә сәһифон сијоһиәдә',
-'tog-usenewrc' => 'Ð\9eÑ\85оминÓ\99 Ð´Ó\99йиÑ\88иклийон Ñ\82Ó\99кмил Ð²ÐµÑ\80Ñ\81иÑ\98Ó\99',
+'tog-usenewrc' => 'Ð\9eÑ\85оминÓ\99 Ð´Ó\99гиÑ\88он Ó\99н Ñ\87окÓ\99 Ñ\81иÑ\98оһи Ð¾ÐºÐ¾ Ð´Ð¾Ñ\98 (гÓ\99Ñ\80Ó\99ке JavaScript)',
 'tog-numberheadings' => 'Автоматик башлығон нумрәләмиш быкә',
 'tog-showtoc' => 'Мындәриҹоти сијоһи нишо быдә (3 сәрловһәсә веј быә сәһифон)',
 'tog-watchcreations' => 'Зијод кардеј чымы офәјә быә сәһифон бә ноғо доә сијоһи',
@@ -32,7 +32,7 @@ $messages = array(
 'monday' => 'Дышанбә',
 'tuesday' => 'Сешанбә',
 'wednesday' => 'Чошанбә',
-'thursday' => 'Әјнә шәв',
+'thursday' => 'Ҹымә шәв',
 'friday' => 'Әjнә',
 'saturday' => 'Шанбә',
 'sun' => 'Иша',
@@ -87,12 +87,12 @@ $messages = array(
 'category-empty' => "''Ын категоријә бы дәғиғәдә тәјлије.''",
 'hidden-categories' => '{{PLURAL:$1|Нијони категоријә|Нијони категоријон}}',
 'hidden-category-category' => 'Нијони категоријон',
-'category-subcat-count' => '{{PLURAL:$2|Ым катеријә әнчәх жинтонә жинә категоријонку ибарәте.|Ҹәми $2 категоријонку {{PLURAL:$1|жинә категоријә|$1 жинә категоријә}} нишо доә быә.}}',
+'category-subcat-count' => '{{PLURAL:$2|Ым категоријә әнчәх жинтонә жинә категоријонку ибарәте.|Ҹәми $2 категоријонку {{PLURAL:$1|жинә категоријә|$1 жинә категоријә}} нишо доә быә.}}',
 'category-article-count' => '{{PLURAL:$2|Бы категоријәдә әнҹәх иглә сәһифәје.|Ҹәми $2 сәһифонку нишо доә быә {{PLURAL:$1|сәһифә|$1 сәһифә}} бы категоријәдә.}}',
 'category-article-count-limited' => 'Ын категоријәдә {{PLURAL:$1|$1 сәһифә|}} һесте.',
 'category-file-count' => '{{PLURAL:$2|Бы категоријәдә әнҹәх иглә фајле.|Ҹәми $2 фајлонку нишо доә быә {{PLURAL:$1|фајл|$1 фајл}} бы категоријәдә.}}',
 'category-file-count-limited' => 'Ын категоријәдә  {{PLURAL:$1|$1 фајл}} һесте.',
-'listingcontinuesabbrev' => '(дәвом карде)',
+'listingcontinuesabbrev' => '(дәвом)',
 'index-category' => 'Индекс быә сәһифон.',
 'noindex-category' => 'Индекс нибыә саһифон',
 
@@ -200,8 +200,8 @@ $messages = array(
 'edithelp' => 'Арајиш бо редактә кардеј',
 'edithelppage' => 'Help:Арајиш бо сәрост кардеј',
 'helppage' => 'Help:Мындәриҹот',
-'mainpage' => 'Јолә сәһифә',
-'mainpage-description' => 'Јолә сәһифә',
+'mainpage' => 'Әсосә сәһифә',
+'mainpage-description' => 'Әсосә сәһифә',
 'policy-url' => 'Project:Ғајдон',
 'portal' => 'Ҹәмјәт',
 'portal-url' => 'Project:Ҹәмјәти портал',
@@ -225,6 +225,8 @@ $messages = array(
 'toc' => 'Мындәриҹот',
 'showtoc' => 'нишо дој',
 'hidetoc' => 'нијо кардеј',
+'collapsible-collapse' => 'Бурмә кардеј',
+'collapsible-expand' => 'Һовуж кардеј',
 'thisisdeleted' => 'Дијә кардеј јаанки бәрпо кардеј $1?',
 'viewdeleted' => 'Дијә кардеј $1?',
 'restorelink' => '{{PLURAL:$1|иглә рәдд кардә быә дәгиши|$1 рәдд кардә быә дәгишон}}',
@@ -255,6 +257,7 @@ $messages = array(
 'internalerror_info' => 'Дахили хәта: $1',
 'fileappenderrorread' => 'Әлавон гејд карде быәдә"$1" һанде ныбе.',
 'formerror' => 'Хәта: Че формә мәлумотон әкс карде ғерри мумкуне.',
+'cannotdelete-title' => 'Сәһифә әбыни рәдд кардеј "$1"',
 'badtitle' => 'Роныдоә ном',
 'badtitletext' => 'Ахтар кардә быә сәһифә ном сәһве, тәјлије, јаанки сәрост доә быәнин мијонзывонон ја мијонвики номон.
 Бе бәзне ки кали рәмзон сәрловһәдә око дој әбыни.',
@@ -299,7 +302,9 @@ $messages = array(
 # Special:ChangeEmail
 'changeemail' => 'Е-номә унвони дәгиш кардеј',
 'changeemail-newemail' => 'Е-номә тожә унвон:',
+'changeemail-none' => '(ни)',
 'changeemail-submit' => 'Е-номә дәгиш кардеј',
+'changeemail-cancel' => 'Ләғв карде',
 
 # Edit page toolbar
 'bold_sample' => 'Нимәтындә шрифт',
@@ -409,7 +414,6 @@ $messages = array(
 
 # Diffs
 'history-title' => 'Дәгишон тарых "$1"',
-'difference' => '(Рәвојәтон мијонәдә фәрғ)',
 'lineno' => 'Сәтыр $1:',
 'compareselectedversions' => 'Сәчын кардә быә рәвојәтон мығојисә кардеј.',
 'editundo' => 'ләғв кардеј',
@@ -446,7 +450,7 @@ $messages = array(
 'showingresultsheader' => "{{PLURAL:$5|Нәтиҹә'''$1''' из '''$3'''|Нәтиҹон '''$1 — $2''' чы '''$3'''}} бо '''$4'''",
 'search-nonefound' => 'Бә шымә хәбәсә ујғун омә сәкыштә пәјдо ныбе.',
 'powersearch-field' => 'Нәве',
-'powersearch-toggleall' => 'Һаммај',
+'powersearch-toggleall' => 'Һәммәј',
 
 # Preferences page
 'preferences' => 'Чичсә печыније',
@@ -705,9 +709,9 @@ $messages = array(
 'tooltip-search' => 'Нәве {{SITENAME}}',
 'tooltip-search-go' => 'Гирәм һесте дырыст бәнә бы номи сәһифә бәврә дәвардеј',
 'tooltip-search-fulltext' => 'Сәһифон пәјдо кардеј де ын мәтни',
-'tooltip-p-logo' => 'Дәвардеј бә јолә сәһифә',
-'tooltip-n-mainpage' => 'Дәвардеј бә јолә сәһифә',
-'tooltip-n-mainpage-description' => 'Дәвардеј бә јолә сәһифә',
+'tooltip-p-logo' => 'Дәвардеј бә әсосә сәһифә',
+'tooltip-n-mainpage' => 'Дәвардеј бә әсосә сәһифә',
+'tooltip-n-mainpage-description' => 'Дәвардеј бә әсосә сәһифә',
 'tooltip-n-portal' => 'Нахшә барәдә, чич шымә базнејон  ыјо кардеј, конҹо чич һесте',
 'tooltip-n-currentevents' => 'Есәтнә һодисон сијоһи',
 'tooltip-n-recentchanges' => 'Охонә дәгишон сијоһи',
index b59f23d..0b9588d 100644 (file)
@@ -425,7 +425,6 @@ Ko e ʻuhinga loka ko e $1 ia.",
 'revertmerge' => 'Vete ʻa e fakataha',
 
 # Diffs
-'difference' => '(Kehekehe he ongo paaki)',
 'lineno' => 'Laini hono $1:',
 'compareselectedversions' => 'Fakatatau ongo paaki fili',
 'editundo' => 'vete',
index 46da045..b1c53ba 100644 (file)
@@ -32,486 +32,486 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline'               => 'Putim lain ananit long ol link:',
-'tog-justify'                 => "Soim ol paragraf i pulmapim sipes long lephan i go long raithan (''justify'')",
-'tog-hideminor'               => 'Noken soim ol liklik senis insait long ol nupela senis',
-'tog-hidepatrolled'           => 'Noken soim ol lukluk senis insait long ol nupela senis',
-'tog-newpageshidepatrolled'   => 'Noken soim ol lukluk senis insait long ol nupela pes',
-'tog-extendwatchlist'         => 'Larim lukautbuk i go longpela long soim olgeta senis',
-'tog-usenewrc'                => 'Moa beta stail bilong nupela senis (i nidim JavaScript)',
-'tog-numberheadings'          => 'Putim ol namba i go long wanwan hap bilong pes',
-'tog-showtoolbar'             => 'Soim ol liklik link long wokim senis kwiktaim (i nidim JavaScript)',
-'tog-editondblclick'          => 'Senisim pes taim yu paitim tupela taim kwiktaim (i nidim JavaScript)',
-'tog-editsection'             => 'Soim ol [senisim] link long wanwan hap bilong ol pes',
+'tog-underline' => 'Putim lain ananit long ol link:',
+'tog-justify' => "Soim ol paragraf i pulmapim sipes long lephan i go long raithan (''justify'')",
+'tog-hideminor' => 'Noken soim ol liklik senis insait long ol nupela senis',
+'tog-hidepatrolled' => 'Noken soim ol lukluk senis insait long ol nupela senis',
+'tog-newpageshidepatrolled' => 'Noken soim ol lukluk senis insait long ol nupela pes',
+'tog-extendwatchlist' => 'Larim lukautbuk i go longpela long soim olgeta senis',
+'tog-usenewrc' => 'Moa beta stail bilong nupela senis (i nidim JavaScript)',
+'tog-numberheadings' => 'Putim ol namba i go long wanwan hap bilong pes',
+'tog-showtoolbar' => 'Soim ol liklik link long wokim senis kwiktaim (i nidim JavaScript)',
+'tog-editondblclick' => 'Senisim pes taim yu paitim tupela taim kwiktaim (i nidim JavaScript)',
+'tog-editsection' => 'Soim ol [senisim] link long wanwan hap bilong ol pes',
 'tog-editsectiononrightclick' => 'Senisim ol hap bilong pes taim yu paitim nem bilong hap<br />wantaim raithan-klik (i nidim Javascript)',
-'tog-showtoc'                 => 'Soim ol nem bilong hap insait long liklik bokis, taim igat antap long 3 hap long pes',
-'tog-rememberpassword'        => 'Holim nem bilong yusa bilong mi long dispela kompiuta (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations'          => 'Putim ol nupela pes mi wokim long lukautbuk',
-'tog-watchdefault'            => 'Putim ol pes mi senisim long lukautbuk bilong mi',
-'tog-watchmoves'              => 'Putim ol pes mi surikim long lukautbuk bilong mi',
-'tog-watchdeletion'           => 'Putim ol pes mi rausim long lukautbuk bilong mi',
-'tog-minordefault'            => 'Makim ol senis mi wokim olsem ol i liklik, sapos mi no makim',
-'tog-previewontop'            => 'Soim pes mi senisim (pastaim long raitim) antap long bokis bilong wokim senis',
-'tog-previewonfirst'          => 'Soim pes mi senisim pastaim long raitim',
-'tog-enotifwatchlistpages'    => 'Salim imel (e-mail) long mi taim wanpela pes mi lukautim i senis',
-'tog-shownumberswatching'     => 'Soim hamas yusa i lukautim pes',
-'tog-uselivepreview'          => 'Soim ol senis kwiktaim taim mi wokim (i nidim Javascript)',
-'tog-watchlisthideown'        => 'Haitim ol senis mi wokim long lukautbuk bilong mi',
-'tog-watchlisthidebots'       => 'Haitim ol senis ol bot i wokim long lukautbuk bilong mi',
-'tog-watchlisthideminor'      => 'Haitim ol liklik senis long lukautbuk bilong mi',
-'tog-showhiddencats'          => 'Soim ol grup hait',
+'tog-showtoc' => 'Soim ol nem bilong hap insait long liklik bokis, taim igat antap long 3 hap long pes',
+'tog-rememberpassword' => 'Holim nem bilong yusa bilong mi long dispela kompiuta (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'Putim ol nupela pes mi wokim long lukautbuk',
+'tog-watchdefault' => 'Putim ol pes mi senisim long lukautbuk bilong mi',
+'tog-watchmoves' => 'Putim ol pes mi surikim long lukautbuk bilong mi',
+'tog-watchdeletion' => 'Putim ol pes mi rausim long lukautbuk bilong mi',
+'tog-minordefault' => 'Makim ol senis mi wokim olsem ol i liklik, sapos mi no makim',
+'tog-previewontop' => 'Soim pes mi senisim (pastaim long raitim) antap long bokis bilong wokim senis',
+'tog-previewonfirst' => 'Soim pes mi senisim pastaim long raitim',
+'tog-enotifwatchlistpages' => 'Salim imel (e-mail) long mi taim wanpela pes mi lukautim i senis',
+'tog-shownumberswatching' => 'Soim hamas yusa i lukautim pes',
+'tog-uselivepreview' => 'Soim ol senis kwiktaim taim mi wokim (i nidim Javascript)',
+'tog-watchlisthideown' => 'Haitim ol senis mi wokim long lukautbuk bilong mi',
+'tog-watchlisthidebots' => 'Haitim ol senis ol bot i wokim long lukautbuk bilong mi',
+'tog-watchlisthideminor' => 'Haitim ol liklik senis long lukautbuk bilong mi',
+'tog-showhiddencats' => 'Soim ol grup hait',
 
 'underline-always' => 'Olgeta taim',
-'underline-never'  => 'No gat',
+'underline-never' => 'No gat',
 
 # Font style option in Special:Preferences
 'editfont-monospace' => 'Monospaced rait',
 'editfont-sansserif' => 'Sans-serif rait',
-'editfont-serif'     => 'Serif rait',
+'editfont-serif' => 'Serif rait',
 
 # Dates
-'sunday'        => 'Sande',
-'monday'        => 'Mande',
-'tuesday'       => 'Tunde',
-'wednesday'     => 'Trinde',
-'thursday'      => 'Fonde',
-'friday'        => 'Fraide',
-'saturday'      => 'Sarere',
-'sun'           => 'San',
-'mon'           => 'Man',
-'tue'           => 'Tun',
-'wed'           => 'Tri',
-'thu'           => 'Fon',
-'fri'           => 'Frai',
-'sat'           => 'Sar',
-'january'       => 'Janueri',
-'february'      => 'Februeri',
-'march'         => 'Mas',
-'april'         => 'Epril',
-'may_long'      => 'Me',
-'june'          => 'Jun',
-'july'          => 'Julai',
-'august'        => 'Ogas',
-'september'     => 'Septemba',
-'october'       => 'Oktoba',
-'november'      => 'Novemba',
-'december'      => 'Disemba',
-'january-gen'   => 'Janueri',
-'february-gen'  => 'Februeri',
-'march-gen'     => 'Mas',
-'april-gen'     => 'Epril',
-'may-gen'       => 'Me',
-'june-gen'      => 'Jun',
-'july-gen'      => 'Julai',
-'august-gen'    => 'Ogas',
+'sunday' => 'Sande',
+'monday' => 'Mande',
+'tuesday' => 'Tunde',
+'wednesday' => 'Trinde',
+'thursday' => 'Fonde',
+'friday' => 'Fraide',
+'saturday' => 'Sarere',
+'sun' => 'San',
+'mon' => 'Man',
+'tue' => 'Tun',
+'wed' => 'Tri',
+'thu' => 'Fon',
+'fri' => 'Frai',
+'sat' => 'Sar',
+'january' => 'Janueri',
+'february' => 'Februeri',
+'march' => 'Mas',
+'april' => 'Epril',
+'may_long' => 'Me',
+'june' => 'Jun',
+'july' => 'Julai',
+'august' => 'Ogas',
+'september' => 'Septemba',
+'october' => 'Oktoba',
+'november' => 'Novemba',
+'december' => 'Disemba',
+'january-gen' => 'Janueri',
+'february-gen' => 'Februeri',
+'march-gen' => 'Mas',
+'april-gen' => 'Epril',
+'may-gen' => 'Me',
+'june-gen' => 'Jun',
+'july-gen' => 'Julai',
+'august-gen' => 'Ogas',
 'september-gen' => 'Septemba',
-'october-gen'   => 'Oktoba',
-'november-gen'  => 'Novemba',
-'december-gen'  => 'Disemba',
-'jan'           => 'Jan',
-'feb'           => 'Feb',
-'mar'           => 'Mas',
-'apr'           => 'Epr',
-'may'           => 'Me',
-'jun'           => 'Jun',
-'jul'           => 'Jul',
-'aug'           => 'Oga',
-'sep'           => 'Sep',
-'oct'           => 'Okt',
-'nov'           => 'Nov',
-'dec'           => 'Dis',
+'october-gen' => 'Oktoba',
+'november-gen' => 'Novemba',
+'december-gen' => 'Disemba',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mas',
+'apr' => 'Epr',
+'may' => 'Me',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Oga',
+'sep' => 'Sep',
+'oct' => 'Okt',
+'nov' => 'Nov',
+'dec' => 'Dis',
 
 # Categories related messages
-'pagecategories'           => '{{PLURAL:$1|Grup|Ol grup}}',
-'category_header'          => 'Ol pes insait long grup "$1"',
-'subcategories'            => 'Ol grup insait long grup',
-'category-media-header'    => 'Ol media (olsem piksa) insait long grup "$1"',
-'category-empty'           => "''Dispela grup i no gat wanpela pes o media (olsem piksa) insait long en nau.''",
-'hidden-categories'        => '{{PLURAL:$1|Grup hait|Ol grup hait}}',
+'pagecategories' => '{{PLURAL:$1|Grup|Ol grup}}',
+'category_header' => 'Ol pes insait long grup "$1"',
+'subcategories' => 'Ol grup insait long grup',
+'category-media-header' => 'Ol media (olsem piksa) insait long grup "$1"',
+'category-empty' => "''Dispela grup i no gat wanpela pes o media (olsem piksa) insait long en nau.''",
+'hidden-categories' => '{{PLURAL:$1|Grup hait|Ol grup hait}}',
 'hidden-category-category' => 'Ol grup hait',
-'listingcontinuesabbrev'   => 'moa',
+'listingcontinuesabbrev' => 'moa',
 
-'about'         => 'Long',
-'article'       => 'Stori',
-'newwindow'     => '(bai kamap long nupela windo)',
-'cancel'        => 'Toromwe senis',
+'about' => 'Long',
+'article' => 'Stori',
+'newwindow' => '(bai kamap long nupela windo)',
+'cancel' => 'Toromwe senis',
 'moredotdotdot' => 'Moa...',
-'mypage'        => 'Pes bilong mi',
-'mytalk'        => 'Toktok bilong mi',
-'anontalk'      => 'Toktok bilong dispela IP',
-'navigation'    => 'Ol bikpela pes',
-'and'           => '&#32;na',
+'mypage' => 'Pes bilong mi',
+'mytalk' => 'Toktok bilong mi',
+'anontalk' => 'Toktok bilong dispela IP',
+'navigation' => 'Ol bikpela pes',
+'and' => '&#32;na',
 
 # Cologne Blue skin
-'qbfind'         => 'Painim',
-'qbbrowse'       => 'Lukim',
-'qbedit'         => 'Senisim',
-'qbpageoptions'  => 'Dispela pes',
-'qbmyoptions'    => 'Ol pes bilong mi',
+'qbfind' => 'Painim',
+'qbbrowse' => 'Lukim',
+'qbedit' => 'Senisim',
+'qbpageoptions' => 'Dispela pes',
+'qbmyoptions' => 'Ol pes bilong mi',
 'qbspecialpages' => 'Ol sipesol pes',
 
 # Vector skin
-'vector-action-delete'   => 'Rausim',
-'vector-action-move'     => 'Surikim',
-'vector-action-protect'  => 'Tambuim',
-'vector-view-create'     => 'Kirapim',
-'vector-view-edit'       => 'Senisim',
-'vector-view-history'    => 'Ol senis',
-'vector-view-view'       => 'Rit',
+'vector-action-delete' => 'Rausim',
+'vector-action-move' => 'Surikim',
+'vector-action-protect' => 'Tambuim',
+'vector-view-create' => 'Kirapim',
+'vector-view-edit' => 'Senisim',
+'vector-view-history' => 'Ol senis',
+'vector-view-view' => 'Rit',
 'vector-view-viewsource' => 'Lukim as tok',
 
-'errorpagetitle'   => 'Samting i kranki',
-'returnto'         => 'Go bek long $1',
-'tagline'          => 'Long {{SITENAME}}',
-'help'             => 'Halivim mi',
-'search'           => 'Painim',
-'searchbutton'     => 'Painim',
-'go'               => 'Go',
-'searcharticle'    => 'Go',
-'history'          => 'Ol senis long dispela pes',
-'history_short'    => 'Ol senis',
-'print'            => 'Prinim',
-'edit'             => 'Senisim',
-'create'           => 'Kirapim',
-'editthispage'     => 'Senisim dispela pes',
+'errorpagetitle' => 'Samting i kranki',
+'returnto' => 'Go bek long $1',
+'tagline' => 'Long {{SITENAME}}',
+'help' => 'Halivim mi',
+'search' => 'Painim',
+'searchbutton' => 'Painim',
+'go' => 'Go',
+'searcharticle' => 'Go',
+'history' => 'Ol senis long dispela pes',
+'history_short' => 'Ol senis',
+'print' => 'Prinim',
+'edit' => 'Senisim',
+'create' => 'Kirapim',
+'editthispage' => 'Senisim dispela pes',
 'create-this-page' => 'Kirapim dispela pes',
-'delete'           => 'Rausim',
-'deletethispage'   => 'Rausim dispela pes',
-'protect'          => 'Tambuim',
-'protect_change'   => 'senisim',
-'newpage'          => 'Nupela pes',
-'talkpage'         => 'Toktok bilong dispela pes',
+'delete' => 'Rausim',
+'deletethispage' => 'Rausim dispela pes',
+'protect' => 'Tambuim',
+'protect_change' => 'senisim',
+'newpage' => 'Nupela pes',
+'talkpage' => 'Toktok bilong dispela pes',
 'talkpagelinktext' => 'Toktok',
-'specialpage'      => 'Sipesol pes',
-'personaltools'    => 'Ol pes bilong mi',
-'postcomment'      => 'Nupela hap bilong pes',
-'talk'             => 'Toktok',
-'views'            => 'Ol lukluk',
-'toolbox'          => 'Sipesol bokis',
-'userpage'         => 'Lukim pes bilong yusa',
-'projectpage'      => 'Lukim pes bilong projek',
-'imagepage'        => 'Lukim pes bilong fail',
-'mediawikipage'    => 'Lukim pes bilong toksave',
-'templatepage'     => 'Lukim templet pes',
-'viewhelppage'     => 'Lukim pes long halivim',
-'categorypage'     => 'Lukim pes bilong grup',
-'viewtalkpage'     => 'Lukim toktok',
-'otherlanguages'   => 'Long ol narapela tokples',
-'redirectedfrom'   => '(Nupela rot i pinis long $1)',
-'redirectpagesub'  => 'Nupela rot',
-'protectedpage'    => 'Pes i tambu',
-'jumpto'           => 'Go stret long:',
+'specialpage' => 'Sipesol pes',
+'personaltools' => 'Ol pes bilong mi',
+'postcomment' => 'Nupela hap bilong pes',
+'talk' => 'Toktok',
+'views' => 'Ol lukluk',
+'toolbox' => 'Sipesol bokis',
+'userpage' => 'Lukim pes bilong yusa',
+'projectpage' => 'Lukim pes bilong projek',
+'imagepage' => 'Lukim pes bilong fail',
+'mediawikipage' => 'Lukim pes bilong toksave',
+'templatepage' => 'Lukim templet pes',
+'viewhelppage' => 'Lukim pes long halivim',
+'categorypage' => 'Lukim pes bilong grup',
+'viewtalkpage' => 'Lukim toktok',
+'otherlanguages' => 'Long ol narapela tokples',
+'redirectedfrom' => '(Nupela rot i pinis long $1)',
+'redirectpagesub' => 'Nupela rot',
+'protectedpage' => 'Pes i tambu',
+'jumpto' => 'Go stret long:',
 'jumptonavigation' => 'ol bikpela pes',
-'jumptosearch'     => 'painim',
+'jumptosearch' => 'painim',
 
 # 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'            => 'Long {{SITENAME}}',
-'aboutpage'            => 'Project:Long',
-'copyrightpage'        => '{{ns:project}}:Ol laisens',
-'currentevents'        => 'Karen afeas',
-'currentevents-url'    => 'Project:Karen afeas',
-'disclaimers'          => 'Ol toksave bilong lo',
-'disclaimerpage'       => 'Project:Ol tok warn long lo',
-'edithelp'             => 'Halivim mi long pasin bilong wokim senis',
-'edithelppage'         => 'Help:Senisim',
-'mainpage'             => 'Fran Pes',
+'aboutsite' => 'Long {{SITENAME}}',
+'aboutpage' => 'Project:Long',
+'copyrightpage' => '{{ns:project}}:Ol laisens',
+'currentevents' => 'Karen afeas',
+'currentevents-url' => 'Project:Karen afeas',
+'disclaimers' => 'Ol toksave bilong lo',
+'disclaimerpage' => 'Project:Ol tok warn long lo',
+'edithelp' => 'Halivim mi long pasin bilong wokim senis',
+'edithelppage' => 'Help:Senisim',
+'mainpage' => 'Fran Pes',
 'mainpage-description' => 'Fran Pes',
-'portal'               => 'Bung ples',
-'portal-url'           => 'Project:Bung ples',
-'privacy'              => 'Polisi long praivet',
-'privacypage'          => 'Project:Polisi long praivet',
+'portal' => 'Bung ples',
+'portal-url' => 'Project:Bung ples',
+'privacy' => 'Polisi long praivet',
+'privacypage' => 'Project:Polisi long praivet',
 
 'badaccess' => 'Kranki long tok orait.',
 
-'ok'                 => 'OK',
-'retrievedfrom'      => 'Ikam long "$1"',
+'ok' => 'OK',
+'retrievedfrom' => 'Ikam long "$1"',
 'youhavenewmessages' => '$1 i kam ($2).',
-'newmessageslink'    => 'Ol nupela toksave',
-'editsection'        => 'senisim',
-'editold'            => 'senisim',
-'viewsourceold'      => 'lukim as tok',
-'editlink'           => 'senisim',
-'viewsourcelink'     => 'lukim as tok',
-'editsectionhint'    => 'Senisim seksen: $1',
-'showtoc'            => 'soim',
-'hidetoc'            => 'haitim',
-'viewdeleted'        => 'Lukim $1?',
-'restorelink'        => '{{PLURAL:$1|wanpela senis i raus pinis|$1 senis i raus pinis}}',
-'feedlinks'          => 'Fid:',
-'site-rss-feed'      => '$1 RSS toksave',
-'site-atom-feed'     => '$1 Atom fid',
-'page-rss-feed'      => '"$1" RSS fid',
-'page-atom-feed'     => '"$1" Atom fid',
-'red-link-title'     => '$1 (pes i nogat stap)',
+'newmessageslink' => 'Ol nupela toksave',
+'editsection' => 'senisim',
+'editold' => 'senisim',
+'viewsourceold' => 'lukim as tok',
+'editlink' => 'senisim',
+'viewsourcelink' => 'lukim as tok',
+'editsectionhint' => 'Senisim seksen: $1',
+'showtoc' => 'soim',
+'hidetoc' => 'haitim',
+'viewdeleted' => 'Lukim $1?',
+'restorelink' => '{{PLURAL:$1|wanpela senis i raus pinis|$1 senis i raus pinis}}',
+'feedlinks' => 'Fid:',
+'site-rss-feed' => '$1 RSS toksave',
+'site-atom-feed' => '$1 Atom fid',
+'page-rss-feed' => '"$1" RSS fid',
+'page-atom-feed' => '"$1" Atom fid',
+'red-link-title' => '$1 (pes i nogat stap)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Stori',
-'nstab-user'      => 'Pes bilong yusa',
-'nstab-media'     => 'Media pes',
-'nstab-special'   => 'Sipesol pes',
-'nstab-project'   => 'Pes bilong projek',
-'nstab-image'     => 'Fail',
+'nstab-main' => 'Stori',
+'nstab-user' => 'Pes bilong yusa',
+'nstab-media' => 'Media pes',
+'nstab-special' => 'Sipesol pes',
+'nstab-project' => 'Pes bilong projek',
+'nstab-image' => 'Fail',
 'nstab-mediawiki' => 'Toksave',
-'nstab-template'  => 'Templet',
-'nstab-help'      => 'Pes bilong halivim',
-'nstab-category'  => 'Grup',
+'nstab-template' => 'Templet',
+'nstab-help' => 'Pes bilong halivim',
+'nstab-category' => 'Grup',
 
 # General errors
-'error'      => 'Birua',
-'badtitle'   => 'Nem bilong pes i no stret',
+'error' => 'Birua',
+'badtitle' => 'Nem bilong pes i no stret',
 'viewsource' => 'Lukim as tok',
 
 # Login and logout pages
-'yourname'            => 'Yusanem:',
-'yourpassword'        => 'Paswot:',
-'logout'              => 'Logaut',
-'userlogout'          => 'Logaut',
-'gotaccountlink'      => 'Log in',
-'createaccountmail'   => 'Long e-mel',
+'yourname' => 'Yusanem:',
+'yourpassword' => 'Paswot:',
+'logout' => 'Logaut',
+'userlogout' => 'Logaut',
+'gotaccountlink' => 'Log in',
+'createaccountmail' => 'Long e-mel',
 'createaccountreason' => 'As bilong en:',
-'mailmypassword'      => 'E-mel nupela paswot',
-'loginlanguagelabel'  => 'Tokples: $1',
+'mailmypassword' => 'E-mel nupela paswot',
+'loginlanguagelabel' => 'Tokples: $1',
 
 # Edit page toolbar
-'link_sample'    => 'Link taitel',
+'link_sample' => 'Link taitel',
 'extlink_sample' => 'http://www.example.com link taitel',
-'media_tip'      => 'Link bilong fail',
+'media_tip' => 'Link bilong fail',
 
 # Edit pages
-'summary'                => 'Liklik toksave bilong senis:',
-'subject'                => 'Nem bilong pes (o hap bilong pes):',
-'minoredit'              => 'Dispela emi liklik senis',
-'watchthis'              => 'Putim dispela pes long lukautbuk bilong mi',
-'savearticle'            => 'Raitim pes',
-'preview'                => 'Pes wantaim senis (pastaim long raitim)',
-'showpreview'            => 'Soim pes wantaim senis (pastaim long raitim)',
-'showlivepreview'        => 'Soim senis kwiktaim taim mi wokim (pastaim long raitim)',
-'showdiff'               => 'Soim ol senis',
-'missingcommenttext'     => 'Plis raitim tingting daunbilo.',
-'summary-preview'        => 'Toksave bilong senis bai luk olsem:',
-'subject-preview'        => 'Nem bilong pes (o hap bilong pes) bai olsem:',
-'blockedtitle'           => 'Yusa i pas',
-'blockednoreason'        => 'Nogat as bilong en',
-'newarticle'             => '(Nupela)',
-'updated'                => '(i nupela)',
-'editing'                => 'Senisim $1',
-'editingsection'         => 'Senisim $1 (seksen)',
-'editconflict'           => 'Kranki long senisim: $1',
-'yourtext'               => 'Raitim bilong yu',
-'yourdiff'               => 'Ol hap i senis',
-'copyrightwarning'       => "Toksave: olgeta senis yu wokim long long {{SITENAME}} bai stap ananit long tokorait $2 (lukim $1 long painimaut moa long dispela). Sapos yu no laikim narapela manmeri long senisim olgeta, o salim dispela i go long ol kainkain hap, noken raitim long hia.<br />
+'summary' => 'Liklik toksave bilong senis:',
+'subject' => 'Nem bilong pes (o hap bilong pes):',
+'minoredit' => 'Dispela emi liklik senis',
+'watchthis' => 'Putim dispela pes long lukautbuk bilong mi',
+'savearticle' => 'Raitim pes',
+'preview' => 'Pes wantaim senis (pastaim long raitim)',
+'showpreview' => 'Soim pes wantaim senis (pastaim long raitim)',
+'showlivepreview' => 'Soim senis kwiktaim taim mi wokim (pastaim long raitim)',
+'showdiff' => 'Soim ol senis',
+'missingcommenttext' => 'Plis raitim tingting daunbilo.',
+'summary-preview' => 'Toksave bilong senis bai luk olsem:',
+'subject-preview' => 'Nem bilong pes (o hap bilong pes) bai olsem:',
+'blockedtitle' => 'Yusa i pas',
+'blockednoreason' => 'Nogat as bilong en',
+'newarticle' => '(Nupela)',
+'updated' => '(i nupela)',
+'editing' => 'Senisim $1',
+'editingsection' => 'Senisim $1 (seksen)',
+'editconflict' => 'Kranki long senisim: $1',
+'yourtext' => 'Raitim bilong yu',
+'yourdiff' => 'Ol hap i senis',
+'copyrightwarning' => "Toksave: olgeta senis yu wokim long long {{SITENAME}} bai stap ananit long tokorait $2 (lukim $1 long painimaut moa long dispela). Sapos yu no laikim narapela manmeri long senisim olgeta, o salim dispela i go long ol kainkain hap, noken raitim long hia.<br />
 Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap we lo i tok olsem i orait long kisim (Tok Inglis: <i>public domain</i>).
 '''YU NOKEN RAITIM WANPELA SAMTING SAPOS YU NO WOKIM YU YET, O YU KISIM TOKORAIT LONG PUTIM LONG HIA!'''",
-'copyrightwarning2'      => "Toksave: olgeta senis yu wokim long long {{SITENAME}} bai inap senis o raus long han bilong ol narapela manmeri. Sapos yu no laikim narapela manmeri long senisim olgeta samting yu raitim, o salim dispela i go long ol kainkain hap, noken raitim long hia.<br />
+'copyrightwarning2' => "Toksave: olgeta senis yu wokim long long {{SITENAME}} bai inap senis o raus long han bilong ol narapela manmeri. Sapos yu no laikim narapela manmeri long senisim olgeta samting yu raitim, o salim dispela i go long ol kainkain hap, noken raitim long hia.<br />
 Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap we lo i tok olsem i orait long kisim (Tok Inglis: <i>public domain</i>). Lukim $1 long painimaut moa long dispela.<br />
 '''YU NOKEN RAITIM WANPELA SAMTING IGAT COPYRIGHT LONG EN (NARAPELA MANMERI I RAITIM)!'''",
-'templatesused'          => '{{PLURAL:$1|Templet|Ol templet}} dispela pes i yusim:',
-'templatesusedpreview'   => '{{PLURAL:$1|Templet|Ol templet}} dispela pes i yusim (bihain long dispela senis):',
-'template-protected'     => '(itambu)',
+'templatesused' => '{{PLURAL:$1|Templet|Ol templet}} dispela pes i yusim:',
+'templatesusedpreview' => '{{PLURAL:$1|Templet|Ol templet}} dispela pes i yusim (bihain long dispela senis):',
+'template-protected' => '(itambu)',
 'template-semiprotected' => '(i hap tambu)',
-'hiddencategories'       => 'Dispela pes emi stap insait long {{PLURAL:$1|wanpela grup hait|$1 grup hait}}:',
-'log-fulllog'            => 'Lukim olgeta ripot',
+'hiddencategories' => 'Dispela pes emi stap insait long {{PLURAL:$1|wanpela grup hait|$1 grup hait}}:',
+'log-fulllog' => 'Lukim olgeta ripot',
 
 # History pages
-'viewpagelogs'     => 'Lukim ol ripot bilong dispela pes',
+'viewpagelogs' => 'Lukim ol ripot bilong dispela pes',
 'previousrevision' => '← Moa olpela',
-'nextrevision'     => 'Moa yangpela →',
-'cur'              => 'nau',
-'histfirst'        => 'Nambawan',
-'histlast'         => 'Bilong nau',
+'nextrevision' => 'Moa yangpela →',
+'cur' => 'nau',
+'histfirst' => 'Nambawan',
+'histlast' => 'Bilong nau',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 long $2',
 
 # Revision deletion
-'rev-delundel'               => 'soim/haitim',
+'rev-delundel' => 'soim/haitim',
 'revdelete-show-file-submit' => 'Yes',
-'revdelete-radio-set'        => 'Yes',
-'revdelete-radio-unset'      => 'Nogat',
-'pagehist'                   => 'Ol senis bilong pes',
+'revdelete-radio-set' => 'Yes',
+'revdelete-radio-unset' => 'Nogat',
+'pagehist' => 'Ol senis bilong pes',
 
 # History merging
 'mergehistory-from' => 'As pes:',
 
 # Diffs
-'lineno'   => 'Lain $1:',
+'lineno' => 'Lain $1:',
 'editundo' => 'go bek',
 
 # Search results
-'searchresults'                  => 'Ol painim',
-'searchresults-title'            => 'Ol painim long "$1"',
-'searchresulttext'               => 'Long moa infomesen bilong painim {{SITENAME}}, lukim [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitleinvalid'          => "Yu painim '''$1'''",
-'viewprevnext'                   => 'Lukim ($1 {{int:pipe-separator}} $2) ($3)',
-'searchprofile-images'           => 'Media',
-'searchprofile-everything'       => 'Olgeta',
+'searchresults' => 'Ol painim',
+'searchresults-title' => 'Ol painim long "$1"',
+'searchresulttext' => 'Long moa infomesen bilong painim {{SITENAME}}, lukim [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitleinvalid' => "Yu painim '''$1'''",
+'viewprevnext' => 'Lukim ($1 {{int:pipe-separator}} $2) ($3)',
+'searchprofile-images' => 'Media',
+'searchprofile-everything' => 'Olgeta',
 'searchprofile-articles-tooltip' => 'Painim long $1',
-'searchprofile-project-tooltip'  => 'Painim long $1',
-'search-result-size'             => '$1 ({{PLURAL:$2|1 wot|ol $2 wot}})',
-'search-redirect'                => '(nupela rot long $1)',
-'search-section'                 => '(seksen $1)',
-'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',
-'powersearch-ns'                 => 'Painim long ol nem',
-'powersearch-redir'              => 'Soim ol nupela rot',
-'powersearch-field'              => 'Painim long',
-'powersearch-toggleall'          => 'Olgeta',
-'powersearch-togglenone'         => 'I nogat wanpela',
+'searchprofile-project-tooltip' => 'Painim long $1',
+'search-result-size' => '$1 ({{PLURAL:$2|1 wot|ol $2 wot}})',
+'search-redirect' => '(nupela rot long $1)',
+'search-section' => '(seksen $1)',
+'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',
+'powersearch-ns' => 'Painim long ol nem',
+'powersearch-redir' => 'Soim ol nupela rot',
+'powersearch-field' => 'Painim long',
+'powersearch-toggleall' => 'Olgeta',
+'powersearch-togglenone' => 'I nogat wanpela',
 
 # Quickbar
 'qbsettings-none' => 'I nogat wanpela',
 
 # Preferences page
-'preferences'               => 'Ol laik',
-'mypreferences'             => 'Ol laik bilong mi',
-'prefs-edits'               => 'Hamas senis:',
-'changepassword'            => 'Senis paswot',
-'prefs-skin'                => 'Skin',
-'skin-preview'              => 'pes mi senisim, pastaim long raitim',
-'datedefault'               => 'Nogat laik',
-'prefs-rc'                  => 'Nupela senis',
-'prefs-watchlist'           => 'Lukautbuk',
-'prefs-watchlist-days-max'  => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'preferences' => 'Ol laik',
+'mypreferences' => 'Ol laik bilong mi',
+'prefs-edits' => 'Hamas senis:',
+'changepassword' => 'Senis paswot',
+'prefs-skin' => 'Skin',
+'skin-preview' => 'pes mi senisim, pastaim long raitim',
+'datedefault' => 'Nogat laik',
+'prefs-rc' => 'Nupela senis',
+'prefs-watchlist' => 'Lukautbuk',
+'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
 'prefs-watchlist-edits-max' => 'No moa long: 1000',
-'prefs-resetpass'           => 'Senis paswot',
-'saveprefs'                 => 'Holim long tingting',
-'prefs-editing'             => 'Senisim',
-'searchresultshead'         => 'Painim',
-'recentchangesdays-max'     => 'No moa long $1 {{PLURAL:$1|de|ol de}}',
-'timezoneregion-africa'     => 'Aprika',
-'timezoneregion-america'    => 'Amerika',
+'prefs-resetpass' => 'Senis paswot',
+'saveprefs' => 'Holim long tingting',
+'prefs-editing' => 'Senisim',
+'searchresultshead' => 'Painim',
+'recentchangesdays-max' => 'No moa long $1 {{PLURAL:$1|de|ol de}}',
+'timezoneregion-africa' => 'Aprika',
+'timezoneregion-america' => 'Amerika',
 'timezoneregion-antarctica' => 'Antatika',
-'timezoneregion-asia'       => 'Esia',
-'timezoneregion-atlantic'   => 'Atlantik solwara',
-'timezoneregion-australia'  => 'Ostrelia',
-'timezoneregion-europe'     => 'Yurop',
-'timezoneregion-indian'     => 'Indian solwara',
-'timezoneregion-pacific'    => 'Pasifik solwara',
-'prefs-files'               => 'Ol fail',
-'prefs-custom-css'          => 'Praivet CSS',
-'prefs-custom-js'           => 'Praivet JavaScript',
-'youremail'                 => 'E-mel:',
-'username'                  => 'Yusanem:',
-'uid'                       => 'Yusa ID:',
-'yourrealname'              => 'Tru nem:',
-'yourlanguage'              => 'Tokples:',
-'yourgender'                => 'Man/Meri:',
-'gender-male'               => 'Man',
-'gender-female'             => 'Meri',
-'email'                     => 'E-mel',
-'prefs-info'                => 'Liklik infomesen',
+'timezoneregion-asia' => 'Esia',
+'timezoneregion-atlantic' => 'Atlantik solwara',
+'timezoneregion-australia' => 'Ostrelia',
+'timezoneregion-europe' => 'Yurop',
+'timezoneregion-indian' => 'Indian solwara',
+'timezoneregion-pacific' => 'Pasifik solwara',
+'prefs-files' => 'Ol fail',
+'prefs-custom-css' => 'Praivet CSS',
+'prefs-custom-js' => 'Praivet JavaScript',
+'youremail' => 'E-mel:',
+'username' => 'Yusanem:',
+'uid' => 'Yusa ID:',
+'yourrealname' => 'Tru nem:',
+'yourlanguage' => 'Tokples:',
+'yourgender' => 'Man/Meri:',
+'gender-male' => 'Man',
+'gender-female' => 'Meri',
+'email' => 'E-mel',
+'prefs-info' => 'Liklik infomesen',
 
 # User rights
-'editusergroup'           => 'Senisim ol grup bilong yusa',
+'editusergroup' => 'Senisim ol grup bilong yusa',
 'userrights-groupsmember' => 'Memba bilong:',
-'userrights-reason'       => 'As bilong en:',
+'userrights-reason' => 'As bilong en:',
 
 # Groups
-'group'      => 'Grup:',
+'group' => 'Grup:',
 'group-user' => 'Ol yusa',
-'group-bot'  => 'Ol bot',
-'group-all'  => '(olgeta)',
+'group-bot' => 'Ol bot',
+'group-all' => '(olgeta)',
 
 'group-user-member' => 'yusa',
-'group-bot-member'  => 'bot',
+'group-bot-member' => 'bot',
 
 'grouppage-user' => '{{ns:project}}:Ol yusa',
-'grouppage-bot'  => '{{ns:project}}:Ol bot',
+'grouppage-bot' => '{{ns:project}}:Ol bot',
 
 # Rights
-'right-read'           => 'Ridim ol pes',
-'right-edit'           => 'Senisim ol pes',
-'right-move'           => 'Surikim ol pes',
-'right-movefile'       => 'Surikim ol fail',
-'right-upload'         => 'Salim media fail',
-'right-delete'         => 'Rausim ol pes',
+'right-read' => 'Ridim ol pes',
+'right-edit' => 'Senisim ol pes',
+'right-move' => 'Surikim ol pes',
+'right-movefile' => 'Surikim ol fail',
+'right-upload' => 'Salim media fail',
+'right-delete' => 'Rausim ol pes',
 'right-suppressionlog' => 'Lukim ol praivet ripot',
 
 # User rights log
-'rightslog'  => 'Ripot long ol pawa bilong ol yusa',
+'rightslog' => 'Ripot long ol pawa bilong ol yusa',
 'rightsnone' => 'i nogat wanpela',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read'          => 'ridim dispela pes',
-'action-edit'          => 'senisim dispela pes',
-'action-move'          => 'surikim dispela pes',
+'action-read' => 'ridim dispela pes',
+'action-edit' => 'senisim dispela pes',
+'action-move' => 'surikim dispela pes',
 'action-move-subpages' => 'surikim dispela pes, na ol pes ananit long en',
-'action-movefile'      => 'surikim dispela fail',
-'action-delete'        => 'rausim dispela pes',
+'action-movefile' => 'surikim dispela fail',
+'action-delete' => 'rausim dispela pes',
 
 # Recent changes
-'nchanges'                  => '$1 senis',
-'recentchanges'             => 'Nupela senis',
+'nchanges' => '$1 senis',
+'recentchanges' => 'Nupela senis',
 'recentchanges-label-minor' => 'Dispela emi liklik senis',
-'rcnote'                    => "Ananit yu lukim '''$1 senis''' long '''$2 de''' igo pinis, na i olsem long $3.",
-'rcshowhideminor'           => '$1 ol liklik senis',
-'rcshowhidebots'            => '$1 ol bot',
-'rcshowhideliu'             => '$1 ol yusa',
-'rcshowhideanons'           => '$1 ol IP yusa',
-'rcshowhidemine'            => '$1 ol senis bilong mi',
-'diff'                      => 'dispela senis',
-'hist'                      => 'olgeta senis',
-'hide'                      => 'Haitim',
-'show'                      => 'Soim',
-'minoreditletter'           => 'm',
-'newpageletter'             => 'N',
-'boteditletter'             => 'b',
-'rc_categories'             => 'Soim ol senis insait long ol dispela grup tasol (raitim wantaim "|" namel long wanwan)',
-'rc_categories_any'         => 'Olgeta',
+'rcnote' => "Ananit yu lukim '''$1 senis''' long '''$2 de''' igo pinis, na i olsem long $3.",
+'rcshowhideminor' => '$1 ol liklik senis',
+'rcshowhidebots' => '$1 ol bot',
+'rcshowhideliu' => '$1 ol yusa',
+'rcshowhideanons' => '$1 ol IP yusa',
+'rcshowhidemine' => '$1 ol senis bilong mi',
+'diff' => 'dispela senis',
+'hist' => 'olgeta senis',
+'hide' => 'Haitim',
+'show' => 'Soim',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'rc_categories' => 'Soim ol senis insait long ol dispela grup tasol (raitim wantaim "|" namel long wanwan)',
+'rc_categories_any' => 'Olgeta',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Ol senis klostu',
-'recentchangeslinked-feed'    => 'Ol senis klostu',
+'recentchangeslinked' => 'Ol senis klostu',
+'recentchangeslinked-feed' => 'Ol senis klostu',
 'recentchangeslinked-toolbox' => 'Ol senis klostu',
-'recentchangeslinked-page'    => 'Nem bilong pes:',
+'recentchangeslinked-page' => 'Nem bilong pes:',
 
 # Upload
-'upload'          => 'Salim media fail',
-'uploadbtn'       => 'Salim media fail',
-'uploaderror'     => 'Salim i kranki',
-'uploadlogpage'   => 'Ripot long salim',
-'filename'        => 'Nem bilong fail',
-'filesource'      => 'As:',
+'upload' => 'Salim media fail',
+'uploadbtn' => 'Salim media fail',
+'uploaderror' => 'Salim i kranki',
+'uploadlogpage' => 'Ripot long salim',
+'filename' => 'Nem bilong fail',
+'filesource' => 'As:',
 'watchthisupload' => 'Lukautim dispela fail',
 
-'license'            => 'Laisens:',
-'license-header'     => 'Laisens',
+'license' => 'Laisens:',
+'license-header' => 'Laisens',
 'upload_source_file' => '(fail long kompyuta bilong yu)',
 
 # Special:ListFiles
-'imgfile'        => 'fail',
-'listfiles'      => 'Lista bilong ol fail',
+'imgfile' => 'fail',
+'listfiles' => 'Lista bilong ol fail',
 'listfiles_date' => 'De',
 'listfiles_name' => 'Nem',
 'listfiles_user' => 'Yusa',
 
 # File description page
-'file-anchor-link'    => 'Fail',
-'filehist'            => 'Ol senis bilong dispela fail',
-'filehist-deleteall'  => 'rausim olgeta',
-'filehist-deleteone'  => 'rausim',
-'filehist-current'    => 'bilong nau',
-'filehist-datetime'   => 'De/Taim',
-'filehist-thumb'      => 'Liklik',
-'filehist-user'       => 'Yusa',
+'file-anchor-link' => 'Fail',
+'filehist' => 'Ol senis bilong dispela fail',
+'filehist-deleteall' => 'rausim olgeta',
+'filehist-deleteone' => 'rausim',
+'filehist-current' => 'bilong nau',
+'filehist-datetime' => 'De/Taim',
+'filehist-thumb' => 'Liklik',
+'filehist-user' => 'Yusa',
 'filehist-dimensions' => 'Ol sais',
-'filehist-comment'    => 'Tingting',
-'filehist-missing'    => 'Fail i no kamap',
-'imagelinks'          => 'Ol fail link',
-'linkstoimage'        => 'Dispela {{PLURAL:$1|pes i link|$1 pes i link}} long dispela fail:',
-'shared-repo-from'    => 'long $1',
+'filehist-comment' => 'Tingting',
+'filehist-missing' => 'Fail i no kamap',
+'imagelinks' => 'Ol fail link',
+'linkstoimage' => 'Dispela {{PLURAL:$1|pes i link|$1 pes i link}} long dispela fail:',
+'shared-repo-from' => 'long $1',
 
 # File deletion
-'filedelete'                  => 'Rausim $1',
-'filedelete-legend'           => 'Rausim fail',
-'filedelete-comment'          => 'As bilong en:',
-'filedelete-submit'           => 'Rausim',
+'filedelete' => 'Rausim $1',
+'filedelete-legend' => 'Rausim fail',
+'filedelete-comment' => 'As bilong en:',
+'filedelete-submit' => 'Rausim',
 'filedelete-reason-otherlist' => 'Arapela as bilong en',
 
 # Random page
@@ -523,47 +523,47 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'withoutinterwiki-submit' => 'Soim',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 {{PLURAL:$1|byte|bytes}}',
-'ncategories'             => '$1 {{PLURAL:$1|grup|grup}}',
-'nmembers'                => '$1 {{PLURAL:$1|memba|memba}}',
-'uncategorizedpages'      => 'Ol pes i no stap insait long grup',
+'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories' => '$1 {{PLURAL:$1|grup|grup}}',
+'nmembers' => '$1 {{PLURAL:$1|memba|memba}}',
+'uncategorizedpages' => 'Ol pes i no stap insait long grup',
 'uncategorizedcategories' => 'Ol grup i no stap insait long grup',
-'uncategorizedimages'     => 'Ol piksa i no stap insait long grup',
-'uncategorizedtemplates'  => 'Ol templet i no stap insait long grup',
-'unusedcategories'        => 'Ol grup i no gat samting insait long ol',
-'unusedimages'            => 'Ol media (olsem piksa) i no gat wanpela pes i soim ol',
-'wantedcategories'        => 'Ol grup i no stap yet tasol igat link i kam long ol',
-'wantedpages'             => 'Ol pes i no stap yet tasol igat link i kam long ol',
-'mostlinked'              => 'Ol pes i gat planti link i kam long ol',
-'mostlinkedcategories'    => 'Ol grup igat planti link i kam long ol',
-'mostlinkedtemplates'     => 'Ol templet igat planti link i kam long ol',
-'mostcategories'          => 'Ol pes bilong buk istap insait long planti grup',
-'listusers'               => 'Lista long ol yusa',
-'newpages'                => 'Ol nupela pes',
-'newpages-username'       => 'Yusanem:',
-'ancientpages'            => 'Ol pes i lapun tru',
-'move'                    => 'Surikim',
-'movethispage'            => 'Surikim dispela pes',
-'unusedcategoriestext'    => 'Ol dispela grup istap yet, tasol i no gat wanpela pes o grup i stap insait long ol.',
+'uncategorizedimages' => 'Ol piksa i no stap insait long grup',
+'uncategorizedtemplates' => 'Ol templet i no stap insait long grup',
+'unusedcategories' => 'Ol grup i no gat samting insait long ol',
+'unusedimages' => 'Ol media (olsem piksa) i no gat wanpela pes i soim ol',
+'wantedcategories' => 'Ol grup i no stap yet tasol igat link i kam long ol',
+'wantedpages' => 'Ol pes i no stap yet tasol igat link i kam long ol',
+'mostlinked' => 'Ol pes i gat planti link i kam long ol',
+'mostlinkedcategories' => 'Ol grup igat planti link i kam long ol',
+'mostlinkedtemplates' => 'Ol templet igat planti link i kam long ol',
+'mostcategories' => 'Ol pes bilong buk istap insait long planti grup',
+'listusers' => 'Lista long ol yusa',
+'newpages' => 'Ol nupela pes',
+'newpages-username' => 'Yusanem:',
+'ancientpages' => 'Ol pes i lapun tru',
+'move' => 'Surikim',
+'movethispage' => 'Surikim dispela pes',
+'unusedcategoriestext' => 'Ol dispela grup istap yet, tasol i no gat wanpela pes o grup i stap insait long ol.',
 
 # Book sources
-'booksources'               => 'Ol as bilong buk',
+'booksources' => 'Ol as bilong buk',
 'booksources-search-legend' => 'Painim long ol buk as',
-'booksources-go'            => 'Go',
+'booksources-go' => 'Go',
 
 # Special:Log
-'specialloguserlabel'  => 'Yusa:',
+'specialloguserlabel' => 'Yusa:',
 'speciallogtitlelabel' => 'Nem:',
-'log'                  => 'Ol ripot',
+'log' => 'Ol ripot',
 
 # Special:AllPages
-'allpages'       => 'Olgeta pes',
+'allpages' => 'Olgeta pes',
 'alphaindexline' => '$1 inap long $2',
-'allarticles'    => 'Ol pes',
+'allarticles' => 'Ol pes',
 'allpagessubmit' => 'Go',
 
 # Special:Categories
-'categories'         => 'Ol grup',
+'categories' => 'Ol grup',
 'categoriespagetext' => 'Ol dispela grup istap.
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
@@ -578,198 +578,198 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'newuserlogpage' => 'Ripot long ol nupela yusa',
 
 # Special:ListGroupRights
-'listgrouprights-group'   => 'Grup',
+'listgrouprights-group' => 'Grup',
 'listgrouprights-members' => '(lista bilong ol memba)',
 
 # E-mail user
-'emailuser'       => 'E-mel dispela yusa',
-'emailpage'       => 'E-mel yusa',
+'emailuser' => 'E-mel dispela yusa',
+'emailpage' => 'E-mel yusa',
 'defemailsubject' => '{{SITENAME}} e-mel',
-'noemailtitle'    => 'Nogat e-mel',
-'emailfrom'       => 'I kam long:',
-'emailto'         => 'I go long:',
-'emailmessage'    => 'Toksave:',
-'emailsend'       => 'Salim',
+'noemailtitle' => 'Nogat e-mel',
+'emailfrom' => 'I kam long:',
+'emailto' => 'I go long:',
+'emailmessage' => 'Toksave:',
+'emailsend' => 'Salim',
 
 # Watchlist
-'watchlist'            => 'Lukautbuk bilong mi',
-'mywatchlist'          => 'Lukautbuk bilong mi',
-'watchlistfor2'        => 'Bilong $1 $2',
-'nowatchlist'          => 'Nogat wanpela samting istap long lukautbuk bilong yu.',
-'watchlistanontext'    => 'Yu mas $1 long lukim o senisim ol samting long lukautbuk bilong yu.',
-'watchnologintext'     => 'Yu mas [[Special:UserLogin|login]] long senisim lukautbuk bilong yu.',
-'addedwatchtext'       => "Pes \"[[:\$1]]\" igo insait long [[Special:Watchlist|lukautbuk]] bilong yu nau.
+'watchlist' => 'Lukautbuk bilong mi',
+'mywatchlist' => 'Lukautbuk bilong mi',
+'watchlistfor2' => 'Bilong $1 $2',
+'nowatchlist' => 'Nogat wanpela samting istap long lukautbuk bilong yu.',
+'watchlistanontext' => 'Yu mas $1 long lukim o senisim ol samting long lukautbuk bilong yu.',
+'watchnologintext' => 'Yu mas [[Special:UserLogin|login]] long senisim lukautbuk bilong yu.',
+'addedwatchtext' => "Pes \"[[:\$1]]\" igo insait long [[Special:Watchlist|lukautbuk]] bilong yu nau.
 Bai yu lukim ol nupela senis long dispela pes, na pes toktok bilong en, long lukautbuk,
 na dispela pes bai kamap '''strongpela''' long [[Special:RecentChanges|pes bilong ol nupela senis]]
 na olsem bai isi long lukim em.
 
 Sapos yu laik rausim dispela pes long lukautbuk bilong yu bihain, paitim \"Pinis long lukautim\" taim yu lukim pes.",
-'removedwatchtext'     => 'Pes "[[:$1]]" i raus pinis long [[Special:Watchlist|lukautbuk bilong yu]].',
-'watch'                => 'Lukautim',
-'watchthispage'        => 'Lukautim dispela pes',
-'unwatch'              => 'Pinis long lukautim',
-'unwatchthispage'      => 'Pinis long lukautim',
-'watchlist-details'    => '$1 pes istap long lukautbuk (dispela namba i no kaunim ol pes bilong toktok).',
+'removedwatchtext' => 'Pes "[[:$1]]" i raus pinis long [[Special:Watchlist|lukautbuk bilong yu]].',
+'watch' => 'Lukautim',
+'watchthispage' => 'Lukautim dispela pes',
+'unwatch' => 'Pinis long lukautim',
+'unwatchthispage' => 'Pinis long lukautim',
+'watchlist-details' => '$1 pes istap long lukautbuk (dispela namba i no kaunim ol pes bilong toktok).',
 'wlheader-showupdated' => "* Ol pes i senis pinis bihain long taim yu lukim ol igat nem i '''strongpela'''",
-'wlshowlast'           => 'Lukim dispela $1 aua $2 de $3',
-'watchlist-options'    => 'Ol laik bilong Lukautbuk',
+'wlshowlast' => 'Lukim dispela $1 aua $2 de $3',
+'watchlist-options' => 'Ol laik bilong Lukautbuk',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Wet liklik, i go insait long lukautbuk nau...',
+'watching' => 'Wet liklik, i go insait long lukautbuk nau...',
 'unwatching' => 'Wet liklik, i raus nau long lukautbuk...',
 
-'enotif_reset'                 => 'Makim olgeta pes olsem mi lukim pinis',
-'enotif_newpagetext'           => 'Dispela emi nupela pes.',
+'enotif_reset' => 'Makim olgeta pes olsem mi lukim pinis',
+'enotif_newpagetext' => 'Dispela emi nupela pes.',
 'enotif_impersonal_salutation' => 'yusa long {{SITENAME}}',
-'changed'                      => 'i senisim',
-'created'                      => 'i kirapim',
-'enotif_subject'               => '$PAGEEDITOR $CHANGEDORCREATED pes $PAGETITLE long {{SITENAME}}',
-'enotif_anon_editor'           => 'IP yusa $1',
+'changed' => 'i senisim',
+'created' => 'i kirapim',
+'enotif_subject' => '$PAGEEDITOR $CHANGEDORCREATED pes $PAGETITLE long {{SITENAME}}',
+'enotif_anon_editor' => 'IP yusa $1',
 
 # Delete
-'deletepage'            => 'Rausim dispela pes',
-'delete-confirm'        => 'Rausim $1',
-'delete-legend'         => 'Rausim',
-'dellogpage'            => 'Ripot long rausim ol pes',
-'deletecomment'         => 'As bilong en:',
+'deletepage' => 'Rausim dispela pes',
+'delete-confirm' => 'Rausim $1',
+'delete-legend' => 'Rausim',
+'dellogpage' => 'Ripot long rausim ol pes',
+'deletecomment' => 'As bilong en:',
 'deletereasonotherlist' => 'Arapela as bilong en',
 
 # Protect
-'protectlogpage'            => 'Ripot long tambuim ol pes',
-'protectedarticle'          => 'tambuim "[[$1]]"',
+'protectlogpage' => 'Ripot long tambuim ol pes',
+'protectedarticle' => 'tambuim "[[$1]]"',
 'modifiedarticleprotection' => 'senisim tambu bilong "[[$1]]"',
-'prot_1movedto2'            => '[[$1]] i surik i go long [[$2]] pinis',
-'protectcomment'            => 'As bilong en:',
-'protect-othertime'         => 'Arapela taim:',
-'protect-othertime-op'      => 'arapela taim',
-'protect-otherreason'       => 'Arapela/moa as bilong en',
-'protect-otherreason-op'    => 'Arapela as bilong en',
+'prot_1movedto2' => '[[$1]] i surik i go long [[$2]] pinis',
+'protectcomment' => 'As bilong en:',
+'protect-othertime' => 'Arapela taim:',
+'protect-othertime-op' => 'arapela taim',
+'protect-otherreason' => 'Arapela/moa as bilong en',
+'protect-otherreason-op' => 'Arapela as bilong en',
 
 # Restrictions (nouns)
-'restriction-edit'   => 'Senisim',
-'restriction-move'   => 'Surikim',
+'restriction-edit' => 'Senisim',
+'restriction-move' => 'Surikim',
 'restriction-create' => 'Kirapim',
 
 # Undelete
-'undeletelink'              => 'soim/restore',
-'undeleteviewlink'          => 'lukim',
-'undeletecomment'           => 'As bilong en:',
-'undelete-search-submit'    => 'Painim',
+'undeletelink' => 'soim/restore',
+'undeleteviewlink' => 'lukim',
+'undeletecomment' => 'As bilong en:',
+'undelete-search-submit' => 'Painim',
 'undelete-show-file-submit' => 'Yes',
 
 # Namespace form on various pages
-'invert'         => 'Tanbek',
+'invert' => 'Tanbek',
 'blanknamespace' => '(Nambawan)',
 
 # Contributions
-'contributions'       => 'Ol senis yusa i wokim',
+'contributions' => 'Ol senis yusa i wokim',
 'contributions-title' => 'Ol yusa senis long $1',
-'mycontris'           => 'Ol senis mi wokim',
-'contribsub2'         => 'Long $1 ($2)',
-'uctop'               => '(antap)',
-'month'               => 'Long mun (na bifo):',
-'year'                => 'Long yia (na bifo):',
+'mycontris' => 'Ol senis mi wokim',
+'contribsub2' => 'Long $1 ($2)',
+'uctop' => '(antap)',
+'month' => 'Long mun (na bifo):',
+'year' => 'Long yia (na bifo):',
 
 'sp-contributions-blocklog' => 'ripot long pasim ol yusa',
-'sp-contributions-talk'     => 'toktok',
-'sp-contributions-submit'   => 'Painim',
+'sp-contributions-talk' => 'toktok',
+'sp-contributions-submit' => 'Painim',
 
 # What links here
-'whatlinkshere'            => 'Ol link ikam long hia',
-'whatlinkshere-page'       => 'Pes:',
-'isredirect'               => 'nupela rot',
-'isimage'                  => 'link long piksa',
-'whatlinkshere-links'      => '← ol link',
+'whatlinkshere' => 'Ol link ikam long hia',
+'whatlinkshere-page' => 'Pes:',
+'isredirect' => 'nupela rot',
+'isimage' => 'link long piksa',
+'whatlinkshere-links' => '← ol link',
 'whatlinkshere-hideredirs' => '$1 ol nupela rot',
-'whatlinkshere-hidelinks'  => '$1 ol link',
+'whatlinkshere-hidelinks' => '$1 ol link',
 
 # Block/unblock
-'blockip'            => 'Pasim yusa (Block user)',
-'ipboptions'         => '2 awa:2 hours,1 de:1 day,3 de:3 days,1 wik:1 week,2 wik:2 weeks,1 mun:1 month,3 mun:3 months,6 mun:6 months,1 yia:1 year,oltaim:infinite',
-'ipbotheroption'     => 'narapela',
-'ipblocklist'        => 'Ol IP adres na yusanem i pas',
+'blockip' => 'Pasim yusa (Block user)',
+'ipboptions' => '2 awa:2 hours,1 de:1 day,3 de:3 days,1 wik:1 week,2 wik:2 weeks,1 mun:1 month,3 mun:3 months,6 mun:6 months,1 yia:1 year,oltaim:infinite',
+'ipbotheroption' => 'narapela',
+'ipblocklist' => 'Ol IP adres na yusanem i pas',
 'ipblocklist-submit' => 'Painim',
-'blocklink'          => 'pasim',
-'unblocklink'        => 'larim',
-'change-blocklink'   => 'senis pasim',
-'contribslink'       => 'wok',
-'blocklogpage'       => 'Ripot long pasim ol yusa',
+'blocklink' => 'pasim',
+'unblocklink' => 'larim',
+'change-blocklink' => 'senis pasim',
+'contribslink' => 'wok',
+'blocklogpage' => 'Ripot long pasim ol yusa',
 
 # Move page
-'move-page'        => 'Surikim $1',
+'move-page' => 'Surikim $1',
 'move-page-legend' => 'Surikim pes',
-'movearticle'      => 'Surikim pes:',
-'newtitle'         => 'Nupela nem bilong pes:',
-'movepagebtn'      => 'Surikim',
-'pagemovedsub'     => 'Pes i surik pinis',
-'movepage-moved'   => '\'\'\'"$1" i surikim pinis long "$2"\'\'\'',
-'articleexists'    => 'Wanpela pes wantaim dispela nem i stap pinis, o dispela nem i no stret.
+'movearticle' => 'Surikim pes:',
+'newtitle' => 'Nupela nem bilong pes:',
+'movepagebtn' => 'Surikim',
+'pagemovedsub' => 'Pes i surik pinis',
+'movepage-moved' => '\'\'\'"$1" i surikim pinis long "$2"\'\'\'',
+'articleexists' => 'Wanpela pes wantaim dispela nem i stap pinis, o dispela nem i no stret.
 Yu mas painim narapela nem.',
-'talkexists'       => "'''Pes bilong buk i surik pinis, tasol pes bilong toktok i no inap surik, bilong wanem wanpela pes bilong toktok istap pinis wantaim dispela nam.  Yu mas pasim wantaim tupela pes bilong toktok yu yet.'''",
-'movedto'          => 'i surik i go long',
-'movetalk'         => 'Surikim pes bilong toktok wantaim',
-'movelogpage'      => 'Buk bilong ol surik',
-'movelogpagetext'  => 'Hia yumi lukim ol pes i surik pinis.',
-'movereason'       => 'As bilong en:',
-'revertmove'       => 'go bek',
+'talkexists' => "'''Pes bilong buk i surik pinis, tasol pes bilong toktok i no inap surik, bilong wanem wanpela pes bilong toktok istap pinis wantaim dispela nam.  Yu mas pasim wantaim tupela pes bilong toktok yu yet.'''",
+'movedto' => 'i surik i go long',
+'movetalk' => 'Surikim pes bilong toktok wantaim',
+'movelogpage' => 'Buk bilong ol surik',
+'movelogpagetext' => 'Hia yumi lukim ol pes i surik pinis.',
+'movereason' => 'As bilong en:',
+'revertmove' => 'go bek',
 
 # Namespace 8 related
-'allmessages'               => 'Ol toksave bilong sistem',
-'allmessagesname'           => 'Nem',
-'allmessages-filter-all'    => 'Olgeta',
-'allmessages-language'      => 'Tokples:',
+'allmessages' => 'Ol toksave bilong sistem',
+'allmessagesname' => 'Nem',
+'allmessages-filter-all' => 'Olgeta',
+'allmessages-language' => 'Tokples:',
 'allmessages-filter-submit' => 'Go',
 
 # Thumbnails
 'thumbnail-more' => 'Moa bikpela',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Pes bilong yu (Your user page)',
-'tooltip-pt-preferences'         => 'Ol laik bilong yu (Your preferences)',
-'tooltip-pt-mycontris'           => 'Lista long ol senis yu wokim (List of your contributions)',
-'tooltip-pt-logout'              => 'Logaut',
-'tooltip-ca-talk'                => 'Toktok long dispela pes',
-'tooltip-ca-addsection'          => 'Kirapim nupela seksen',
-'tooltip-ca-viewsource'          => 'Dispela pes i tambu long senisim.
+'tooltip-pt-userpage' => 'Pes bilong yu (Your user page)',
+'tooltip-pt-preferences' => 'Ol laik bilong yu (Your preferences)',
+'tooltip-pt-mycontris' => 'Lista long ol senis yu wokim (List of your contributions)',
+'tooltip-pt-logout' => 'Logaut',
+'tooltip-ca-talk' => 'Toktok long dispela pes',
+'tooltip-ca-addsection' => 'Kirapim nupela seksen',
+'tooltip-ca-viewsource' => 'Dispela pes i tambu long senisim.
 Yu inap lukim as tok bilong em',
-'tooltip-ca-protect'             => 'Tambuim dispela pes',
-'tooltip-ca-delete'              => 'Rausim dispela pes',
-'tooltip-ca-move'                => 'Surikim dispela pes (Move this page)',
-'tooltip-ca-watch'               => 'Skruim dispela pes long lukautbuk bilong yu',
-'tooltip-ca-unwatch'             => 'Rausim dispela pes long lukautbuk bilong yu (Remove this page from your watchlist)',
-'tooltip-search'                 => 'Painim long {{SITENAME}}',
-'tooltip-search-fulltext'        => 'Painim dispela hap tok insait long olgeta pes',
-'tooltip-p-logo'                 => 'Lukim fran pes (Visit the main page)',
-'tooltip-n-mainpage'             => 'Lukim fran pes (Visit the main page)',
+'tooltip-ca-protect' => 'Tambuim dispela pes',
+'tooltip-ca-delete' => 'Rausim dispela pes',
+'tooltip-ca-move' => 'Surikim dispela pes (Move this page)',
+'tooltip-ca-watch' => 'Skruim dispela pes long lukautbuk bilong yu',
+'tooltip-ca-unwatch' => 'Rausim dispela pes long lukautbuk bilong yu (Remove this page from your watchlist)',
+'tooltip-search' => 'Painim long {{SITENAME}}',
+'tooltip-search-fulltext' => 'Painim dispela hap tok insait long olgeta pes',
+'tooltip-p-logo' => 'Lukim fran pes (Visit the main page)',
+'tooltip-n-mainpage' => 'Lukim fran pes (Visit the main page)',
 'tooltip-n-mainpage-description' => 'Lukim fran pes (Visit the main page)',
-'tooltip-n-help'                 => 'Ples long painim halivim',
-'tooltip-feed-rss'               => 'RSS fid bilong dispela pes',
-'tooltip-feed-atom'              => 'Atom fid bilong dispela pes',
-'tooltip-t-emailuser'            => 'Salim e-mel long dispela yusa',
-'tooltip-t-upload'               => 'Sutim ol fail olsem piksa igo insait',
-'tooltip-t-specialpages'         => 'Lista long ol sipesol pes (List of all special pages)',
-'tooltip-ca-nstab-main'          => 'Lukim stori (View the content page)',
-'tooltip-ca-nstab-user'          => 'Lukim pes bilong yusa',
-'tooltip-ca-nstab-media'         => 'Lukim media pes (View the media page)',
-'tooltip-ca-nstab-image'         => 'Lukim pes bilong fail',
-'tooltip-ca-nstab-template'      => 'Lukim templet',
-'tooltip-ca-nstab-category'      => 'Lukim grup',
-'tooltip-save'                   => 'Raitim senis bilong yu (Save your changes)',
+'tooltip-n-help' => 'Ples long painim halivim',
+'tooltip-feed-rss' => 'RSS fid bilong dispela pes',
+'tooltip-feed-atom' => 'Atom fid bilong dispela pes',
+'tooltip-t-emailuser' => 'Salim e-mel long dispela yusa',
+'tooltip-t-upload' => 'Sutim ol fail olsem piksa igo insait',
+'tooltip-t-specialpages' => 'Lista long ol sipesol pes (List of all special pages)',
+'tooltip-ca-nstab-main' => 'Lukim stori (View the content page)',
+'tooltip-ca-nstab-user' => 'Lukim pes bilong yusa',
+'tooltip-ca-nstab-media' => 'Lukim media pes (View the media page)',
+'tooltip-ca-nstab-image' => 'Lukim pes bilong fail',
+'tooltip-ca-nstab-template' => 'Lukim templet',
+'tooltip-ca-nstab-category' => 'Lukim grup',
+'tooltip-save' => 'Raitim senis bilong yu (Save your changes)',
 
 # Attribution
 'siteuser' => '{{SITENAME}} yusa $1',
-'others'   => 'ol narapela',
+'others' => 'ol narapela',
 
 # Browsing diffs
 'previousdiff' => '← Moa olpela senis',
-'nextdiff'     => 'Moa nupela senis →',
+'nextdiff' => 'Moa nupela senis →',
 
 # Media information
 'show-big-image' => 'Bikpela piksa',
 
 # Special:NewFiles
 'showhidebots' => '($1 ol bot)',
-'ilsubmit'     => 'Painim',
+'ilsubmit' => 'Painim',
 
 # Metadata
 'metadata' => 'Metadata',
@@ -782,8 +782,8 @@ Yu inap lukim as tok bilong em',
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'olgeta',
 'namespacesall' => 'ol',
-'monthsall'     => 'olgeta',
-'limitall'      => 'olgeta',
+'monthsall' => 'olgeta',
+'limitall' => 'olgeta',
 
 # Scary transclusion
 'scarytranscludetoolong' => '[URL i longpela tumas]',
@@ -798,47 +798,47 @@ Yu inap lukim as tok bilong em',
 'table_pager_limit_submit' => 'Go',
 
 # Watchlist editor
-'watchlistedit-numitems'       => 'Igat {{PLURAL:$1|1 samting|$1 samting}} insait long lukautbuk bilong yu (ol pes bilong toktok i no stap long dispela namba).',
-'watchlistedit-noitems'        => 'Nogat wanpela samting long lukautbuk bilong yu.',
-'watchlistedit-normal-title'   => 'Senisim lukautbuk',
-'watchlistedit-normal-legend'  => 'Rausim ol samting long lukautbuk',
+'watchlistedit-numitems' => 'Igat {{PLURAL:$1|1 samting|$1 samting}} insait long lukautbuk bilong yu (ol pes bilong toktok i no stap long dispela namba).',
+'watchlistedit-noitems' => 'Nogat wanpela samting long lukautbuk bilong yu.',
+'watchlistedit-normal-title' => 'Senisim lukautbuk',
+'watchlistedit-normal-legend' => 'Rausim ol samting long lukautbuk',
 'watchlistedit-normal-explain' => 'Ananit yu lukim ol samting long lukautbuk. Long rausim wanpela samting, makim liklik boxis long sait bilong en, na paitim "Rausim ol samting".  Na tu yu inap [[Special:EditWatchlist/raw|senisim lukautbuk long wanpela bokis]].',
-'watchlistedit-normal-submit'  => 'Rausim ol samting',
-'watchlistedit-normal-done'    => '{{PLURAL:$1|Wanpela|$1}} samting i raus pinis long lukautbuk bilong yu:',
-'watchlistedit-raw-title'      => 'Senisim lukautbuk long wanpela bokis',
-'watchlistedit-raw-legend'     => 'Senisim lukautbuk insait long wanpela bokis',
-'watchlistedit-raw-explain'    => 'Ananit yu lukim ol samting long lukautbuk bilong yu insait long wanpela bokis.
+'watchlistedit-normal-submit' => 'Rausim ol samting',
+'watchlistedit-normal-done' => '{{PLURAL:$1|Wanpela|$1}} samting i raus pinis long lukautbuk bilong yu:',
+'watchlistedit-raw-title' => 'Senisim lukautbuk long wanpela bokis',
+'watchlistedit-raw-legend' => 'Senisim lukautbuk insait long wanpela bokis',
+'watchlistedit-raw-explain' => 'Ananit yu lukim ol samting long lukautbuk bilong yu insait long wanpela bokis.
        Yu inap putim sampela moa samting igo insait, o rausim sampela ol samting. Putim
        wanpela samting i go long wanwan lain.  Taim yu pinisim ol senis, paitim "Senisim lukautbuk".
        Na tu yu inap [[Special:EditWatchlist|senisim lukautbuk long planti liklik bokis]].',
-'watchlistedit-raw-titles'     => 'Ol samting:',
-'watchlistedit-raw-submit'     => 'Senisim lukautbuk',
-'watchlistedit-raw-done'       => 'Lukautbuk bilong yu i senis pinis.',
-'watchlistedit-raw-added'      => '{{PLURAL:$1|wanpela|$1}} samting igo insait:',
-'watchlistedit-raw-removed'    => '{{PLURAL:$1|Wanpela|$1}} samting i raus pinis:',
+'watchlistedit-raw-titles' => 'Ol samting:',
+'watchlistedit-raw-submit' => 'Senisim lukautbuk',
+'watchlistedit-raw-done' => 'Lukautbuk bilong yu i senis pinis.',
+'watchlistedit-raw-added' => '{{PLURAL:$1|wanpela|$1}} samting igo insait:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|Wanpela|$1}} samting i raus pinis:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Lukim ol senis',
 'watchlisttools-edit' => 'Lukim na senisim lukautbuk',
-'watchlisttools-raw'  => 'Senisim lukautbuk insait long wanpela bokis',
+'watchlisttools-raw' => 'Senisim lukautbuk insait long wanpela bokis',
 
 # Special:Version
-'version-other'            => 'Narapela',
-'version-license'          => 'Laisens',
+'version-other' => 'Narapela',
+'version-license' => 'Laisens',
 'version-poweredby-others' => 'ol narapela',
 
 # Special:FilePath
-'filepath-page'   => 'Fail:',
+'filepath-page' => 'Fail:',
 'filepath-submit' => 'Go',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'Nem bilong fail:',
-'fileduplicatesearch-submit'   => 'Painim',
+'fileduplicatesearch-submit' => 'Painim',
 
 # Special:SpecialPages
-'specialpages'                 => 'Ol sipesol pes',
-'specialpages-group-other'     => 'Ol narapela sipesol pes',
-'specialpages-group-pages'     => 'Lista long ol pes',
+'specialpages' => 'Ol sipesol pes',
+'specialpages-group-other' => 'Ol narapela sipesol pes',
+'specialpages-group-pages' => 'Lista long ol pes',
 'specialpages-group-pagetools' => 'Ol tul bilong pes',
 
 # Special:Tags
index 5e96f51..0221598 100644 (file)
@@ -20,6 +20,7 @@
  * @author Goktr001
  * @author Hanberke
  * @author Hcagri
+ * @author Ijon
  * @author Incelemeelemani
  * @author Joseph
  * @author Kaganer
@@ -33,6 +34,7 @@
  * @author Mirzali
  * @author Mskyrider
  * @author Myildirim2007
+ * @author Reedy
  * @author Runningfridgesrule
  * @author Srhat
  * @author Stultiwikia
@@ -579,7 +581,7 @@ $1',
 'ok' => 'TAMAM',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '"$1" adresinden alındı.',
-'youhavenewmessages' => 'Yeni <u>$1</u> var. ($2)',
+'youhavenewmessages' => 'Yeni $1 var ($2).',
 'newmessageslink' => 'mesajınız',
 'newmessagesdifflink' => 'son değişiklik',
 'youhavenewmessagesmulti' => "$1'de yeni mesajınız var.",
@@ -1253,7 +1255,6 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 
 # Diffs
 'history-title' => '"$1" sayfasının geçmişi',
-'difference' => '(Sürümler arası farklar)',
 'difference-multipage' => '(Sayfalar arasındaki fark)',
 'lineno' => '$1. satır:',
 'compareselectedversions' => 'Seçilen sürümleri karşılaştır',
@@ -2116,6 +2117,7 @@ Günlük tipini, kullanıcı adını (büyük-küçük harf duyarlı), ya da etk
 'allpagesprefix' => 'Buraya yazdığınız harflerle başlayan sayfaları listeleyin:',
 'allpagesbadtitle' => 'Girilen sayfa ismi diller arası bağlantı ya da vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.',
 'allpages-bad-ns' => '{{SITENAME}} sitesinde "$1" ad alanı yok.',
+'allpages-hide-redirects' => 'Yönlendirmeleri gizle',
 
 # Special:Categories
 'categories' => 'Kategoriler',
@@ -2274,8 +2276,8 @@ $NEWPAGE
 Değişikliği yapan kullanıcının açıklaması: $PAGESUMMARY $PAGEMINOREDIT
 
 Sayfayı değiştiren kullanıcıya erişim bilgileri:
-e-posta: $PAGEEDITOR_EMAIL
-viki: $PAGEEDITOR_WIKI
+E-posta: $PAGEEDITOR_EMAIL
+Viki: $PAGEEDITOR_WIKI
 
 Bahsi geçen sayfayı ziyaret edinceye kadar sayfayla ilgili başka değişiklik bildirimi gönderilmeyecektir. İzleme listenizdeki tüm sayfalar bildirim durumlarını sıfırlayabilirsiniz.
 
index 6d0e3b4..12af386 100644 (file)
 
 $messages = array(
 # User preference toggles
-'tog-justify'              => 'Hikahata xirhapa',
-'tog-hideminor'            => 'Tumbeta mindzulamiso leyi tsongo',
-'tog-usenewrc'             => 'Kucinca ka sweswinyana loku hlutiweke (JavaScript)',
-'tog-showtoc'              => 'Komba nxaxamelo wa leswingandzeni (eka tinhlokomhaka tinharhu kumbe kutlula)',
-'tog-rememberpassword'     => 'Tsundzuka ku nghena eka Khompuyuta leyi (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations'       => 'Hoxa matluka lawa ndzi matumbuluxaka eka leswi ndziswi languteke',
-'tog-watchdefault'         => 'Hoxa matluka lawa ndzi malulamisaka eka leswi ndziswi languteke',
-'tog-watchmoves'           => "Hoxa matluka lawa ndzi mayisaka kun'wana eka leswi ndziswi languteke",
-'tog-watchdeletion'        => 'Hoxa matluka lawa ndzi masulaka eka leswi ndziswi languteke',
+'tog-underline' => 'Hlanganisa nkhwatiheto:',
+'tog-justify' => 'Hikahata xirhapa',
+'tog-hideminor' => 'Tumbeta mindzulamiso leyi tsongo',
+'tog-hidepatrolled' => 'Tumbeta ku cinca loku languteriweke eka kucinca ka sweswinyana',
+'tog-newpageshidepatrolled' => 'Tumbeta kucinca loku languteriweke eka nxaxamelo wa matluka lamantswa',
+'tog-extendwatchlist' => 'Ndlandlamuxa ku komba kucinca hikwako, handle ka ku cinca ka sweswinyana ntsena',
+'tog-usenewrc' => 'Tirhisa kucinca ka sweswinyana loku hlutiweke (yitirhisa ntsalo wa Java)',
+'tog-numberheadings' => 'Tinhloko-mhaka leti hleriweke',
+'tog-showtoolbar' => 'Komba xiangarhi xo cinca (yitirhisa ntsalo wa Java)',
+'tog-editondblclick' => 'Lulamisa matluka hi ku thlava kambirhi (yitirhisa ntsalo wa Java)',
+'tog-editsection' => 'Pfula ku lulamisa xiyenge hi ku tirhisa xithlavinyeti xo [edit|lulamisa]',
+'tog-editsectiononrightclick' => 'Pfula ku lulamisa hi swiyenge hi ku thlava nhlokomhaka ya xiyenge (yitirhisa ntsalo wa Java)',
+'tog-showtoc' => 'Komba nxaxamelo wa leswingandzeni (eka tinhlokomhaka tinharhu kumbe kutlula)',
+'tog-rememberpassword' => 'Tsundzuka ku nghena eka Khompuyuta leyi (kufikela eka $1 {{PLURAL:$1|siku|masiku}})',
+'tog-watchcreations' => 'Hoxa matluka lawa ndzi matumbuluxaka eka leswi ndziswi languteke',
+'tog-watchdefault' => 'Hoxa matluka lawa ndzi malulamisaka eka leswi ndziswi languteke',
+'tog-watchmoves' => "Hoxa matluka lawa ndzi mayisaka kun'wana eka leswi ndziswi languteke",
+'tog-watchdeletion' => 'Hoxa matluka lawa ndzi masulaka eka leswi ndziswi languteke',
+'tog-minordefault' => 'Funga mindzulamiso hinkwayo leyi ntsongo handle ka xivangelo',
+'tog-previewontop' => 'Komba kuringanisa ungasi lulamisa bokisi',
+'tog-previewonfirst' => 'Komba kuringanisa eka ndzulamiso wo sungula',
 'tog-enotifwatchlistpages' => 'ndzurhumele e-mail loko leswi ndzi swi languteke swi lulamisiwa',
-'tog-enotifusertalkpages'  => 'ndzurhumele e-mail loko tluka ra mbulavulo na mina ri lulamisiwa',
-'tog-enotifminoredits'     => 'ndzurhumele e-mail loko ku endleka mindzulamiso leyi ntsongo',
-'tog-enotifrevealaddr'     => 'Paluxa e-mail yamina eka mapapila lawa ndzimarhumelaka',
-'tog-shownumberswatching'  => 'Komba ntsengo wa vatirhisi lava hlaleleke tluka',
-'tog-forceeditsummary'     => 'Ndzivutisisi loko ndzinga hoxi nkomiso wa ndzulamiso lowu ndzi wu endleke',
-'tog-watchlisthideown'     => 'Tumbeta mindzulamiso ya mina eka leswi ndzi swi languteke',
-'tog-watchlisthidebots'    => 'Tumbeta mindzulamiso ya rhobhoti eka leswi ndzi swi languteke',
-'tog-watchlisthideminor'   => 'Tumbeta mindzulamiso leyi tsongo eka leswi ndzi swi languteke',
-'tog-watchlisthideliu'     => 'Tumbeta mindzulamiso ya vatirhisiwa lava ngheneke eka leswi ndzi swi languteke',
-'tog-watchlisthideanons'   => 'Tumbeta mindzulamiso ya vatirhisiwa lavanga tivekiki eka leswi ndzi swi languteke',
-'tog-ccmeonemails'         => "Ndzirhumele khopi ya ti e-mail leti ndzi ti rhumelaka van'wana",
+'tog-enotifusertalkpages' => 'ndzurhumele e-mail loko tluka ra mbulavulo na mina ri lulamisiwa',
+'tog-enotifminoredits' => 'ndzurhumele e-mail loko ku endleka mindzulamiso leyi ntsongo',
+'tog-enotifrevealaddr' => 'Paluxa e-mail yamina eka mapapila lawa ndzimarhumelaka',
+'tog-shownumberswatching' => 'Komba ntsengo wa vatirhisi lava hlaleleke tluka',
+'tog-forceeditsummary' => 'Ndzivutisisi loko ndzinga hoxi nkomiso wa ndzulamiso lowu ndzi wu endleke',
+'tog-watchlisthideown' => 'Tumbeta mindzulamiso ya mina eka leswi ndzi swi languteke',
+'tog-watchlisthidebots' => 'Tumbeta mindzulamiso ya rhobhoti eka leswi ndzi swi languteke',
+'tog-watchlisthideminor' => 'Tumbeta mindzulamiso leyi tsongo eka leswi ndzi swi languteke',
+'tog-watchlisthideliu' => 'Tumbeta mindzulamiso ya vatirhisiwa lava ngheneke eka leswi ndzi swi languteke',
+'tog-watchlisthideanons' => 'Tumbeta mindzulamiso ya vatirhisiwa lavanga tivekiki eka leswi ndzi swi languteke',
+'tog-ccmeonemails' => "Ndzirhumele khopi ya ti e-mail leti ndzi ti rhumelaka van'wana",
 
 'underline-always' => 'Nkarhi hinkwawo',
-'underline-never'  => "Swinga endleki ni kan'we",
+'underline-never' => "Swinga endleki ni kan'we",
 
 # Dates
-'sunday'    => 'Sonto',
-'mon'       => 'Musombhunuko',
-'tue'       => 'Ravumbirhi',
-'wed'       => 'Ravunharhu',
-'thu'       => 'Ravumune',
-'fri'       => 'Ravunthlanu',
-'sat'       => 'Muqhivela',
-'january'   => 'Sunguti',
-'february'  => 'Nyenyenyani',
-'march'     => 'Nyenyankulu',
-'april'     => 'Dzivamusoko',
-'may_long'  => 'Mudyaxihi',
-'june'      => 'Khotavuxika',
-'july'      => 'Mawuwani',
-'august'    => 'Mhawuri',
+'sunday' => 'Sonto',
+'monday' => 'Musombhunuko',
+'tuesday' => 'Ravumbirhi',
+'wednesday' => 'Ravunharhu',
+'thursday' => 'Ravumune',
+'friday' => 'Ravunthlanu',
+'saturday' => 'Muqhivela',
+'sun' => 'Sont',
+'mon' => 'Musombhunuko',
+'tue' => 'Ravumbirhi',
+'wed' => 'Ravunharhu',
+'thu' => 'Ravumune',
+'fri' => 'Ravunthlanu',
+'sat' => 'Muqhivela',
+'january' => 'Sunguti',
+'february' => 'Nyenyenyani',
+'march' => 'Nyenyankulu',
+'april' => 'Dzivamusoko',
+'may_long' => 'Mudyaxihi',
+'june' => 'Khotavuxika',
+'july' => 'Mawuwani',
+'august' => 'Mhawuri',
 'september' => 'Ndzhati',
-'october'   => 'Nhlangula',
-'november'  => 'Hukuri',
-'december'  => "N'wendzamhala",
-
-'newwindow'     => '(Yi pfula e ndhzawini yintswa)',
-'cancel'        => 'Thsika',
+'october' => 'Nhlangula',
+'november' => 'Hukuri',
+'december' => "N'wendzamhala",
+'january-gen' => 'Sunguti',
+'february-gen' => 'Nyenyenyani',
+'march-gen' => 'Nyenyankulu',
+'april-gen' => 'Dzivamusoko',
+'may-gen' => 'Mudyaxihi',
+'june-gen' => 'Khotavuxika',
+'july-gen' => 'Mawuwani',
+'august-gen' => 'Mhawuri',
+'september-gen' => 'Ndzhati',
+'october-gen' => 'Nhlangula',
+'november-gen' => 'Hukuri',
+'december-gen' => "N'wendzamhala",
+'jan' => 'Nsungu',
+'feb' => 'Nyenye',
+'mar' => 'Nyenya',
+'apr' => 'Dziva',
+'may' => 'Mudya',
+'jun' => 'Khota',
+'jul' => 'Mawu',
+'aug' => 'Mhawu',
+'sep' => 'Ndzha',
+'oct' => 'Nhla',
+'nov' => 'Huk',
+'dec' => "N'wen",
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|Ntlawa|intlawa}}',
+'category_header' => 'Matluka eka ntlawa wa "$1"',
+'subcategories' => 'Mintlawa-ntsongo',
+'category-media-header' => 'Matluka ya xifaniso kumbe mpfumawulo eka ntlawa wa "$1"',
+'category-empty' => "''Ntlawa lowu eka nkarhi wa sweswi, wuhava matluka kumbe swifaniso.''",
+'hidden-categories' => '{{PLURAL:$1|Ntlawa lowu tumbetiweke|Mintlawa leyi tumbetiweke}}',
+'category-subcat-count' => '{{PLURAL:$2|Ntlawa lowu wukhome mintlawa-ntsongo leyi landzelaka.|Ntlawa lowu wuni  {{PLURAL:$1|ntlwa-ntsongo|$1 wa mintlaw-ntsongo}}, eka $2 wa mintlawa-ntsongo.}}',
+'category-article-count' => '{{PLURAL:$2|Ntlawa lowu wukhome matluka lamalandzelaka ntsena.| {{PLURAL:$1|Tluka leri ri le|$1 matluka lawa male}} ndzeni ka ntlawa lowu, eka $2 wamintlawa.}}',
+'category-file-count' => '{{PLURAL:$2|Ntlawa lowu wukhome matluka lamalandzelaka ntsena.| {{PLURAL:$1|Tluka leri ri le|$1 matluka lawa male}} ndzeni ka ntlawa lowu, eka $2 wamintlawa.}}',
+'listingcontinuesabbrev' => 'Mahlwe.',
+'noindex-category' => 'Matluka lama kayivelaka xikombandlela xa tinhlokomhaka',
+
+'about' => 'Timhaka hi',
+'article' => 'Matluka lama tsariweke',
+'newwindow' => '(Yi pfula e ndhzawini yintswa)',
+'cancel' => 'Thsika',
 'moredotdotdot' => "Swin'wana...",
-'mypage'        => 'Tluka ramina',
-'mytalk'        => 'Mbulavulo namina',
-'anontalk'      => 'Vulavula na IP leyi',
-'and'           => '&#32;nakambe',
+'mypage' => 'Tluka ramina',
+'mytalk' => 'Mbulavulo namina',
+'anontalk' => 'Vulavula na IP leyi',
+'navigation' => 'Xikomba ndlela',
+'and' => '&#32;nakambe',
 
 # Cologne Blue skin
-'qbfind'         => 'Kuma',
-'qbedit'         => 'Lulamisa',
-'qbpageoptions'  => 'Tluka leri',
-'qbpageinfo'     => 'mongo',
-'qbmyoptions'    => 'Matluka ya mina',
+'qbfind' => 'Kuma',
+'qbedit' => 'Lulamisa',
+'qbpageoptions' => 'Tluka leri',
+'qbpageinfo' => 'mongo',
+'qbmyoptions' => 'Matluka ya mina',
 'qbspecialpages' => 'Matluka yohlawuleka',
-'faq'            => 'FAQ',
-'faqpage'        => 'Project:FAQ',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-delete'  => 'Sula',
+'vector-action-addsection' => 'Veka nholoko ya mhaka',
+'vector-action-delete' => 'Sula',
+'vector-action-move' => 'Yi sa kunwana',
 'vector-action-protect' => 'Sirhelela',
-'vector-view-create'    => 'Tumbuluxa',
-
-'errorpagetitle'   => 'Xihoxo',
-'returnto'         => 'Thlelela e $1.',
-'tagline'          => 'Kusuka e {{SITENAME}}',
-'help'             => 'Mpfuno',
-'search'           => 'Lava',
-'searchbutton'     => 'Lava',
-'go'               => 'Nghena',
-'searcharticle'    => 'Nghena',
-'history'          => 'Matimu yaTluka',
-'history_short'    => 'Matimu',
+'vector-view-create' => 'Tumbuluxa',
+'vector-view-edit' => 'Lulamisa',
+'vector-view-history' => 'Languta matimu',
+'vector-view-view' => 'Hlaya',
+'vector-view-viewsource' => 'Languta xihlovo',
+'actions' => 'Swiendlo',
+'namespaces' => 'Swikhomela viti',
+'variants' => 'Tinxaka hi ku hambana',
+
+'errorpagetitle' => 'Xihoxo',
+'returnto' => 'Thlelela e $1.',
+'tagline' => 'Kusuka e {{SITENAME}}',
+'help' => 'Mpfuno',
+'search' => 'Lava',
+'searchbutton' => 'Lava',
+'go' => 'Nghena',
+'searcharticle' => 'Nghena',
+'history' => 'Matimu yaTluka',
+'history_short' => 'Matimu',
 'printableversion' => 'Vona Ngangliso',
-'edit'             => 'Lulamisa',
-'create'           => 'Tumbuluxa',
-'editthispage'     => 'Lulamisa Tluka leri',
+'permalink' => 'Xithlavinyeti xa nkarhi hinkwawo',
+'edit' => 'Lulamisa',
+'create' => 'Tumbuluxa',
+'editthispage' => 'Lulamisa Tluka leri',
 'create-this-page' => 'Tumbuluxa tluka leri',
-'delete'           => 'Sula',
-'deletethispage'   => 'Sula tluka leri',
-'protect'          => 'Sirhelela',
-'protect_change'   => 'Cinca',
-'newpage'          => 'Tluka rintswa',
+'delete' => 'Sula',
+'deletethispage' => 'Sula tluka leri',
+'viewdeleted_short' => 'Vona {{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
+'protect' => 'Sirhelela',
+'protect_change' => 'Cinca',
+'protectthispage' => 'Sirhelela tluka leri',
+'newpage' => 'Tluka rintswa',
 'talkpagelinktext' => 'Mbulavulo',
-'talk'             => 'Mbulavuriswano',
-'toolbox'          => 'Bokisi ra switirhisiwa',
-'jumptosearch'     => 'Lava',
+'specialpage' => 'Tluka ro hlawuleka',
+'personaltools' => "Switirhisi swa n'wini",
+'talk' => 'Mbulavuriswano',
+'views' => 'Kulanguteka',
+'toolbox' => 'Bokisi ra switirhisiwa',
+'otherlanguages' => "Hi ti ndzimi tin'wana",
+'redirectedfrom' => '(Ritlerisewe kusuka e $1)',
+'redirectpagesub' => 'Tluka ro kongomisa',
+'lastmodifiedat' => 'Tluka leri rihetelele ku lulamisiwa hi $1, nkarhi kuri $2.',
+'jumpto' => 'Tlulela eka:',
+'jumptonavigation' => 'Xikomba-ndlela',
+'jumptosearch' => 'Lava',
 
 # 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'            => 'ta {{SITENAME}}',
-'aboutpage'            => 'Project:ta',
-'currentevents'        => 'Leswi endlekaka sweswi',
-'disclaimers'          => 'Swi alanandzu',
-'disclaimerpage'       => 'Project:Swithsuxa nadzu hikuangara',
-'edithelp'             => 'Mpfuno hi ta mindzulamiso',
-'edithelppage'         => 'Help:Mindzulamiso',
-'helppage'             => 'Help:Leswinga ndzeni',
-'mainpage'             => 'Tlukankulu',
+'aboutsite' => 'ta {{SITENAME}}',
+'aboutpage' => 'Project:ta',
+'copyrightpage' => '{{ns:project}}:Mpfumelelo wo ringisa',
+'currentevents' => 'Leswi endlekaka sweswi',
+'currentevents-url' => 'Project:Leswi endlekaka sweswi',
+'disclaimers' => 'Swi alanandzu',
+'disclaimerpage' => 'Project:Swithsuxa nadzu hikuangara',
+'edithelp' => 'Mpfuno hi ta mindzulamiso',
+'edithelppage' => 'Help:Mindzulamiso',
+'helppage' => 'Help:Leswinga ndzeni',
+'mainpage' => 'Tlukankulu',
 'mainpage-description' => 'Tluka-Nkulu',
-'policy-url'           => 'Project:Policy',
-'portal'               => 'Ntsindza wa muganga',
-'portal-url'           => 'Project:Community Portal',
-'privacy'              => 'Privacy policy',
-'privacypage'          => 'Project:Privacy policy',
+'policy-url' => 'Project:Policy',
+'portal' => 'Ntsindza wa muganga',
+'portal-url' => 'Project:Community Portal',
+'privacy' => 'Privacy policy',
+'privacypage' => 'Project:Privacy policy',
 
-'badaccess'        => 'Xihoxo hita mpfumelelo',
+'badaccess' => 'Xihoxo hita mpfumelelo',
 'badaccess-group0' => 'U hava mpumelelo wo endla xikombelo lexi.',
 'badaccess-groups' => 'The action you have requested is limited to users in one of the groups $1.',
 
-'versionrequired'     => 'Version $1 of MediaWiki required',
+'versionrequired' => 'Version $1 of MediaWiki required',
 'versionrequiredtext' => 'Version $1 of MediaWiki is required to use this page.
 See [[Special:Version|version page]].',
 
-'ok'                      => 'Hiswona',
-'retrievedfrom'           => 'ku suka e "$1"',
-'youhavenewmessages'      => 'U na $1 ($2).',
-'newmessageslink'         => 'Marungula mantswa',
-'newmessagesdifflink'     => 'last change',
+'ok' => 'Hiswona',
+'retrievedfrom' => 'ku suka e "$1"',
+'youhavenewmessages' => 'U na $1 ($2).',
+'newmessageslink' => 'Marungula mantswa',
+'newmessagesdifflink' => 'last change',
 'youhavenewmessagesmulti' => 'Una marungula mantswa hi $1',
-'editsection'             => 'Lulamisa',
-'editold'                 => 'Lulamisa',
-'viewsourceold'           => 'Languta vutsari-ntumbuluko',
-'editlink'                => 'Lulamisa',
-'editsectionhint'         => 'Lulamisa xiphemu: $1',
-'toc'                     => 'Leswinga ndzeni',
-'showtoc'                 => 'Kombisa',
-'hidetoc'                 => 'Tumbeta',
-'thisisdeleted'           => 'Langutisa kumbe Thlerisela $1?',
-'viewdeleted'             => 'Langutisa $1?',
-'restorelink'             => '{{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
-'feedlinks'               => 'Feed:',
-'feed-invalid'            => 'Invalid subscription feed type.',
-'feed-unavailable'        => 'Syndication feeds are not available on {{SITENAME}}',
-'site-rss-feed'           => '$1 RSS Feed',
-'site-atom-feed'          => '$1 Atom Feed',
-'page-rss-feed'           => '"$1" RSS Feed',
-'page-atom-feed'          => '"$1" Atom Feed',
-'red-link-title'          => '$1 (Arisi tsariwa)',
+'editsection' => 'Lulamisa',
+'editold' => 'Lulamisa',
+'viewsourceold' => 'Languta vutsari-ntumbuluko',
+'editlink' => 'Lulamisa',
+'viewsourcelink' => 'Languta xihlovo',
+'editsectionhint' => 'Lulamisa xiphemu: $1',
+'toc' => 'Leswinga ndzeni',
+'showtoc' => 'Kombisa',
+'hidetoc' => 'Tumbeta',
+'thisisdeleted' => 'Langutisa kumbe Thlerisela $1?',
+'viewdeleted' => 'Langutisa $1?',
+'restorelink' => '{{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
+'feedlinks' => 'Feed:',
+'feed-invalid' => 'Invalid subscription feed type.',
+'feed-unavailable' => 'Syndication feeds are not available on {{SITENAME}}',
+'site-rss-feed' => '$1 RSS Feed',
+'site-atom-feed' => '$1 Atom Feed',
+'page-rss-feed' => '"$1" RSS Feed',
+'page-atom-feed' => '"$1" Atom Feed',
+'red-link-title' => '$1 (Tluka leri, arisi tsariwa)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'      => 'Tluka',
-'nstab-user'      => 'Tluka ra mutirhisi',
-'nstab-media'     => 'Media page',
-'nstab-special'   => 'Hlawuleka',
-'nstab-project'   => 'Tluka ra Phurojeki',
-'nstab-image'     => 'Fayili',
+'nstab-main' => 'Tluka',
+'nstab-user' => 'Tluka ra mutirhisi',
+'nstab-media' => 'Media page',
+'nstab-special' => 'Tluka ro hlawuleka',
+'nstab-project' => 'Tluka ra Phurojeki',
+'nstab-image' => 'Fayili',
 'nstab-mediawiki' => 'Rungula',
-'nstab-template'  => 'Template',
-'nstab-help'      => 'Tluka ra mpfuno',
-'nstab-category'  => 'Xiyenge',
+'nstab-template' => 'Template',
+'nstab-help' => 'Tluka ra mpfuno',
+'nstab-category' => 'Xiyenge',
 
 # Main script and global functions
-'nosuchaction'      => 'Kuhava xiendlo xo tano',
-'nosuchactiontext'  => 'Xikombelo xa URL a xitwisisiwi hi wiki',
+'nosuchaction' => 'Kuhava xiendlo xo tano',
+'nosuchactiontext' => 'Xikombelo xa URL a xitwisisiwi hi wiki',
 'nosuchspecialpage' => 'Ku hava Tluka rero rohlawuleka',
 'nospecialpagetext' => '<strong>U kombele tluka ro hlawuleka ro ka ri nga ri kona.</strong>
 
 Vona nxaxamelo wa ma tluka yo hlawuleka e [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error'                => 'Xihoxo',
-'databaseerror'        => 'Xihoxo xo Database',
-'dberrortext'          => 'A database query syntax error has occurred.
+'error' => 'Xihoxo',
+'databaseerror' => 'Xihoxo xo Database',
+'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>".
 MySQL returned error "<tt>$3: $4</tt>".',
-'dberrortextcl'        => 'A database query syntax error has occurred.
+'dberrortextcl' => 'A database query syntax error has occurred.
 The last attempted database query was:
 "$1"
 from within function "$2".
 MySQL returned error "$3: $4"',
-'laggedslavemode'      => 'Warning: Page may not contain recent updates.',
-'readonly'             => 'Database locked',
-'enterlockreason'      => 'Enter a reason for the lock, including an estimate of when the lock will be released',
-'readonlytext'         => 'The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.
+'laggedslavemode' => 'Warning: Page may not contain recent updates.',
+'readonly' => 'Database locked',
+'enterlockreason' => 'Enter a reason for the lock, including an estimate of when the lock will be released',
+'readonlytext' => 'The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.
 
 The administrator who locked it offered this explanation: $1',
-'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 administrator, making note of the URL.',
-'missingarticle-rev'   => '(revision#: $1)',
-'missingarticle-diff'  => '(Diff: $1, $2)',
-'readonly_lag'         => 'The database has been automatically locked while the slave database servers catch up to the master',
-'internalerror'        => 'Xihoxo xa le ndzeni',
-'internalerror_info'   => 'Internal error: $1',
-'filecopyerror'        => 'Could not copy file "$1" to "$2".',
-'filerenameerror'      => 'Could not rename file "$1" to "$2".',
-'filedeleteerror'      => 'Could not delete file "$1".',
+'missing-article' => 'Tsalwa leri uri lavaka eka tluka leri vuriwaka  "$1" $2, ari kumekanga eka nghula.
+
+Leswi swinga vangiwa hi kuva u landzele xithlavinyeti lexi hundzeriweke hi nkari kumbe tluka leri suriweke.
+
+Loko leswi swingari xona xivangelo, ungava ukume xigalana eka xitirhisi lexi.
+Ukomberiwa ku pota xigalana lexi eka [[Special:ListUsers/sysop|mulanguteri]], u rhumela na xithlavinyeti xa URL.',
+'missingarticle-rev' => '(revision#: $1)',
+'missingarticle-diff' => '(Diff: $1, $2)',
+'readonly_lag' => 'The database has been automatically locked while the slave database servers catch up to the master',
+'internalerror' => 'Xihoxo xa le ndzeni',
+'internalerror_info' => 'Internal error: $1',
+'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".',
-'formerror'            => 'Error: could not submit form',
-'badarticleerror'      => 'This action cannot be performed on this page.',
-'cannotdelete'         => 'Could not delete the page or file specified.
+'filenotfound' => 'Could not find file "$1".',
+'fileexistserror' => 'Unable to write to file "$1": file exists',
+'unexpected' => 'Unexpected value: "$1"="$2".',
+'formerror' => 'Error: could not submit form',
+'badarticleerror' => 'This action cannot be performed on this page.',
+'cannotdelete' => 'Could not delete the page or file specified.
 It may have already been deleted by someone else.',
-'badtitle'             => 'Bad title',
-'badtitletext'         => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
+'badtitle' => 'Bad title',
+'badtitletext' => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
 It may contain one or more characters which cannot be used in titles.',
 'querypage-no-updates' => 'Updates for this page are currently disabled.
 Data here will not presently be refreshed.',
 'wrong_wfQuery_params' => 'Incorrect parameters to wfQuery()<br />
 Function: $1<br />
 Query: $2',
-'viewsource'           => 'Vona tsalwa-tumbuluxa',
+'viewsource' => 'Vona tsalwa-tumbuluxa',
 
 # Login and logout pages
-'yourname'                => 'Vito ra vutirhisi',
-'yourpassword'            => 'Vito-mpfungulo:',
-'login'                   => 'Pfula u nghena',
+'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.
+Tsundzuka leswaku matluka man'wana mangaha komba onge upfule unghena eka wiki, loko ungasi sula tluka rakhompuyuta leri tsundzukaka matluka lawa uma vhakeleke.",
+'welcomecreation' => '== Hoyohoyo, eka Wena $1 ! ==
+Akhawunti yawena yitumbuluxiwile.
+Unda rivali ku cinca [[Special:Preferences|{{SITENAME}} minhlawulo ya wena]].',
+'yourname' => 'Vito ra vutirhisi',
+'yourpassword' => 'Vito-mpfungulo:',
+'yourpasswordagain' => 'Thlela u hoxa ritompfungulo ra wena:',
+'remembermypassword' => 'Tsundzuka ku nghena eka Khompuyuta leyi (kufikela eka $1 {{PLURAL:$1|siku|masiku}})',
+'login' => 'Pfula u nghena',
 'nav-login-createaccount' => 'Pfula unghena / Tumbuluxa akhawunti',
-'userlogin'               => 'Pfula unghena / Tumbuluxa akhawunti',
-'logout'                  => 'Pfala u famba',
-'userlogout'              => 'Pfala u famba',
-'nologinlink'             => 'Tumbuluxa akhawunti',
-'createaccount'           => 'Tumbuluxa akhawunti',
+'loginprompt' => 'U fanele ku pfumelela swipfuneti leswaku u pfula unghena eka {{SITENAME}}.',
+'userlogin' => 'Pfula unghena / Tumbuluxa akhawunti',
+'logout' => 'Pfala u famba',
+'userlogout' => 'Pfala u famba',
+'nologin' => 'Xana upfumala akhawunti? $1.',
+'nologinlink' => 'Tumbuluxa akhawunti',
+'createaccount' => 'Tumbuluxa akhawunti',
+'gotaccount' => 'Xna una akhawunti hi khale? $1.',
+'gotaccountlink' => 'Pfula unghena',
+'userlogin-resetlink' => 'Xana u rivele vuxokoxoko bya wena byo pfula unghena?',
+'loginsuccess' => "'''Ule ndzeni ka {{SITENAME}} tani hi \"\$1\".'''",
+'mailmypassword' => 'Rhumela vito-mpfungulo lerintwsa',
+'loginlanguagelabel' => 'Ririmi: $1',
+
+# Edit page toolbar
+'bold_sample' => 'Marito yo bumbula',
+'bold_tip' => 'Marito yo bumbula',
+'italic_sample' => 'Tsalawa ra xitaliki',
+'italic_tip' => 'Tsalawa ra xitaliki',
+'link_sample' => 'Khwekerisa nhlokomhaka',
+'link_tip' => 'Xikhwekerisi xala ndzeni ka wiki leyi',
+'extlink_sample' => 'http://www.example.com khwekerisa nhlokomhaka',
+'extlink_tip' => 'Xikhwekerisi xa tluka ralehandle ka wiki leyi (tsundzuka xi rhangi xa http:// )',
+'headline_sample' => 'tsala ra nhlokomhaka',
+'headline_tip' => 'Nhloko mhaka ya xiyenge xa 2',
+'nowiki_sample' => 'Hoxa xivulwa lexi nga sasekisiwangiki mavonele laha',
+'nowiki_tip' => 'bakanya kuxongisa marito ka wiki',
+'image_tip' => 'Fayili leyi angarhiweke',
+'media_tip' => 'Xikhwekerisi xa fayili',
+'sig_tip' => 'Nsayino wawena wurina mfungo wa nkarhi',
+'hr_tip' => 'Ntila wo khwatiheta (wu tirhise hivukheta)',
 
 # Edit pages
-'summary'          => 'Nkomiso:',
-'minoredit'        => 'Lowu i ndzulamiso wu tsongo',
-'watchthis'        => 'Langutisa tluka leri',
-'savearticle'      => 'Hlayisa tluka',
-'preview'          => 'Ringanisa',
-'showpreview'      => 'Komba kuringanisa',
-'showdiff'         => 'Komba ku cinca',
-'previewnote'      => "'''Lowu i ndzinganiso ntsena;
+'summary' => 'Nkomiso:',
+'minoredit' => 'Lowu i ndzulamiso wu tsongo',
+'watchthis' => 'Langutisa tluka leri',
+'savearticle' => 'Hlayisa tluka',
+'preview' => 'Ringanisa',
+'showpreview' => 'Komba kuringanisa',
+'showdiff' => 'Komba ku cinca',
+'anoneditwarning' => "'''Watsundzuxiwa:''' awu pfulanga unghena eka wiki leyi.
+Adirese ya khompuyuta ya wena ya IP yita tsariwa eka matimu ya ku lulamisiwa ka tluka leri.",
+'newarticle' => '(yintswa)',
+'newarticletext' => "Ulandzele xikhwekerisi lexi kombaka tluka leringasi tsariwaka.
+Leswaku u tumbuluxa tluka leri, tsala eka bokisi leringa e hansi (Nkambe unga ye eka [[{{MediaWiki:Helppage}}|tluka ra mpfuno]] kukuma vuxokoxoko lebyi engetelekeke).
+Loko ufike eka tluka leri hixihoxo, thlava bhatheni leyinge '''thlelela'''.",
+'noarticletext' => 'Kuhava matsalwa eka tluka leri.
+Unga [[Special:Search/{{PAGENAME}}|lavalava nhlokomhaka ya tluka leri]] eka matluka man\'wana,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lavalava eka nghula leyiyelanaka],
+kumbe [{{fullurl:{{FULLPAGENAME}}|action=edit}} u hlakarhelisa tluka leri]</span>.',
+'noarticletext-nopermission' => 'Kuhava matsalwa eka tluka leri.
+Unga [[Special:Search/{{PAGENAME}}|lavalava nhlokomhaka ya tluka leri]] endzeni ka matluka man\'wana,
+kumbe u <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lavalava eka nghula leyiyelanaka]</span>.',
+'previewnote' => "'''Lowu i ndzinganiso ntsena;
 kucinca a ku sihlayisiwa!'''",
+'editing' => 'Ulekululamiseni ka $1',
+'editingsection' => 'Ndzulamiso wa $1 (Xiyenge)',
 'copyrightwarning' => "Xiya leswaku minyikelo hinkwayo e ka {{SITENAME}} yi tekiwa yitshuxiwe e hansi ka $2 (Vona $1 ku kuma vuxokoxoko).
 loko unga tsakeli leswaku vutsari bya wena byi lulamisiwa no aviwa handle ko tweriwa vusiwana, unga tsari laha.<br />
 U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe leswi u swinyikelaka u swi tekile e xihloveni xa lerivaleni kumbe laha kunga na mpfumelelo wa mani na mani.
 '''UNGA RHUMERI MATSALWA LA MA SIRHELERIWEKE HANDLE KA MPFUMELELO!'''",
+'templatesused' => '{{PLURAL:$1|Xivumbiwa ntirho lexi|Swivumbiwa ntirho leswi}} tirhisiweke eka tluka leri:',
+'template-protected' => '(Ri sirheleriwile)',
+'template-semiprotected' => '(lisirheleriwile switsanana)',
+'hiddencategories' => 'Tluka leri i nandza wa {{PLURAL:$1|ntlwa lowu tumbetiweke|$1 mintlawa leyi tumbetiweke}}:',
+'permissionserrorstext-withaction' => 'Awupfumeleriwanga ku $2, hikwalaho ka {{PLURAL:$1|wa xivangelo|wa swivangelo}}:',
+'recreate-moveddeleted-warn' => "'''Tivonele: utumbuluxa tluka leri raha ku suriwa kungarikhale.'''
+
+Nhlahluvisisa loko swifanerile ku ya emahlweni u lulamisa tluka leri.
+Matimu yo sula no susa ma kombila laha ehansi ku ku pfuna:",
+'moveddeleted-notice' => 'Tluka leri ri suriwile.
+nhula ya minxaxamelo leyi kombaka ku suriwa na ku susiwa ka tluka leri ya kombiwa laha ehansi.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''Tivonele:''' xivumbiwa-ntirho xa ntsengo xitele ngopfu.
+swivumbiwa-ntirho swin'wana aswinge xaxametiwi.",
+'post-expand-template-inclusion-category' => 'Matluka lawa xivumbiwa-ntirho xa wona xi lavaka ntsengo ma hundze mpimo',
+'post-expand-template-argument-warning' => "'''Tivonele:''' Tluka leri ritamele xin'we xaswi hlamuseri kumbe kutlula xa xivumbiwa ntirho lexi tlulaka mpiwo wo ndlndlamuxa xivumbiwa-ntirho lexi.
+Swi hlamuseri leswi swi susiwile eka tluka leri.",
+'post-expand-template-argument-category' => 'Matluka lama kayivelaka swihlamuseri leswitirhisiwaka hi swivumbiwa-ntirho',
 
 # History pages
-'next'                 => 'Leswilandzelaka',
-'last'                 => 'Swo hetelela',
-'page_first'           => 'Xo sungula',
+'viewpagelogs' => 'Vona nghula ya minxaxamelo ya tluka leri',
+'currentrev-asof' => 'Mindzulamiso ya sweswinyana ya $1',
+'revisionasof' => 'Ndzulamiso kusukela hi $1',
+'revision-info' => 'Mindzulamiso ku sukela hi $1 leyi endliweke hi $2',
+'previousrevision' => '← Ndzulamiso wakhale',
+'nextrevision' => 'Ndzulamiso wa sweswinyana →',
+'currentrevisionlink' => 'Ndzulamiso wasweswinyana',
+'cur' => 'sweswi',
+'next' => 'Leswilandzelaka',
+'last' => 'Swo hetelela',
+'page_first' => 'Xo sungula',
+'histlegend' => "Leswaku uhambanisa mindzulamiso: thlava eka swifungu swa xirhendzevutana swa mindzulamiso leyi hambanaka ivi u thlava bhatheni leyi nge \"Enter\" eka Khibhodi ya wena kumbe bhatheni leyi kombiweke ehansi.<br />
+Swihlamuseri: '''({{int:sweswi}})''' = kuhambana na ndzulamiso wa sweswinyana, '''({{int:khale}})''' = kuhambana na ndzulamiso lowu tlhandlamaka lowu, '''{{int:minoreditletter}}''' = ndzulamiso lowu tsanana.",
+'history-fieldset-title' => 'Langutisa matimu',
 'history-show-deleted' => 'Leswi suriweke ntsena',
+'histfirst' => 'Swa khalenyana',
+'histlast' => 'Swa sweswinyana',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 hi $2',
 
 # Revision deletion
 'rev-delundel' => 'Komba/Tumbeta',
-'pagehist'     => 'Matimu ya tluka',
-'deletedhist'  => 'Matimu lamasuriweke',
+'revdel-restore' => 'Cinca kuvoniwa',
+'revdel-restore-deleted' => 'Mindzulamiso leyi suriweke',
+'revdel-restore-visible' => 'mindzulamiso leyi voniwaka himani na mani',
+'pagehist' => 'Matimu ya tluka',
+'deletedhist' => 'Matimu lamasuriweke',
 
 # Merge log
 'revertmerge' => 'Hambanisa',
 
+# Diffs
+'history-title' => 'Matimu ya mindulamiso ya "$1"',
+'lineno' => 'Ntila $1:',
+'compareselectedversions' => 'Hambaniisa exikarhi ka mindzulamiso leyi langiweke',
+'editundo' => 'Thlerisela',
+'diff-multi' => '({{PLURAL:$1|ndzulamiso lowu landzeleke|$1 mindzulamiso leyi landzeleke}} hi {{PLURAL:$2|mutirhisi|$2 wavatirhisi}} leyingakombiwangiki)',
+
 # Search results
-'searchhelp-url'        => 'Help:Leswinga ndzeni',
+'searchresults' => 'Lavisisa eka mimbuyelo',
+'searchresults-title' => 'Lavisisa "$1" eka mimbuyelo',
+'prevn' => 'Leswihundzeke  {{PLURAL:$1|$1}}',
+'nextn' => 'Leswilandzelaka  {{PLURAL:$1|$1}}',
+'prevn-title' => '$1 {{PLURAL:$1|nkutlunya lo wu|minkutlunya leyi}} hundzeke',
+'nextn-title' => '$1 {{PLURAL:$1|nkutlunya lowu|minkutlunya leyi}} landzelaka',
+'shown-title' => "Komba $1 {{PLURAL:$1|mbuyelo|mimbuyelo}} eka tluka rin'wana na ri n'wana",
+'viewprevnext' => 'Vona ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Tluka leri vuriwaka \"[[:\$1]]\" ikhale ririkona eka wiki leyi.'''",
+'searchmenu-new' => "'''Tumbuluxa tluka ra \"[[:\$1]]\" eka wiki leyi!'''",
+'searchhelp-url' => 'Help:Leswinga ndzeni',
+'searchprofile-articles' => 'Matluka lama tsariweke',
+'searchprofile-project' => 'Mpfuno na matluka ya phurojeki',
+'searchprofile-images' => 'Tifayili ta mfpumawulo na swifaniso',
+'searchprofile-everything' => 'Hinkwaswo',
+'searchprofile-advanced' => 'Rharhangana',
+'searchprofile-articles-tooltip' => 'Lavisisa eka $1',
+'searchprofile-project-tooltip' => 'Lavisisa eka $1',
+'searchprofile-images-tooltip' => 'Lava tifayili',
+'searchprofile-everything-tooltip' => 'Lavalava eka matsalwa hinkwawo  (kuhlanganisa na matluka ya mbulavulo)',
+'searchprofile-advanced-tooltip' => 'Lavalava eka swisivela mavito leswi tolovelekeke',
+'search-result-size' => '$1 ({{PLURAL:$2|1 viti|$2 maviti}})',
+'search-result-category-size' => '{{PLURAL:$1|nandza|$1 wa malandza}} ({{PLURAL:$2|ntlawa-ntsongo|$2 wa mintlawa-ntsongo}}, {{PLURAL:$3|fayili|$3 wa tifayili}})',
+'search-redirect' => '(nkongomiso kusaka e $1)',
+'search-section' => '(Xiyenge $1)',
+'search-suggest' => 'Xana uvula: $1',
 'search-interwiki-more' => '(Leswi engetelekeke)',
 'search-relatedarticle' => 'Leswi yelanaka',
-'searchrelated'         => 'Yelanaka',
-'searchall'             => 'Hinkwaswo',
-'showingresults'        => "Kombisa e hansi kufika eka {{PLURAL:$1|'''1''' mbuyelo|'''$1''' mimbuyelo}} Kusungula hi#'''$2'''.",
-'powersearch'           => 'Ndzavisiso',
+'searchrelated' => 'Yelanaka',
+'searchall' => 'Hinkwaswo',
+'showingresults' => "Kombisa e hansi kufika eka {{PLURAL:$1|'''1''' mbuyelo|'''$1''' mimbuyelo}} Kusungula hi#'''$2'''.",
+'showingresultsheader' => "{{PLURAL:$5|nkutlunya '''$1''' wa '''$3''' lowu|minkutlunya '''$1 - $2''' ya '''$3''' leyi}} yelanaka na '''$4'''",
+'search-nonefound' => 'Kuhava mimbuyelo leyi yelanaka xikombelo lexi.',
+'powersearch' => 'Ndzavisiso',
 
 # Preferences page
-'mypreferences'   => 'Minhlawulo ya mina',
-'prefs-edits'     => 'Ntsengo wa mindzulamiso:',
-'skin-preview'    => 'Ndzinganiso',
-'prefs-datetime'  => 'Siku na nkarhi',
+'mypreferences' => 'Minhlawulo ya mina',
+'prefs-edits' => 'Ntsengo wa mindzulamiso:',
+'skin-preview' => 'Ndzinganiso',
+'prefs-datetime' => 'Siku na nkarhi',
 'prefs-watchlist' => 'Nxaxamelo wa Leswivoniwaka',
-'saveprefs'       => 'Hlayisa',
-'resetprefs'      => 'sula kucinca lokungahlayisiwangiki',
-'prefs-editing'   => 'Kululamisa',
-'yourrealname'    => 'Vito ra ntiyiso:',
-'yourlanguage'    => 'Ririmi:',
+'saveprefs' => 'Hlayisa',
+'resetprefs' => 'sula kucinca lokungahlayisiwangiki',
+'prefs-editing' => 'Kululamisa',
+'youremail' => 'E-mail:',
+'yourrealname' => 'Vito ra ntiyiso:',
+'yourlanguage' => 'Ririmi:',
+'prefs-help-email' => 'Adiresi ya e-mail ayibohi, kambe yita laveka leswaku u cinca ritompfungulo ra wena, loko swiendleka leswaku u ri rivala.',
+'prefs-help-email-others' => "Unga langa leswaku van'wana va bula na wena hi e-mail hikutirhisa xikhwekeri eka tluka ra wena ravutirhis kumbe eka tluka ra mbulavulo.
+Adiresi ya wena ya e-mail yitunberile loko van'wana va bula na wena.",
 
 # Rights
-'right-read'       => 'Matluka yo Hlaya',
-'right-edit'       => 'Lulamisa ma tluka',
+'right-read' => 'Matluka yo Hlaya',
+'right-edit' => 'Lulamisa ma tluka',
 'right-createpage' => 'Tumbuluxa matluka (mangariki eka matluka ya mbulavulo)',
 'right-createtalk' => 'Tumbuluxa matluka ya mbulavulo',
+'right-move' => "Yisa matluka lawa kun'wana",
+'right-move-subpages' => "yisa matluka lawa na matluka-ntsongo ya wona, kun'wana",
+'right-delete' => 'Sula matluka lawa',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'hlaya tluka leri',
 'action-edit' => 'Lulamisa tluka leri',
+'action-createpage' => 'tumuluxa matluka',
+'action-createtalk' => 'tumbuluxa matluka ya mbulavulo',
+'action-createaccount' => 'tumbuluxa akhawunti ya mutirhisi loyi',
+'action-minoredit' => 'funga ndzulamiso lowu wulri lowintsanana',
+'action-move' => 'Yisa tluka leri ndhzawini yinwana',
+'action-move-subpages' => "Yisa tlukaleri na matluka-nstongo ya rona, endzawini yinw'ana",
 
 # Recent changes
-'recentchanges'    => 'Ku cinca ka sweswi-nyana',
-'hide'             => 'Tumbeta',
-'show'             => 'Komba',
+'nchanges' => '$1 {{PLURAL:$1|wa ndzulamiso|wa mindzulamiso}}',
+'recentchanges' => 'Ku cinca ka sweswi-nyana',
+'recentchanges-legend' => 'Tindlela to langutisa ku cinca ka sweswinyana',
+'recentchangestext' => 'Landzelela mindzulamiso ya sweswinyana ya wiki leyi eka tluka leri.',
+'recentchanges-feed-description' => 'Landzelela mindzulamiso ya sweswinyana eka wiki leyi hi xiphameri-hungu lexi.',
+'recentchanges-label-newpage' => 'Ndzulamiso lowu wu tumbuluxe tluka rintswa',
+'recentchanges-label-minor' => 'Lowu i ndzulamiso wu tsongo',
+'recentchanges-label-bot' => 'Ndzulamiso lowu wu endliwe hi rhobhoto',
+'recentchanges-label-unpatrolled' => 'Ndzulamiso lowu awusi languteriwa',
+'rcnote' => "Lha hansi ku kombiwa {{PLURAL:$1|ku cinca|''$1''' wa mindzulamiso}} endzeni ka  {{PLURAL:$2|siku|'''$2''' wa masiku}} lamahundzeke, hi $5, $4.",
+'rcnotefrom' => "Laha hansi kuxaxametiwe ku cinca kusukela hi '''$2''' (kuya ka '''$1''').",
+'rclistfrom' => 'Komba mindzilamiso leyintswa kusukela eka $1',
+'rcshowhideminor' => '$1 wa mindzulamiso leyi ntsanana',
+'rcshowhidebots' => '$1 wati rhobhoto',
+'rcshowhideliu' => '$1 wa va tirhisi lavanga kona sweswi',
+'rcshowhideanons' => '$1 wa vatirhisi lava tumbeleke',
+'rcshowhidepatr' => '$1 mundzulamiso leyi languteriweke',
+'rcshowhidemine' => '$1 wa mindzulamiso ya mina',
+'rclinks' => 'Kumba $1 ya ku cinca eka $2 wa masiku lamahundzeke<br />$3',
+'diff' => 'Hamban',
+'hist' => 'Matimu',
+'hide' => 'Tumbeta',
+'show' => 'Komba',
+'minoreditletter' => 'Tsan',
+'newpageletter' => 'Rintswa',
+'boteditletter' => 'Rhob',
+'rc-enhanced-expand' => 'Komba vuxokoxoko (yi tirhisa tswala ra Java)',
 'rc-enhanced-hide' => 'Tumbeta vuxokoxoko',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Kuncica loku yelanaka',
-'recentchangeslinked-feed'    => 'Kuncica loku yelanaka',
+'recentchangeslinked' => 'Kuncica loku yelanaka',
+'recentchangeslinked-feed' => 'Kuncica loku yelanaka',
 'recentchangeslinked-toolbox' => 'Kuncica loku yelanaka',
+'recentchangeslinked-title' => 'Kucinca loku yelanaka na "$1"',
+'recentchangeslinked-noresult' => 'Kuhava mindzulamiso eka matluka lawa eka nkarhi lowu langiweke',
+'recentchangeslinked-summary' => "Lowu inxaxamelo wa kucinca kasweswinyana loku endliweke eka matluka la ma khwekelaka eka tluka leri u rilavaka (kumbe yinw'ana ya mitlawa leyi yelanaka).Matluka lawa [[Special:Watchlist|umalanguteke]] ma '''bumburisiwile'''.",
+'recentchangeslinked-page' => 'Vito ratluka:',
+'recentchangeslinked-to' => 'Komba kucinca eka matluka lama khwekelaka eka tluka leri ntsena',
 
 # Upload
 'upload' => 'Khandziyisa fayili',
+'uploadlogpage' => 'Ngula ya nxaxamelo wa swilo leswi hoxiweke',
+'filedesc' => 'Nkomiso',
+'uploadedimage' => 'kuhoxiwe fayili ya "[[$1]]"',
+
+'license' => 'Nawu wo pfumelela',
+'license-header' => 'Nawu wo pfumelela',
 
 # Special:ListFiles
-'imgfile'        => 'fayili',
-'listfiles'      => 'Nxaxamelo wa tifayili',
+'imgfile' => 'fayili',
+'listfiles' => 'Nxaxamelo wa tifayili',
 'listfiles_date' => 'Siku',
 'listfiles_name' => 'vito',
 
 # File description page
-'file-anchor-link'   => 'Fayili',
+'file-anchor-link' => 'Fayili',
+'filehist' => 'Matimu ya fayili',
+'filehist-help' => 'thlava eka siku/nkarhi leswaku u vona leswi fayili ayirixiswona hi knarhi walowo',
 'filehist-deleteall' => 'sula hinkwaswo',
 'filehist-deleteone' => 'Dlaya',
-'filehist-revert'    => 'thlerisela',
-'filehist-datetime'  => 'Siku/Nkarhi',
-'filehist-user'      => 'Mutirhisi',
+'filehist-revert' => 'thlerisela',
+'filehist-current' => 'Sweswinyana',
+'filehist-datetime' => 'Siku/Nkarhi',
+'filehist-thumb' => 'Xifanisonyana',
+'filehist-thumbtext' => 'Xifaniso lexi tsongahatiweke kusukela hi $1',
+'filehist-user' => 'Mutirhisi',
+'filehist-dimensions' => 'Mpimo',
+'filehist-comment' => 'Nhlamulo',
+'imagelinks' => 'Ntsengo wakutirhisiwa ka fiyili leyi',
+'linkstoimage' => ' {{PLURAL:$1|tluka leri rikhekela|$1 matluka lawa makhwekela}} eka fayili leyi:',
+'nolinkstoimage' => 'Kuhava tluka leri khwekelaka eka fayili leyi',
+'sharedupload-desc-here' => "Fayili leyi yi suka e $1 naswona swinga endleka leswaku yi tirhisiwa hiti phurojeki tin'wanana.
+Nhlamuselo ya yona leyi nge ndzeni ka [$2 tluka ro hlamusela] hi yona leyi kombiweke ehansi.",
+
+# Random page
+'randompage' => "Tluka rin'wana na rin'wana",
 
 # Statistics
 'statistics' => 'Mintsengo',
 
+'disambiguationspage' => 'Template:Hambanisa marito',
+
 # Miscellaneous special pages
-'newpages'     => 'Matluka mantswa',
-'move'         => 'Yi sa kunwana',
+'nbytes' => '$1 {{PLURAL:$1|wa bayiti|wa tibayit}}',
+'nmembers' => '$1 {{PLURAL:$1|museketeri| wa vaseketeri}}',
+'prefixindex' => 'Matluka hinkwawo lama sungulaka hi',
+'usercreated' => '{{GENDER:$3|u tumbuluxe}} hi siku ra $1 hinkarhi wa $2',
+'newpages' => 'Matluka mantswa',
+'move' => 'Yi sa kunwana',
 'movethispage' => 'Yisa tluka leri ndhzawini yinwana',
+'pager-newer-n' => '{{PLURAL:$1|xa khale|$1 swa khale}}',
+'pager-older-n' => '{{PLURAL:$1|ra khale|$1 ya khale}}',
+
+# Book sources
+'booksources' => 'Swihlovo swatibuku',
+'booksources-search-legend' => 'Lavalava swihlovo swa tibuku',
+'booksources-go' => 'Nghena',
 
 # Special:Log
 'specialloguserlabel' => 'Mutirhisi:',
+'log' => 'Nghula ya minxaxamelo',
 
 # Special:AllPages
-'allpages'       => 'Matluka hinkwawo',
+'allpages' => 'Matluka hinkwawo',
 'alphaindexline' => '$1 kuya fika eka $2',
-'allarticles'    => 'Matluka hinkwawo',
+'allarticles' => 'Matluka hinkwawo',
+'allpagessubmit' => 'Nghena',
+
+# Special:Categories
+'categories' => 'Mintlawa',
 
 # Special:LinkSearch
 'linksearch-ok' => 'Lava',
+'linksearch-line' => '$1 yi khwekerisiwe kusuka eka $2',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Nghula ya nxaxamelo wa ku tumbuluxiwa ka vatirhisi',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(nxaxamelo wa valandzeri)',
 
 # E-mail user
 'emailuser' => 'rhumela mutirhisi loyi E-mail',
 
 # Watchlist
-'watchlist'     => 'Leswi ndziswilanguteke',
-'mywatchlist'   => 'Leswi ndziswilanguteke',
-'watch'         => 'Languta',
+'watchlist' => 'Leswi ndziswilanguteke',
+'mywatchlist' => 'Leswi ndziswilanguteke',
+'watchlistfor2' => 'Swa $1 $2',
+'watch' => 'Languta',
 'watchthispage' => 'Languta tluka leri',
-'unwatch'       => 'Ungalanguti',
+'unwatch' => 'Ungalanguti',
+'watchlist-details' => '{{PLURAL:$1|$1 tluka|$1 wa matluka}} eka nxaxamelo wa leswi uswilanguteke, kungasi hlayiwa matluka yu mbulavulo.',
+'wlshowlast' => 'Komba $1 wati awara  $2 wa masiku kumbe $3',
+'watchlist-options' => 'Minhlawulo ya nxaxamelo wa leswilangutiweke',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Ulangutile...',
+'watching' => 'Ulangutile...',
 'unwatching' => 'Utshika ku languta...',
 
+# Delete
+'actioncomplete' => 'Swiendlekile',
+'actionfailed' => 'Switsandzile',
+'dellogpage' => 'Nghula ya matluka lama suriweke',
+
+# Rollback
+'rollbacklink' => 'thlerisela ku cinca',
+
+# Protect
+'protectlogpage' => 'Nghula ya minxaxamelo ya matsalwa lama sirheleriweke',
+'protectedarticle' => '"[[$1]]" risirheleriwile',
+
+# Undelete
+'undeletelink' => 'Langutisa/thlerisela',
+'undeleteviewlink' => 'Langutisa',
+
 # Namespace form on various pages
-'invert'         => 'Invert selection',
+'namespace' => 'Swikhomela viti',
+'invert' => 'Invert selection',
 'blanknamespace' => '(Ntsindza)',
 
 # Contributions
 'contributions' => 'Minyikelo ya mutirhisi',
-'mycontris'     => 'Minyikelo ya mina',
-'contribsub2'   => 'For $1 ($2)',
-'nocontribs'    => 'Ku hava ku cinca loku kumiweke eka xiyenge lexi.',
-'uctop'         => '(Henhla)',
-'month'         => 'Kusukela e ka nhweti ya (kuya endhzaku):',
-'year'          => 'Ku sukela e ka lembe ra (kuya endhzaku):',
-
-'sp-contributions-newbies'     => 'Komba minyikela ya ti akhawunti tintswa ntsena',
+'contributions-title' => 'Minyikelo ya vutirhisi ya $1',
+'mycontris' => 'Minyikelo ya mina',
+'contribsub2' => 'For $1 ($2)',
+'nocontribs' => 'Ku hava ku cinca loku kumiweke eka xiyenge lexi.',
+'uctop' => '(Henhla)',
+'month' => 'Kusukela e ka nhweti ya (kuya endhzaku):',
+'year' => 'Ku sukela e ka lembe ra (kuya endhzaku):',
+
+'sp-contributions-newbies' => 'Komba minyikela ya ti akhawunti tintswa ntsena',
 'sp-contributions-newbies-sub' => 'Eka ti akhawunti ti ntswa',
-'sp-contributions-talk'        => 'Mbulavulo',
-'sp-contributions-search'      => 'Lava minyikelo',
+'sp-contributions-blocklog' => 'Ngula ya nxaxamelo wa kusivela',
+'sp-contributions-uploads' => 'Nxaxamelo wa ku nghenisa',
+'sp-contributions-logs' => 'Nghula ya nxaxamelo',
+'sp-contributions-talk' => 'Mbulavulo',
+'sp-contributions-search' => 'Lava minyikelo',
+'sp-contributions-username' => 'Hoxa Direse ya IP kumbe vito ra mutirhisi:',
+'sp-contributions-toponly' => 'Komba ntsena mindzulamiso leyi yinga haku endliwa sweswinyana',
+'sp-contributions-submit' => 'Lava',
 
 # What links here
 'whatlinkshere' => 'Leswi khwekelaka laha',
+'whatlinkshere-title' => 'Matluka lama khwekelaka eka $1',
+'whatlinkshere-page' => 'Tluka:',
+'linkshere' => "Matluka lama landzelaka makhwekela eka '''[[:$1]]''':",
+'nolinkshere' => "Kuhava matluka lama khwekelaka eka  '''[[:$1]]'''.",
+'isredirect' => 'Tluka ro kongomisa',
+'istemplate' => 'Swisivela ndhzawu',
+'isimage' => 'Xikhwekerisi xa fayili',
+'whatlinkshere-prev' => '{{PLURAL:$1|leri hundzeka| $1 lama hundzeke}}',
+'whatlinkshere-next' => '{{PLURAL:$1|lowu landzelaka| $1 leyi landzelaka}}',
+'whatlinkshere-links' => '← Swikhwekerisi',
+'whatlinkshere-hideredirs' => '$1 ya matluka yo thlerisela',
+'whatlinkshere-hidetrans' => '$1 wa swisivela ndhzawu',
+'whatlinkshere-hidelinks' => '$1 wa swikhwekeri',
+'whatlinkshere-hideimages' => '$1 swikhwekerisi saw xifaniso',
+'whatlinkshere-filters' => 'Tinhlelo',
 
 # Block/unblock
+'ipboptions' => "Ti awara timbirhi:2 hours,Siku rin'we:1 day,Masiku manharhu:3 days,Vhiki rin'we:1 week,Mavhiki manbirhi:2 weeks,Nhweti yin'we:1 month,Tinwheti tinharhu:3 months,Tinhweti ta ntsevu:6 months,Lembe rin'we:1 year,hilaha kungaheriki:infinite",
+'ipblocklist' => 'Vatirhisi lava siveriweke',
+'blocklink' => 'Sivela',
+'unblocklink' => 'Cinca kusivela',
+'change-blocklink' => 'Cinca xirhapa',
 'contribslink' => 'Minyikelo',
+'blocklogpage' => 'Ngula ya nxaxamelo wa kusiverwa ka vatirhisi',
+'blocklogentry' => 'Nsivelo wa mutirhisi  [[$1]] wu hela hi $2 $3',
+'block-log-flags-nocreate' => 'Kupfula akhawunti swa arisiwa',
+
+# Move page
+'movelogpage' => 'Nghula ya nxaxamelo waku susiwa',
+'revertmove' => 'thlerisela',
+
+# Export
+'export' => 'Rhumela matluka ehandle ka wiki',
 
 # Namespace 8 related
 'allmessagesname' => 'Vito',
+'allmessagesdefault' => 'Tsalwa-hungu leri tolovelekeke',
+
+# Thumbnails
+'thumbnail-more' => 'Kurisa',
+'thumbnail_error' => 'Kuvena xihoxo ekutumbuluxiweni ka xifaniso-ntongo hkwalaho ka: $1',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'     => 'Tluka ra vutirhisi',
-'tooltip-pt-mytalk'       => 'Mbulavulo namina',
-'tooltip-pt-preferences'  => 'Minyikelo ya mina',
-'tooltip-pt-mycontris'    => 'Nxaxamelo wa minyikelo ya mina',
-'tooltip-pt-logout'       => 'pfala u famba',
-'tooltip-ca-protect'      => 'Sirhelela tluka leri',
-'tooltip-ca-delete'       => 'Sula tluka leri',
-'tooltip-ca-move'         => 'Veka tluka endhzawini yinwana',
-'tooltip-ca-watch'        => 'Hoxa tluka leri eka leswi uswilanguteke',
-'tooltip-n-mainpage'      => 'Endzela tlukankulu',
+'tooltip-pt-userpage' => 'Tluka ra wena ra vutirhisi',
+'tooltip-pt-mytalk' => 'Tluka ro vulavula ra wena',
+'tooltip-pt-preferences' => 'Minyikelo ya mina',
+'tooltip-pt-watchlist' => 'Nxaxamelo wa matluka lawa umalanguteleke kucinca',
+'tooltip-pt-mycontris' => 'Nxaxamelo wa minyikelo hinkwayo ya wena',
+'tooltip-pt-login' => 'Utsundzuxiwa ku pfula unghena; hambiswiritano, aswi bohi',
+'tooltip-pt-logout' => 'pfala u famba',
+'tooltip-ca-talk' => 'Mbulavuriswano hi tluka',
+'tooltip-ca-edit' => 'Unga lulamisa tluka leri. Ukomberiwa ku komba kuringanisa ka ku cinca ka wena ungasi rihlayisa',
+'tooltip-ca-addsection' => 'Sungula xiyenge lexinthswa',
+'tooltip-ca-viewsource' => 'Papila leri risirheleriwile.
+Unga vona xit\\holvo xa rona',
+'tooltip-ca-history' => 'Mindzulamiso yakhale ya tluka leri',
+'tooltip-ca-protect' => 'Sirhelela tluka leri',
+'tooltip-ca-delete' => 'Sula tluka leri',
+'tooltip-ca-move' => 'Veka tluka endhzawini yinwana',
+'tooltip-ca-watch' => 'Hoxa tluka leri eka leswi uswilanguteke',
+'tooltip-ca-unwatch' => 'Susa tluka leri eka leswi uswi languteke',
+'tooltip-search' => 'Lavisisa {{SITENAME}}',
+'tooltip-search-go' => 'Yana eka tluka leri fanaka na viti leri loko ririkona',
+'tooltip-search-fulltext' => 'Lavisisa riviti leri eka matluka lawa',
+'tooltip-p-logo' => 'Vhakela tluka-nkulu',
+'tooltip-n-mainpage' => 'Endzela tlukankulu',
+'tooltip-n-mainpage-description' => 'Vhakela tlukankulu',
+'tooltip-n-portal' => 'Leswi engetelekeke hi phurojeki leyi, leswi undla swi endlaka, laha unga kumana kona switirhisiwa',
+'tooltip-n-currentevents' => 'Kuma vuxokoxoko hi leswi endlekaka sweswi',
+'tooltip-n-recentchanges' => 'Nxaxamelo wa kucinca ka sweswinyana eka wiki',
+'tooltip-n-randompage' => "Vona tluka rin'wana na rin'wana",
+'tooltip-n-help' => 'Ndzawu yo twisisa leswi',
 'tooltip-t-whatlinkshere' => 'Nxaxamelo wa matluka lama khwekelaka laha',
-'tooltip-t-upload'        => 'Khandziyisa tifayili',
-'tooltip-t-specialpages'  => 'Nxaxamelo wa matluka yo hlawuleka',
-'tooltip-ca-nstab-user'   => 'Vona tluka ra mutirhisi',
-'tooltip-save'            => 'Hlayiso ku cinca ka wena',
-'tooltip-preview'         => 'Ringanisa ku cinca loku uku endleke, Tirhisa Xitirhisiwa lexi ungasi hlayisa tluka leri!',
-'tooltip-summary'         => 'Tsala nkomiso',
+'tooltip-t-recentchangeslinked' => 'Kucinca kasweswinyana ka matluka la ma thlavinyetiweke eka tluka leri',
+'tooltip-feed-atom' => 'Vuhaxi bya Atom bya tluka leri',
+'tooltip-t-contributions' => 'Nxaxamelo wa minyikelo ya mutirhisi loyi',
+'tooltip-t-emailuser' => 'Rhumela mutirhisa loyi e-mail',
+'tooltip-t-upload' => 'Khandziyisa tifayili',
+'tooltip-t-specialpages' => 'Nxaxamelo wa matluka yo hlawuleka',
+'tooltip-t-print' => 'Gangliso wa tluka leri',
+'tooltip-t-permalink' => 'Xithlavinyeti xa nkarhi hinkwawo xa ndzulamiso wa tluka',
+'tooltip-ca-nstab-main' => 'Langutisa tluka ra matsalwa',
+'tooltip-ca-nstab-user' => 'Vona tluka ra mutirhisi',
+'tooltip-ca-nstab-special' => 'Tluka leri rihlawulekile, awu pfumeleriwanga ku endla ndzulamiso eka rona hikukongoma',
+'tooltip-ca-nstab-project' => 'Vona tluka ra phurojeki',
+'tooltip-ca-nstab-image' => 'Vona tluka ra fayili leyi',
+'tooltip-ca-nstab-template' => 'Langutisa xivumbiwa-ntirho',
+'tooltip-ca-nstab-category' => 'Langutisa tluka ra ntlawa',
+'tooltip-minoredit' => 'Fungha ndzulamiso lowu wuri lowu tsanana',
+'tooltip-save' => 'Hlayiso ku cinca ka wena',
+'tooltip-preview' => 'Ringanisa ku cinca loku uku endleke, Tirhisa Xitirhisiwa lexi ungasi hlayisa tluka leri!',
+'tooltip-diff' => 'Komba kucinca loku uku endleke aka xivulwa',
+'tooltip-compareselectedversions' => 'Vona kuhambana exikarhi ka mindzulamiso leyi uyilangeke ya tluka leri',
+'tooltip-watch' => 'Hoxa tluka leri eka nxaxamelo wa matluka lawa umalanguteke',
+'tooltip-rollback' => 'Xirhangi "Thlerisela" xita thlerisela ku cinca lokuendliweke hi mutirhisi wo hetelela eka tluka leri hi ku thlava kan\'we',
+'tooltip-undo' => 'xi angi "thlerisela" xithlerisela ndzulamiso lowu naswona xi pfula foromo yo lulamisa eka matsamelo yo ringanisa ndzulamiso. Yipfumela leswaku u engetela xivangela xa ndzulamiso lowu eka nkomiso.',
+'tooltip-summary' => 'Tsala nkomiso',
+
+# Browsing diffs
+'previousdiff' => '← Ndzulamiso wakhale',
+'nextdiff' => 'Ndzulamiso lowu ntswa →',
+
+# Media information
+'file-info-size' => '$1 × $2 ku anama na leha hi ti phikisele, Vukulu bya fayili: $3, muxaka waMIME: $4',
+'file-nohires' => 'Xifaniso lexi axikuriseki kuhundza laha.',
+'svg-long-desc' => 'Fayili ya SVG, vukulu lebyi ringaneke $1 × $2 hi ti phikisele, vukulu bya fayili: $3',
+'show-big-image' => 'kuleha na ku anama hixitalo',
+
+# Bad image list
+'bad_image_list' => 'Minxaxamelo leyi landzelaka yi andlariwe hindlela leyi:
+
+nxaxamelo wa mintila (Mintila leyi sungulaka hi *) ntsena le yi kombiwaka.
+Xithlavinyeti xo sungula eka ntila i xithlavinyeta fayili leyi onhiweke.
+Swithlavinyeti leswi engetelekeke eka ntila lowu fanaka swilangutiwa swiri swihambukisi, hileswaku matluka lawa fiyili yinga kumekaka kona endzeni.',
+
+# Metadata
+'metadata' => 'Nghula ya vuxokoxoko',
+'metadata-help' => 'Fayili leyi yi khome vuxokoxoko lebyi engetelekeke, swingaendleka yi hoxiwile kusuka eka Khemera kumbe muchini wo gandlisa lowu tirhisiweke ku yi tumbuluxa.
+Loko fayili yi antswisiwile kusukela eka matshamelo ya yona yo sungula, vuxokoxoko bya yona byinga va byi cincile.',
+'metadata-fields' => "Vuxokoxoko bya xifaniso lexi nga eka hungu leri byi ta kombiwa eka tluka leri kombaka xifaniso lexi loko tafula ra nxaxamela wa vuxokoxoko ri pfariwa.
+Lebyi n'wana vuxokoxoko bya finiso byitumbetiwile.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude",
+
+# External editor support
+'edit-externally' => 'Lulamisa fayili leyi utirhisa xilulamisi xale handle ka wiki leyi',
+'edit-externally-help' => '(Vona [//www.mediawiki.org/wiki/Manual:External_editors swiletelo swo sungurisa] leswaku ukuma vuxokoxoko lebyi engetelekeke)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'Hinkwawo',
+'namespacesall' => 'Hinkwawo',
+'monthsall' => 'hikwato',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'Vona kucinca loku yelanaka',
+'watchlisttools-edit' => 'Langutisa naswona u lulamisa nxaxamelo wa leswilangutiweke',
+'watchlisttools-raw' => 'Lulamisa nxaxamelo-mbisi wa leswilangutiweke',
+
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Tivonele\'\'\' mpfungulo wo hluta wa "$2" wu rhangela lowa "$1"',
 
 # Special:SpecialPages
 'specialpages' => 'Matluka yo hlawuleka',
 
+# External image whitelist
+'external_image_whitelist' => ' #Tshika ntila lowu wunga cinciwanga<pre>
+#Hoxa hlamuselo lowu tolovelekeke (xiphemu lexi nga exikarhi ka //) laha hansi
+#Swita hlanganisiwa na  tiURL to swifaniso swa le handle (leswi khwekerisiweke)
+#Leswi yelanaka swi ta kombiwa swiri swifaniso, lokoswingaritano kuta kombiwa ntsena swikhwekerisi swa xifaniso 
+#Mintila leyi sungulaka # yivona kuri ma vonele/nlhamulo
+#Xi lava marito lama xaxametiweke hi marito-nkulu na lama tsongo
+
+#hoxa swiphemu hinkwaswo swa regex ehenhla ka ntilalowu. Tshika ntila lowu wuri leswi wunga xiswona</pre>',
+
+# Special:Tags
+'tag-filter' => 'Xihluti xa [[Special:Tags|Xi angi]]:',
+
 );
index 0cea054..daea741 100644 (file)
@@ -1104,7 +1104,6 @@ $1",
 
 # Diffs
 'history-title' => '$1 битенең үзгәртү тарихы',
-'difference' => '(Юрамалар арасында аерма)',
 'lineno' => '$1 юл:',
 'compareselectedversions' => 'Сайланган юрамаларны чагыштыру',
 'showhideselectedversions' => 'Сайланган юрамаларны күрсәтү/яшерү',
index ad119c1..ca1d641 100644 (file)
@@ -886,7 +886,6 @@ Sez idaräçe bulu säbäple, [$1 yäşerelgän yuramanı qarıy alasız]",
 
 # Diffs
 'history-title' => '$1 biteneñ üzgärtü tarixı',
-'difference' => '(Yuramalar arasında ayırma)',
 'lineno' => '$1 yul:',
 'compareselectedversions' => 'Saylanğan yuramalarnı çağıştıru',
 'showhideselectedversions' => 'Saylanğan yuramalarnı kürsätü/yäşerü',
index b580bd6..1cec5c7 100644 (file)
@@ -284,7 +284,7 @@ $messages = array(
 'site-atom-feed' => '$1 Atom Медээ Агымы',
 'page-rss-feed' => '«$1» RSS Медээ Агымы',
 'page-atom-feed' => '«$1» Atom Медээ Агымы',
-'red-link-title' => '$1 (арынны чок)',
+'red-link-title' => '$1 (арны чок)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Арын',
@@ -444,6 +444,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 'currentrev' => 'Амгы үе үндүрери',
 'currentrev-asof' => 'Амгы $1 үениң бижээни',
 'revisionasof' => '$1 версиязы',
+'revision-info' => '$2 киржикчиниң $1 хүнүнде киирилдези',
 'previousrevision' => '←Артык эрги үндүрери',
 'nextrevision' => 'Артык чаа үндүрери→',
 'currentrevisionlink' => 'Амгы үе үндүрери',
@@ -491,7 +492,6 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 
 # Diffs
 'history-title' => '«$1» деп арынның үндүрери төөгүзү',
-'difference' => '(Үндүрерилер аранда ылгал)',
 'lineno' => 'Одуруг $1:',
 'compareselectedversions' => 'Шилип алган хевирлери деңнээри',
 'editundo' => 'чөрчүүрү',
@@ -519,6 +519,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 'searchprofile-advanced-tooltip' => 'Айыткан аттар делгемнеринден дилээри',
 'search-result-size' => '$1 ({{PLURAL:$2|$2 сөс}})',
 'search-section' => '(«$1» деп салбыр)',
+'search-suggest' => 'Силер «$1» деп бодадыңар чадавас',
 'search-interwiki-more' => '(артык)',
 'search-mwsuggest-enabled' => 'саналдар',
 'search-mwsuggest-disabled' => 'саналдар чок',
@@ -753,6 +754,8 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'statistics' => 'Статистика',
 'statistics-pages' => 'Арыннар',
 
+'disambiguationspage' => 'Майык: уш-бажы билдинмес',
+
 'brokenredirects-edit' => 'өскертири',
 'brokenredirects-delete' => 'ырадыры',
 
@@ -942,6 +945,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'whatlinkshere-next' => '{{PLURAL:$1|дараазында|дараазында $1}}',
 'whatlinkshere-links' => '← холбаалар',
 'whatlinkshere-hideredirs' => '$1-че шиглиглер',
+'whatlinkshere-hidetrans' => '$1 даңзылааннар',
 'whatlinkshere-hidelinks' => 'холбааларны $1',
 'whatlinkshere-hideimages' => 'Чурумалдың холбааларын $1',
 'whatlinkshere-filters' => 'Шүүрлер',
@@ -961,6 +965,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'ipblocklist-submit' => 'Дилээр',
 'infiniteblock' => 'кезээ-мөңгеде',
 'blocklink' => 'кызыгаарлаары',
+'unblocklink' => 'ажыдып хостаар',
 'change-blocklink' => 'кызыгаарлаашкынны өскертири',
 'contribslink' => 'немелделер',
 'blocklogpage' => 'Кызыгаарлаашкынның журналы',
@@ -1083,6 +1088,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 # Media information
 'widthheightpage' => '$1x$2, $3 {{PLURAL:$3|арын}}',
 'file-info-size' => '$1 × $2 пиксел, Файл хемчээли: $3, MIME янзызы: $4',
+'file-nohires' => 'Оон улуг хевири чок',
 'svg-long-desc' => 'SVG файл, $1 x $2 пиксел, файл хемчээли: $3',
 'show-big-image' => 'Улуг чурук',
 'show-big-image-size' => '$1 × $2 пиксел',
index 354dff7..5d5a8b9 100644 (file)
@@ -1005,7 +1005,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" نىڭ ئۆزگەرتىش خاتىرىسى',
-'difference' => '(تۈزەتكەن نەشرىلىرىنىڭ پەرقى)',
 'difference-multipage' => '(بەتلەر ئارىسىدىكى پەرق)',
 'lineno' => '$1 -قۇر:',
 'compareselectedversions' => 'تاللانغان نەشرىنى سېلىشتۇر',
index 695bd37..fe7a25b 100644 (file)
@@ -943,6 +943,7 @@ $2
 'note' => "'''Зауваження:'''",
 'previewnote' => "'''Пам'ятайте, що це лише попередній перегляд.'''
 Ваші зміни ще не були збережені!",
+'continue-editing' => 'Продовжити редагування',
 'previewconflict' => 'Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядіти, якщо ви вирішите зберегти його.',
 'session_fail_preview' => "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.
 Якщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і зайти знову.'''",
@@ -1217,7 +1218,6 @@ $1",
 
 # Diffs
 'history-title' => 'Історія змін сторінки «$1»',
-'difference' => '(відмінності між версіями)',
 'difference-multipage' => '(Різниця між сторінками)',
 'lineno' => 'Рядок $1:',
 'compareselectedversions' => 'Порівняти вибрані версії',
@@ -2133,6 +2133,7 @@ $1',
 'allpagesprefix' => 'Знайти сторінки, що починаються з:',
 'allpagesbadtitle' => 'Неприпустима назва сторінки: можливо, заголовок містить міжмовний або міжпроектний префікс чи заборонені символи.',
 'allpages-bad-ns' => '{{SITENAME}} не має простору назв «$1».',
+'allpages-hide-redirects' => 'Сховати перенаправлення',
 
 # Special:Categories
 'categories' => 'Категорії',
index af3489a..be67e6b 100644 (file)
@@ -14,6 +14,7 @@
  * @author Rachitrali
  * @author Reedy
  * @author Wisesabre
+ * @author ZxxZxxZ
  * @author לערי ריינהארט
  * @author سمرقندی
  * @author محبوب عالم
@@ -745,7 +746,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1" کا نظرثانی تاریخچہ',
-'difference' => '(اصلاحات میں فرق)',
 'lineno' => 'لکیر $1:',
 'compareselectedversions' => 'منتخب متـن کا موازنہ',
 'editundo' => 'استرجع',
@@ -902,7 +902,7 @@ HTML tags جانچئے.',
 'userrights' => 'حقوقِ صارف کی نظامت',
 'userrights-lookup-user' => 'گروہائے صارف کا انتظام',
 'userrights-user-editname' => 'کوئی اسم‌صارف داخل کیجئے:',
-'editinguser' => "تبدیلئ حقوق برائے صارف '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "تبدیلئ حقوق برائے صارف '''[[صارف:$1|$1]]''' $2",
 'userrights-groupsmember' => 'رکنِ:',
 'userrights-reason' => 'وجہ:',
 'userrights-no-interwiki' => 'دوسرے ویکیوں پر حقوقِ صارف میں ترمیم کی آپ کو اجازت نہیں ہے.',
index 5523ea3..c49a716 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Uzbek (O'zbek)
+/** Uzbek (Oʻzbek)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -9,6 +9,8 @@
  *
  * @author Abdulla
  * @author Behzod Saidov <behzodsaidov@gmail.com>
+ * @author Casual
+ * @author Lyncos
  * @author Urhixidur
  */
 
@@ -48,237 +50,246 @@ $namespaceAliases = array(
 $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 
 $messages = array(
+'underline-always' => 'Har doim',
+'underline-never' => 'Hech qachon',
+
 # Dates
-'sunday'        => 'Yakshanba',
-'monday'        => 'Dushanba',
-'tuesday'       => 'Seshanba',
-'wednesday'     => 'Chorshanba',
-'thursday'      => 'Payshanba',
-'friday'        => 'Juma',
-'saturday'      => 'Shanba',
-'sun'           => 'Yak',
-'mon'           => 'Dsh',
-'tue'           => 'Ssh',
-'wed'           => 'Chr',
-'thu'           => 'Pay',
-'fri'           => 'Jum',
-'sat'           => 'Shn',
-'january'       => 'yanvar',
-'february'      => 'fevral',
-'march'         => 'mart',
-'april'         => 'aprel',
-'may_long'      => 'may',
-'june'          => 'iyun',
-'july'          => 'iyul',
-'august'        => 'avgust',
-'september'     => 'sentabr',
-'october'       => 'oktabr',
-'november'      => 'noyabr',
-'december'      => 'dekabr',
-'january-gen'   => 'yanvarning',
-'february-gen'  => 'fevralning',
-'march-gen'     => 'martning',
-'april-gen'     => 'aprelning',
-'may-gen'       => 'mayning',
-'june-gen'      => 'iyunning',
-'july-gen'      => 'iyulning',
-'august-gen'    => 'avgustning',
+'sunday' => 'Yakshanba',
+'monday' => 'Dushanba',
+'tuesday' => 'Seshanba',
+'wednesday' => 'Chorshanba',
+'thursday' => 'Payshanba',
+'friday' => 'Juma',
+'saturday' => 'Shanba',
+'sun' => 'Yak',
+'mon' => 'Dsh',
+'tue' => 'Ssh',
+'wed' => 'Chr',
+'thu' => 'Pay',
+'fri' => 'Jum',
+'sat' => 'Shn',
+'january' => 'yanvar',
+'february' => 'fevral',
+'march' => 'mart',
+'april' => 'aprel',
+'may_long' => 'may',
+'june' => 'iyun',
+'july' => 'iyul',
+'august' => 'avgust',
+'september' => 'sentabr',
+'october' => 'oktabr',
+'november' => 'noyabr',
+'december' => 'dekabr',
+'january-gen' => 'yanvarning',
+'february-gen' => 'fevralning',
+'march-gen' => 'martning',
+'april-gen' => 'aprelning',
+'may-gen' => 'mayning',
+'june-gen' => 'iyunning',
+'july-gen' => 'iyulning',
+'august-gen' => 'avgustning',
 'september-gen' => 'sentabrning',
-'october-gen'   => 'oktabrning',
-'november-gen'  => 'noyabrning',
-'december-gen'  => 'dekabrning',
-'jan'           => 'yan',
-'feb'           => 'fev',
-'mar'           => 'mar',
-'apr'           => 'apr',
-'may'           => 'may',
-'jun'           => 'iyn',
-'jul'           => 'iyl',
-'aug'           => 'avg',
-'sep'           => 'sen',
-'oct'           => 'okt',
-'nov'           => 'noy',
-'dec'           => 'dek',
+'october-gen' => 'oktabrning',
+'november-gen' => 'noyabrning',
+'december-gen' => 'dekabrning',
+'jan' => 'yan',
+'feb' => 'fev',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'may',
+'jun' => 'iyn',
+'jul' => 'iyl',
+'aug' => 'avg',
+'sep' => 'sen',
+'oct' => 'okt',
+'nov' => 'noy',
+'dec' => 'dek',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Turkum|Turkumlar}}',
-'category_header'        => '"$1" turkumidagi maqolalar.',
-'subcategories'          => 'Ostturkumlar',
-'category-empty'         => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
-'hidden-categories'      => '{{PLURAL:$1|Yashirin turkum|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.}}',
+'pagecategories' => '{{PLURAL:$1|Turkum|Turkumlar}}',
+'category_header' => '"$1" turkumidagi maqolalar.',
+'subcategories' => 'Ostturkumlar',
+'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
+'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|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.}}',
 'listingcontinuesabbrev' => 'davomi',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
 
-'about'      => 'Haqida',
-'newwindow'  => '(yangi oynada ochiladi)',
-'cancel'     => 'Voz kechish',
-'mytalk'     => 'Suhbatim',
-'anontalk'   => 'Bu IP uchun suhbat',
+'about' => 'Haqida',
+'newwindow' => '(yangi oynada ochiladi)',
+'cancel' => 'Voz kechish',
+'moredotdotdot' => 'Batafsil...',
+'mytalk' => 'Suhbatim',
+'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
-'and'        => '&#32;va',
+'and' => '&#32;va',
 
 # Cologne Blue skin
-'qbedit'         => 'Tahrirlash',
+'qbedit' => 'Tahrirlash',
 'qbspecialpages' => 'Maxsus sahifalar',
 
 # Vector skin
-'vector-view-create'     => 'Yarat',
-'vector-view-edit'       => 'Tahrirla',
-'vector-view-history'    => 'Tarix',
-'vector-view-view'       => 'Mutolaa',
+'vector-action-delete' => 'O‘chirish',
+'vector-action-move' => 'Ko‘chirish',
+'vector-view-create' => 'Yarat',
+'vector-view-edit' => 'Tahrirla',
+'vector-view-history' => 'Tarix',
+'vector-view-view' => 'Mutolaa',
 'vector-view-viewsource' => 'Manbasini koʻrsat',
-'actions'                => 'Amallar',
-'namespaces'             => 'Nomfazolar',
-'variants'               => 'Variantlar',
-
-'errorpagetitle'   => 'Xato',
-'returnto'         => '$1 sahifasiga qaytish.',
-'tagline'          => '{{SITENAME}} dan',
-'help'             => 'Yordam',
-'search'           => 'Qidirish',
-'searchbutton'     => 'Qidirish',
-'go'               => "O'tish",
-'searcharticle'    => "O'tish",
-'history'          => 'Sahifa tarixi',
-'history_short'    => 'Tarix',
+'actions' => 'Amallar',
+'namespaces' => 'Nomfazolar',
+'variants' => 'Variantlar',
+
+'errorpagetitle' => 'Xato',
+'returnto' => '$1 sahifasiga qaytish.',
+'tagline' => '{{SITENAME}} dan',
+'help' => 'Yordam',
+'search' => 'Qidirish',
+'searchbutton' => 'Qidirish',
+'go' => "O'tish",
+'searcharticle' => 'O‘tish',
+'history' => 'Sahifa tarixi',
+'history_short' => 'Tarix',
 'printableversion' => 'Bosma uchun versiya',
-'permalink'        => 'Doimiy ishorat',
-'print'            => 'Chop et',
-'view'             => 'Koʻrish',
-'edit'             => 'Tahrirlash',
-'create'           => 'Yarat',
-'editthispage'     => 'Sahifani tahrirla',
+'permalink' => 'Doimiy ishorat',
+'print' => 'Chop et',
+'view' => 'Koʻrish',
+'edit' => 'Tahrirlash',
+'create' => 'Yaratish',
+'editthispage' => 'Sahifani tahrirlash',
 'create-this-page' => 'Bu sahifani yarat',
-'delete'           => "O'chirish",
-'protect'          => 'Himoyalash',
-'protectthispage'  => 'Bu sahifani himoyala',
-'unprotect'        => 'Himoyadan chiqarish',
-'newpage'          => 'Yangi sahifa',
-'talkpage'         => 'Bu sahifa haqida munozara',
+'delete' => 'O‘chirish',
+'protect' => 'Himoyalash',
+'protect_change' => 'o‘zgartirish',
+'protectthispage' => 'Ushbu sahifani himoyalash',
+'unprotect' => 'Himoyadan chiqarish',
+'newpage' => 'Yangi sahifa',
+'talkpage' => 'Bu sahifa haqida munozara',
 'talkpagelinktext' => 'Munozara',
-'specialpage'      => 'Maxsus sahifa',
-'personaltools'    => 'Shaxsiy uskunalar',
-'postcomment'      => 'Yangi boʻlim',
-'talk'             => 'Munozara',
-'views'            => "Ko'rinishlar",
-'toolbox'          => 'Asboblar',
-'categorypage'     => 'Turkum sahifasi',
-'viewtalkpage'     => 'Munozara',
-'otherlanguages'   => 'Boshqa tillarda',
-'redirectedfrom'   => '($1dan yoʻnaltirildi)',
-'redirectpagesub'  => 'Yoʻnaltiruvchi sahifa',
-'lastmodifiedat'   => 'Bu sahifa oxirgi marta $2, $1 sanasida tahrirlangan.',
-'viewcount'        => 'Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.',
-'protectedpage'    => 'Himoyalangan sahifa',
-'jumpto'           => 'Oʻtish:',
+'specialpage' => 'Maxsus sahifa',
+'personaltools' => 'Shaxsiy uskunalar',
+'postcomment' => 'Yangi boʻlim',
+'talk' => 'Munozara',
+'views' => 'Ko‘rinishlar',
+'toolbox' => 'Asboblar',
+'categorypage' => 'Turkum sahifasi',
+'viewtalkpage' => 'Munozara',
+'otherlanguages' => 'Boshqa tillarda',
+'redirectedfrom' => '($1dan yoʻnaltirildi)',
+'redirectpagesub' => 'Yoʻnaltiruvchi sahifa',
+'lastmodifiedat' => 'Bu sahifa oxirgi marta $2, $1 sanasida tahrirlangan.',
+'viewcount' => 'Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.',
+'protectedpage' => 'Himoyalangan sahifa',
+'jumpto' => 'Oʻtish:',
 'jumptonavigation' => 'foydalanish',
-'jumptosearch'     => 'Qidir',
+'jumptosearch' => 'Qidir',
 
 # 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',
-'aboutpage'            => 'Project:Haqida',
-'copyright'            => 'Kontent $1 ostidadir.',
-'currentevents'        => 'Joriy hodisalar',
-'currentevents-url'    => 'Project:Joriy hodisalar',
-'disclaimers'          => 'Ogohlantirishlar',
-'disclaimerpage'       => 'Project:Umumiy ogohlatirish',
-'edithelp'             => 'Tahrirlash yordami',
-'edithelppage'         => 'Help:Tahrirlash',
-'helppage'             => 'Help:Mundarija',
-'mainpage'             => 'Bosh sahifa',
+'aboutsite' => '{{SITENAME}} haqida',
+'aboutpage' => 'Project:Haqida',
+'copyright' => 'Kontent $1 ostidadir.',
+'currentevents' => 'Joriy hodisalar',
+'currentevents-url' => 'Project:Joriy hodisalar',
+'disclaimers' => 'Ogohlantirishlar',
+'disclaimerpage' => 'Project:Umumiy ogohlantirish',
+'edithelp' => 'Tahrirlash yordami',
+'edithelppage' => 'Help:Tahrirlash',
+'helppage' => 'Help:Mundarija',
+'mainpage' => 'Bosh sahifa',
 'mainpage-description' => 'Bosh sahifa',
-'portal'               => 'Jamoa portali',
-'portal-url'           => 'Project:Jamoa portali',
-'privacy'              => 'Konfidensiallik siyosati',
-'privacypage'          => 'Project:Konfidensiallik siyosati',
-
-'retrievedfrom'        => ' "$1" dan olindi',
-'youhavenewmessages'   => 'Sizga $1 keldi ($2).',
-'newmessageslink'      => 'yangi xabarlar',
-'newmessagesdifflink'  => 'soʻnggi oʻzgarish',
-'editsection'          => 'tahrirlash',
-'editold'              => 'tahrir',
-'editlink'             => 'tahrirla',
-'viewsourcelink'       => 'manbasini koʻr',
-'editsectionhint'      => 'Boʻlimni tahrirlash: $1',
-'toc'                  => 'Mundarija',
-'showtoc'              => "Ko'rsatish",
-'hidetoc'              => 'yashirish',
+'portal' => 'Jamoa portali',
+'portal-url' => 'Project:Jamoa portali',
+'privacy' => 'Konfidensiallik siyosati',
+'privacypage' => 'Project:Konfidensiallik siyosati',
+
+'retrievedfrom' => ' "$1" dan olindi',
+'youhavenewmessages' => 'Sizga $1 keldi ($2).',
+'newmessageslink' => 'yangi xabarlar',
+'newmessagesdifflink' => 'soʻnggi oʻzgarish',
+'editsection' => 'tahrirlash',
+'editold' => 'tahrir',
+'editlink' => 'tahrirla',
+'viewsourcelink' => 'manbasini koʻr',
+'editsectionhint' => 'Boʻlimni tahrirlash: $1',
+'toc' => 'Mundarija',
+'showtoc' => "Ko'rsatish",
+'hidetoc' => 'yashirish',
 'collapsible-collapse' => 'Yashir',
-'collapsible-expand'   => 'Koʻrsat',
-'red-link-title'       => '$1 (sahifa yaratilmagan)',
+'collapsible-expand' => 'Koʻrsat',
+'page-atom-feed' => '«$1» — Atom-lenta',
+'red-link-title' => '$1 (sahifa yaratilmagan)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Maqola',
-'nstab-user'     => 'Foydalanuvchi sahifasi',
-'nstab-special'  => 'Maxsus sahifa',
-'nstab-project'  => 'Loyiha sahifasi',
-'nstab-image'    => 'Fayl',
+'nstab-main' => 'Maqola',
+'nstab-user' => 'Foydalanuvchi sahifasi',
+'nstab-special' => 'Maxsus sahifa',
+'nstab-project' => 'Loyiha sahifasi',
+'nstab-image' => 'Fayl',
 'nstab-template' => 'Andoza',
-'nstab-help'     => 'Yordam sahifasi',
+'nstab-help' => 'Yordam sahifasi',
 'nstab-category' => 'Turkum',
 
 # General errors
-'error'             => 'Xato',
-'badtitle'          => 'Notoʻgʻri sarlavha',
-'viewsource'        => 'Manbasini koʻrish',
+'error' => 'Xato',
+'badtitle' => 'Notoʻgʻri sarlavha',
+'viewsource' => 'Manbasini koʻrish',
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
-'viewsourcetext'    => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
 
 # Login and logout pages
-'logouttext'              => "'''Siz saytdan muvaffaqiyatli chiqdingiz.'''
+'logouttext' => "'''Siz saytdan muvaffaqiyatli chiqdingiz.'''
 
 {{SITENAME}} saytidan anonim holda foydalanishda davom etishindiz mumkin. Yoki siz yana hozirgi yoki boshqa foydalanuvchi nomi bilan qaytadan tizimga kirishingiz mumkin.
 Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguningizga qadar xuddi tizimga kirganingizdagidek ko'rinishda davom etaverishi mumkin.",
-'yourname'                => 'Foydalanuvchi nomi',
-'yourpassword'            => "Maxfiy so'z",
-'yourpasswordagain'       => "Maxfiy so'zni qayta kiriting",
-'remembermypassword'      => "Hisob ma'lumotlarini shu kompyuterda eslab qolish (for a maximum of $1 {{PLURAL:$1|day|days}})",
-'login'                   => 'Kirish',
+'yourname' => 'Foydalanuvchi nomi',
+'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)',
+'login' => 'Kirish',
 'nav-login-createaccount' => 'Kirish / Hisob yaratish',
-'loginprompt'             => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
-'userlogin'               => 'Kirish / Hisob yaratish',
-'logout'                  => 'Chiqish',
-'userlogout'              => 'Chiqish',
-'nologin'                 => "Hisobingiz yoʻqmi? '''$1'''.",
-'nologinlink'             => 'Hisob yaratish',
-'createaccount'           => 'Hisob yaratish',
-'gotaccount'              => "Hisobingiz bormi? '''$1'''.",
-'gotaccountlink'          => 'Kirish',
-'loginsuccesstitle'       => 'Kirish muvaffaqiyatli amalga oshdi',
-'loginsuccess'            => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
-'wrongpassword'           => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
+'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
+'userlogin' => 'Kirish / Hisob yaratish',
+'logout' => 'Chiqish',
+'userlogout' => 'Chiqish',
+'nologin' => "Hisobingiz yoʻqmi? '''$1'''.",
+'nologinlink' => 'Hisob yaratish',
+'createaccount' => 'Hisob yaratish',
+'gotaccount' => "Hisobingiz bormi? '''$1'''.",
+'gotaccountlink' => 'Kirish',
+'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
+'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
+'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
+'loginlanguagelabel' => 'Til: $1',
 
 # Change password dialog
 'retypenew' => 'Yangi mahfiy soʻzni qayta tering:',
 
 # Edit page toolbar
-'bold_sample'     => 'Qalin matn',
-'bold_tip'        => 'Qalin matn',
-'italic_sample'   => 'Kursiv',
-'italic_tip'      => 'Kursiv',
-'link_sample'     => 'Ishorat nomi',
-'link_tip'        => 'Ichki ishorat',
-'extlink_sample'  => 'http://www.example.com ishorat nomi',
-'extlink_tip'     => 'Tashqi ishorat (http:// prefiksini unutmang)',
+'bold_sample' => 'Qalin matn',
+'bold_tip' => 'Qalin matn',
+'italic_sample' => 'Kursiv',
+'italic_tip' => 'Kursiv',
+'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',
-'image_tip'       => 'Qoʻshilgan tasvir',
-'media_tip'       => 'Faylga ishorat',
-'sig_tip'         => 'Imzoingiz va sana',
+'image_tip' => 'Qoʻshilgan tasvir',
+'media_tip' => 'Faylga ishorat',
+'sig_tip' => 'Imzoingiz va sana',
 
 # Edit pages
-'summary'                    => 'Qisqa izoh:',
-'minoredit'                  => 'Bu kichik tahrir',
-'watchthis'                  => 'Sahifani kuzatish',
-'savearticle'                => 'Saqlash',
-'preview'                    => "Ko'rib chiqish",
-'showpreview'                => "Ko'rib chiqish",
-'showdiff'                   => "O'zgarishlarni ko'rsatish",
-'anoneditwarning'            => "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
-'blockedtext'                => "'''Siz (foydalanuvchi ismingiz yoki IP manzilingiz) tahrir qilishdan chetlashtirildingiz.'''
+'summary' => 'Qisqa izoh:',
+'minoredit' => 'Bu kichik tahrir',
+'watchthis' => 'Sahifani kuzatish',
+'savearticle' => 'Saqlash',
+'preview' => 'Ko‘rib chiqish',
+'showpreview' => 'Ko‘rib chiqish',
+'showdiff' => 'O‘zgarishlarni ko‘rsatish',
+'anoneditwarning' => "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
+'blockedtext' => "'''Siz (foydalanuvchi ismingiz yoki IP manzilingiz) tahrir qilishdan chetlashtirildingiz.'''
 
 Sizni $1 chetlashtirdi. Bunga sabab: ''$2''.
 
@@ -288,27 +299,27 @@ Sizni $1 chetlashtirdi. Bunga sabab: ''$2''.
 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.",
-'newarticle'                 => '(Yangi)',
-'newarticletext'             => "Bu sahifa hali mavjud emas.
+'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 />
+'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.",
-'previewnote'                => "'''Bu shunchaki ko'rib chiqish. O'zgarishlar hali saqlangani yo'q!'''",
-'editing'                    => '$1 tahrirlanmoqda',
-'editingsection'             => '$1 (boʻlim) tahrirlanmoqda',
-'copyrightwarning'           => "Iltimos, {{SITENAME}}ga yuklangan har qanday axborot $2 ostida tarqatilishiga diqqat qiling (batafsil ma'lumot uchun $1ni ko'ring).
+'previewnote' => "'''Bu shunchaki ko‘rib chiqish. O‘zgartirishlar hali saqlangani yo‘q!'''",
+'editing' => '$1 tahrirlanmoqda',
+'editingsection' => '$1 (boʻlim) tahrirlanmoqda',
+'copyrightwarning' => "Iltimos, {{SITENAME}}ga yuklangan har qanday axborot $2 ostida tarqatilishiga diqqat qiling (batafsil ma'lumot uchun $1ni ko'ring).
 Agar yozganlaringiz keyinchalik tahrir qilinishi va qayta tarqatilishiga rozi bo'lmasangiz, u holda bu yerga yozmang.<br />
 Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini va'da qilmoqdasiz.
 '''MUALLIFLIK HUQUQLARI BILAN HIMOYALANGAN ISHLARNI ZINHOR BERUXSAT YUBORMANG!'''",
-'copyrightwarning2'          => "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />
+'copyrightwarning2' => "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />
 Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar ushun $1 sahifasiga murojaat qiling).
 '''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
-'templatesused'              => '{{PLURAL:$1|Template|Templates}} used on this page:',
-'template-protected'         => '(himoyalangan)',
-'template-semiprotected'     => '(yarim-himoyalangan)',
-'nocreatetext'               => 'Ushbu sayt yangi sahifa yaratishni taqiqlagan.
+'templatesused' => 'Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:',
+'template-protected' => '(himoyalangan)',
+'template-semiprotected' => '(yarim-himoyalangan)',
+'nocreatetext' => 'Ushbu sayt yangi sahifa yaratishni taqiqlagan.
 Ortga qaytib, mavjud sahifani tahrirlashingiz yoki [[Special:UserLogin|tizimga kirishingiz]] mumkin.',
 'recreate-moveddeleted-warn' => "'''Diqqat: Siz avval yoʻqotilgan sahifani yana yaratmoqchisiz.'''
 
@@ -316,136 +327,149 @@ Bu sahifani yaratishda davom etishdan avval uning nega avval yoʻqotilgani bilan
 Qulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
 
 # History pages
-'viewpagelogs'        => 'Ushbu sahifaga doir qaydlarni koʻrsat',
-'currentrev'          => 'Hozirgi koʻrinishi',
-'currentrev-asof'     => '$1dagi, joriy koʻrinishi',
-'revisionasof'        => '$1 paytdagi koʻrinishi',
-'previousrevision'    => '←Avvalgi koʻrinishi',
-'nextrevision'        => 'Yangiroq koʻrinishi→',
+'viewpagelogs' => 'Ushbu sahifaga doir qaydlarni koʻrsat',
+'currentrev' => 'Hozirgi koʻrinishi',
+'currentrev-asof' => '$1dagi, joriy koʻrinishi',
+'revisionasof' => '$1 paytdagi koʻrinishi',
+'previousrevision' => '←Avvalgi koʻrinishi',
+'nextrevision' => 'Yangiroq koʻrinishi→',
 'currentrevisionlink' => 'Hozirgi koʻrinishi',
-'cur'                 => 'joriy',
-'next'                => 'keyingi',
-'last'                => 'oxirgi',
-'histlegend'          => 'Farqlar: solishtirish uchun kerakli radiobokslarni belgilang va pastdagi tugmani yoki Enterni bosing.<br />
+'cur' => 'joriy',
+'next' => 'keyingi',
+'last' => 'oxirgi',
+'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.',
-'histfirst'           => 'Eng avvalgi',
-'histlast'            => 'Eng soʻnggi',
+'history-show-deleted' => 'Faqat o‘chirilganlari',
+'histfirst' => 'Eng avvalgi',
+'histlast' => 'Eng soʻnggi',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 $2 da',
 
 # Revision deletion
 'rev-delundel' => 'koʻrsat/yashir',
 
 # Diffs
-'history-title'           => '"$1"ning tarixi',
-'difference'              => '(Koʻrinishlar orasidagi farq)',
-'lineno'                  => 'Qator $1:',
+'history-title' => '"$1"ning tarixi',
+'lineno' => 'Qator $1:',
 'compareselectedversions' => 'Tanlangan versiyalarni solishtir',
-'editundo'                => 'qaytar',
+'editundo' => 'qaytar',
 
 # Search results
-'searchresults'                  => 'Qidiruv natijalari',
-'searchresults-title'            => '"$1" uchun qidiruv natijalari',
-'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",
-'notitlematches'                 => 'Bunday sarlavha topilmadi',
-'notextmatches'                  => 'Bunday matn topilmadi',
-'prevn'                          => 'oldingi $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',
-'viewprevnext'                   => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-new'                 => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
-'searchhelp-url'                 => 'Help:Mundarija',
-'searchprofile-everything'       => 'Har yerda',
+'searchresults' => 'Qidiruv natijalari',
+'searchresults-title' => '"$1" uchun qidiruv natijalari',
+'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",
+'notitlematches' => 'Bunday sarlavha topilmadi',
+'notextmatches' => 'Bunday matn topilmadi',
+'prevn' => 'oldingi $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',
+'viewprevnext' => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
+'searchhelp-url' => 'Help:Mundarija',
+'searchprofile-articles' => 'Asosiy sahifalar',
+'searchprofile-images' => 'Multimediya',
+'searchprofile-everything' => 'Har yerda',
+'searchprofile-advanced' => 'Kengaytirilgan',
 'searchprofile-articles-tooltip' => '$1da qidir',
-'searchprofile-project-tooltip'  => '$1da qidir',
-'searchprofile-images-tooltip'   => 'Fayllarni qidir',
-'search-result-size'             => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
-'search-redirect'                => '(yoʻnaltirish $1)',
-'search-section'                 => '($1 boʻlimi)',
-'search-suggest'                 => 'Balki buni nazarda tutgandirsiz: $1',
-'search-interwiki-default'       => '$1 natijalar:',
-'searchall'                      => 'barchasi',
-'showingresults'                 => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
-'showingresultsheader'           => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
-'powersearch'                    => 'Qidiruv',
-'powersearch-ns'                 => 'Bu nom-fazolarda izla:',
-'powersearch-redir'              => 'Yoʻnaltirishlarni koʻrsat',
-'powersearch-field'              => 'Qidir',
+'searchprofile-project-tooltip' => '$1da qidir',
+'searchprofile-images-tooltip' => 'Fayllarni qidir',
+'search-result-size' => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
+'search-redirect' => '(yoʻnaltirish $1)',
+'search-section' => '($1 boʻlimi)',
+'search-suggest' => 'Balki buni nazarda tutgandirsiz: $1',
+'search-interwiki-default' => '$1 natijalar:',
+'searchall' => 'barchasi',
+'showingresults' => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
+'showingresultsheader' => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
+'powersearch' => 'Qidiruv',
+'powersearch-ns' => 'Bu nom-fazolarda izla:',
+'powersearch-redir' => 'Yoʻnaltirishlarni koʻrsat',
+'powersearch-field' => 'Qidir',
 
 # Preferences page
-'preferences'       => 'Moslamalar',
-'mypreferences'     => 'Moslamalarim',
-'prefs-skin'        => "Tashqi ko'rinish",
-'prefs-datetime'    => 'Sana va vaqt',
-'prefs-personal'    => "Shaxsiy ma'lumotlar",
-'prefs-rc'          => "Yangi o'zgartirishlar",
-'prefs-watchlist'   => "Kuzatuv ro'yxati",
-'prefs-misc'        => 'Boshqa moslamalar',
-'saveprefs'         => 'Saqlash',
-'resetprefs'        => 'Bekor qilish',
-'prefs-editing'     => 'Tahrirlash',
+'preferences' => 'Moslamalar',
+'mypreferences' => 'Moslamalarim',
+'prefs-skin' => 'Tashqi ko‘rinish',
+'prefs-datetime' => 'Sana va vaqt',
+'prefs-personal' => 'Shaxsiy ma’lumotlar',
+'prefs-rc' => 'Yangi o‘zgartirishlar',
+'prefs-watchlist' => "Kuzatuv ro'yxati",
+'prefs-misc' => 'Boshqa moslamalar',
+'saveprefs' => 'Saqlash',
+'resetprefs' => 'Bekor qilish',
+'prefs-editing' => 'Tahrirlash',
 'searchresultshead' => 'Qidiruv natijalari',
-'prefs-files'       => 'Fayllar',
-'yourrealname'      => 'Haqiqiy ism *:',
+'prefs-files' => 'Fayllar',
+'youremail' => 'E-mail:',
+'yourrealname' => 'Haqiqiy ism *:',
 
 # Groups
 'group-sysop' => 'Administratorlar',
 
 'grouppage-sysop' => '{{ns:project}}:Administratorlar',
 
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'ushbu sahifani tahrirlash',
+
 # Recent changes
-'recentchanges'     => "Yangi o'zgartirishlar",
-'recentchangestext' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
-'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.",
-'rclistfrom'        => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
-'rcshowhideminor'   => 'Kichik tahrirlarni $1',
-'rcshowhidebots'    => 'Botlarni $1',
-'rcshowhideliu'     => "Ro'yxatdan o'tgan foydalanuvchilarni $1",
-'rcshowhideanons'   => 'Anonim foydalanuvchilarni $1',
-'rcshowhidepatr'    => 'Tekshirilgan tahrirlarni $1',
-'rcshowhidemine'    => "O'z tahrirlarimni $1",
-'rclinks'           => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
-'diff'              => 'farq',
-'hist'              => 'tarix',
-'hide'              => 'yashirish',
-'show'              => 'koʻrsat',
-'minoreditletter'   => 'k',
-'newpageletter'     => 'Y',
+'recentchanges' => 'Yangi o‘zgartirishlar',
+'recentchangestext' => 'Ushbu sahifada siz eng so‘nggi o‘zgartirishlarni ko‘rishingiz mumkin.',
+'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.",
+'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
+'rcshowhideminor' => 'Kichik tahrirlarni $1',
+'rcshowhidebots' => '$1 ta bot',
+'rcshowhideliu' => 'Ro‘yxatdan o‘tgan foydalanuvchilar: $1 ta',
+'rcshowhideanons' => 'Anonim foydalanuvchilar: $1 ta',
+'rcshowhidepatr' => 'Tekshirilgan tahrirlarni $1',
+'rcshowhidemine' => "O'z tahrirlarimni $1",
+'rclinks' => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
+'diff' => 'farq',
+'hist' => 'tarix',
+'hide' => 'yashirish',
+'show' => 'koʻrsat',
+'minoreditletter' => 'k',
+'newpageletter' => 'Y',
 
 # Recent changes linked
-'recentchangeslinked'          => "Bog'langan o'zgarishlar",
-'recentchangeslinked-toolbox'  => 'Bogʻliq oʻzgarishlar',
-'recentchangeslinked-title'    => '"$1"ga aloqador oʻzgarishlar',
+'recentchangeslinked' => "Bog'langan o'zgarishlar",
+'recentchangeslinked-toolbox' => 'Bogʻliq oʻzgarishlar',
+'recentchangeslinked-title' => '"$1"ga aloqador oʻzgarishlar',
 '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-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:',
 
 # Upload
-'upload'        => 'Fayl yuklash',
-'uploadbtn'     => 'Fayl yukla',
+'upload' => 'Fayl yuklash',
+'uploadbtn' => 'Fayl yukla',
 'uploadlogpage' => 'Yuklash qaydlari',
+'filedesc' => 'Qisqa izoh',
 'uploadedimage' => '"[[$1]]" yuklandi',
 
 # Special:ListFiles
 'listfiles' => 'Fayllar roʻyxati',
 
 # File description page
-'file-anchor-link'          => 'Fayl',
-'filehist'                  => 'Fayl tarixi',
-'filehist-help'             => 'Faylning biror paytdagi holatini koʻrish uchun tegishli sana/vaqtga bosingiz.',
-'filehist-current'          => 'joriy',
-'filehist-datetime'         => 'Sana/Vaqt',
-'filehist-user'             => 'Foydalanuvchi',
-'filehist-dimensions'       => 'Oʻlchamlari',
-'filehist-filesize'         => 'Fayl hajmi',
-'filehist-comment'          => 'Izoh',
-'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-desc-here'    => 'Ushbu fayl $1dan boʻlib, boshqa loyihalarda ham ishlatilishi mumkin.
+'file-anchor-link' => 'Fayl',
+'filehist' => 'Fayl tarixi',
+'filehist-help' => 'Faylning biror paytdagi holatini koʻrish uchun tegishli sana/vaqtga bosingiz.',
+'filehist-current' => 'joriy',
+'filehist-datetime' => 'Sana/Vaqt',
+'filehist-thumb' => 'Miniatyura',
+'filehist-user' => 'Foydalanuvchi',
+'filehist-dimensions' => 'Oʻlchamlari',
+'filehist-filesize' => 'Fayl hajmi',
+'filehist-comment' => 'Izoh',
+'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-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',
 
@@ -456,226 +480,245 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'randompage' => 'Tasodifiy sahifa',
 
 # Statistics
-'statistics'              => 'Statistika',
+'statistics' => 'Statistika',
 'statistics-header-users' => 'Foydalanuvchilar statistikasi',
 
 'disambiguationspage' => '{{ns:template}}:Disambig',
 
 # Miscellaneous special pages
-'nbytes'                  => '$1 bayt',
-'ncategories'             => '$1 {{PLURAL:$1|turkum|turkumlar}}',
-'lonelypages'             => 'Yetim sahifalar',
-'uncategorizedpages'      => 'Turkumlashtirilmagan sahifalar',
+'nbytes' => '$1 bayt',
+'ncategories' => '$1 {{PLURAL:$1|turkum|turkumlar}}',
+'lonelypages' => 'Yetim sahifalar',
+'uncategorizedpages' => 'Turkumlashtirilmagan sahifalar',
 'uncategorizedcategories' => 'Turkumlashtirilmagan turkumlar',
-'uncategorizedimages'     => 'Kategoriyasiz tasvirlar',
-'uncategorizedtemplates'  => 'Turkumlashtirilmagan andozalar',
-'unusedcategories'        => 'Ishlatilinmagan turkumlar',
-'unusedimages'            => 'Ishlatilinmagan fayllar',
-'wantedcategories'        => 'Talab qilinayotgan turkumlar',
-'mostcategories'          => 'Eng koʻp turkumli sahifalar',
-'protectedpages'          => 'Himoyalangan sahifalar',
-'listusers'               => 'Foydalanuvchilar roʻyxati',
-'newpages'                => 'Yangi sahifalar',
-'move'                    => "Ko'chirish",
-'movethispage'            => 'Bu sahifani koʻchir',
-'pager-newer-n'           => '{{PLURAL:$1|yangiroq 1|yangiroq $1}}',
-'pager-older-n'           => '{{PLURAL:$1|eskiroq 1|eskiroq $1}}',
+'uncategorizedimages' => 'Kategoriyasiz tasvirlar',
+'uncategorizedtemplates' => 'Turkumlashtirilmagan andozalar',
+'unusedcategories' => 'Ishlatilinmagan turkumlar',
+'unusedimages' => 'Ishlatilinmagan fayllar',
+'wantedcategories' => 'Talab qilinayotgan turkumlar',
+'mostcategories' => 'Eng koʻp turkumli sahifalar',
+'protectedpages' => 'Himoyalangan sahifalar',
+'listusers' => 'Foydalanuvchilar roʻyxati',
+'newpages' => 'Yangi sahifalar',
+'move' => 'Ko‘chirish',
+'movethispage' => 'Bu sahifani koʻchir',
+'pager-newer-n' => '{{PLURAL:$1|yangiroq 1|yangiroq $1}}',
+'pager-older-n' => '{{PLURAL:$1|eskiroq 1|eskiroq $1}}',
+
+# Book sources
+'booksources-go' => 'O‘tish',
 
 # Special:Log
-'log'           => 'Qaydlar',
+'log' => 'Qaydlar',
 'all-logs-page' => 'Barcha qaydlar',
 
 # Special:AllPages
-'allpages'       => 'Barcha sahifalar',
+'allpages' => 'Barcha sahifalar',
 'alphaindexline' => '$1 dan $2 ga',
-'nextpage'       => 'Keyingi sahifa ($1)',
-'prevpage'       => 'Avvalgi sahifa ($1)',
-'allpagesfrom'   => 'Sahifalarni koʻrsat:',
-'allarticles'    => 'Barcha sahifalar',
-'allpagesnext'   => 'Keyingi',
+'nextpage' => 'Keyingi sahifa ($1)',
+'prevpage' => 'Avvalgi sahifa ($1)',
+'allpagesfrom' => 'Sahifalarni koʻrsat:',
+'allarticles' => 'Barcha sahifalar',
+'allpagesnext' => 'Keyingi',
 'allpagessubmit' => 'Oʻt',
 'allpagesprefix' => 'Bunday prefiksli sahifalarni koʻrsat:',
 
 # Special:Categories
-'categories'         => 'Turkumlar',
+'categories' => 'Turkumlar',
 '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]].',
 
+# Special:ListGroupRights
+'listgrouprights-members' => '(a’zolar ro‘yxati)',
+
 # E-mail user
 'emailuser' => 'Bu foydalanuvchiga e-maktub joʻnat',
 
 # Watchlist
-'watchlist'        => 'Kuzatuv roʻyxatim',
-'mywatchlist'      => 'Kuzatuv roʻyxatim',
-'nowatchlist'      => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
-'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.
+'watchlist' => 'Kuzatuv roʻyxatim',
+'mywatchlist' => 'Kuzatuv roʻyxatim',
+'nowatchlist' => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
+'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.",
 'removedwatchtext' => '"[[:$1]]" sahifasi kuzatuv ro\'yxatingizdan o\'chirildi.',
-'watch'            => 'kuzatish',
-'watchthispage'    => 'Sahifani kuzatish',
-'unwatch'          => 'kuzatmaslik',
-'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",
+'watch' => 'kuzatish',
+'watchthispage' => 'Sahifani kuzatish',
+'unwatch' => 'kuzatmaslik',
+'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',
 
 # Delete
-'actioncomplete'        => 'Bajarildi',
-'deletedtext'           => '"$1" yoʻqotildi.
+'actioncomplete' => 'Bajarildi',
+'actionfailed' => 'Jarayon amalga oshmadi',
+'deletedtext' => '"$1" yoʻqotildi.
 Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
-'dellogpage'            => 'Yoʻqotish qaydlari',
-'deletecomment'         => 'Sabab:',
-'deleteotherreason'     => 'Boshqa/qoʻshimcha sabab:',
+'dellogpage' => 'Yoʻqotish qaydlari',
+'deletecomment' => 'Sabab:',
+'deleteotherreason' => 'Boshqa/qoʻshimcha sabab:',
 'deletereasonotherlist' => 'Boshqa sabab',
 
 # Rollback
 'rollbacklink' => 'eski holiga keltir',
 
 # Protect
-'protectlogpage'         => 'Himoyalash qaydlari',
-'protect-level-sysop'    => 'Faqat administratorlar uchun',
+'protectlogpage' => 'Himoyalash qaydlari',
+'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',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Tahrirlash',
 
 # Undelete
-'undeletebtn'  => 'Qayta tikla',
-'undeletelink' => 'tikla',
+'undeletebtn' => 'Qayta tikla',
+'undeletelink' => 'ko‘rib chiqish/tiklash',
+'undeleteviewlink' => "ko'rib chiqish",
 
 # Namespace form on various pages
 'namespace' => 'Soha:',
-'invert'    => 'Tanlash tartibini almashtirish',
+'invert' => 'Tanlash tartibini almashtirish',
+'blanknamespace' => '(asosiy)',
 
 # Contributions
 'contributions' => 'Foydalanuvchining hissasi',
-'mycontris'     => 'Hissam',
-'contribsub2'   => '$1 uchun ($2)',
+'mycontris' => 'Hissam',
+'contribsub2' => '$1 uchun ($2)',
 
-'sp-contributions-newbies'  => 'Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat',
+'sp-contributions-newbies' => 'Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat',
 'sp-contributions-blocklog' => 'Chetlashtirish qaydlari',
-'sp-contributions-talk'     => 'Munozara',
-'sp-contributions-search'   => 'Hissalarni qidir',
+'sp-contributions-talk' => 'munozara',
+'sp-contributions-search' => 'Hissalarni qidir',
 'sp-contributions-username' => 'IP manzil yoki foydalanuvchi ismi:',
-'sp-contributions-submit'   => 'Qidir',
+'sp-contributions-submit' => 'Qidir',
 
 # What links here
-'whatlinkshere'       => "Bu sahifaga bog'langan sahifalar",
+'whatlinkshere' => "Bu sahifaga bog'langan sahifalar",
 'whatlinkshere-title' => '"$1"ga bogʻlangan sahifalar',
-'linkshere'           => "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
-'nolinkshere'         => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog'lanmagan.",
-'isredirect'          => 'yoʻnaltiruvchi sahifa',
-'istemplate'          => 'qoʻshimcha',
+'whatlinkshere-page' => 'Sahifa:',
+'linkshere' => "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
+'nolinkshere' => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
+'isredirect' => 'yoʻnaltiruvchi sahifa',
+'istemplate' => 'qoʻshimcha',
 'whatlinkshere-links' => '← ishoratlar',
+'whatlinkshere-filters' => 'Filtrlar',
 
 # Block/unblock
-'blockip'      => 'Foydalanuvchini chetlashtir',
-'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',
+'blockip' => 'Foydalanuvchini chetlashtir',
+'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',
 'contribslink' => 'hissasi',
 'blocklogpage' => 'Chetlashtirish qaydlari',
 
 # Move page
-'movearticle'    => "Sahifani ko'chirish",
-'movepagebtn'    => 'Sahifani koʻchir',
-'pagemovedsub'   => 'Koʻchirildi',
+'movearticle' => "Sahifani ko'chirish",
+'movepagebtn' => 'Sahifani koʻchir',
+'pagemovedsub' => 'Koʻchirildi',
 'movepage-moved' => '\'\'\'"$1" nomli sahifa "$2" nomli sahifaga koʻchirildi\'\'\'',
-'movelogpage'    => 'Koʻchirish qaydlari',
-'movereason'     => 'Sabab:',
-'revertmove'     => 'qaytar',
+'movelogpage' => 'Koʻchirish qaydlari',
+'movereason' => 'Sabab:',
+'revertmove' => 'qaytar',
+
+# Export
+'export' => 'Sahifalar eksporti',
+
+# Namespace 8 related
+'allmessagesname' => 'Ism',
 
 # Thumbnails
 'thumbnail-more' => 'Kattalashtir',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Foydalanuvchi sahifangiz',
-'tooltip-pt-anonuserpage'         => 'Siznig ip manzilingiz foydalanuvchi sahifasi',
-'tooltip-pt-mytalk'               => 'Suhbat sahifangiz',
-'tooltip-pt-anontalk'             => 'Bu ip manzildan amalga oshirilgan tahrirlar munozarasi',
-'tooltip-pt-preferences'          => 'Moslamalaringiz',
-'tooltip-pt-watchlist'            => "Siz kuzatib borayotgan sahifalar ro'yxati.",
-'tooltip-pt-mycontris'            => 'Hissalaringiz roʻyxati',
-'tooltip-pt-login'                => "Bu majburiyat bo'lmasada, kirishingiz taklif qilinadi.",
-'tooltip-pt-anonlogin'            => "Bu majburiyat bo'lmasada, kirishingiz taklif qilinadi.",
-'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-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'               => "Bu 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-go'               => 'Xuddi shu nomli sahifa bor boʻlsa, uni och',
-'tooltip-search-fulltext'         => 'Sahifalarda shu matnni izla',
-'tooltip-p-logo'                  => 'Bosh sahifa',
-'tooltip-n-mainpage'              => 'Bosh sahifaga oʻtish',
-'tooltip-n-portal'                => 'Loyiha haqida, nimalar qilishingiz mumkin, nimalarni qayerdan topish mumkin',
-'tooltip-n-currentevents'         => "Joriy hodisalar haqida ma'lumot olish",
-'tooltip-n-recentchanges'         => "Yangi o'zgarishlar ro'yxati.",
-'tooltip-n-randompage'            => 'Tasodifiy sahifani yuklash',
-'tooltip-n-help'                  => "O'rganish uchun manzil.",
-'tooltip-t-whatlinkshere'         => "Bu sahifaga bog'langan sahifalar ro'yxati",
-'tooltip-t-recentchangeslinked'   => "Bu sahifa bog'langan sahifalardagi yangi o'zgarishlar",
-'tooltip-feed-rss'                => "Bu sahifa uchun RSS ta'minot",
-'tooltip-feed-atom'               => "Bu sahifa uchun Atom ta'minot",
-'tooltip-t-contributions'         => "Bu foydalanuvchinig qo'shgan hissasini ko'rish",
-'tooltip-t-emailuser'             => "Bu foydalanuvchiga xat jo'natish",
-'tooltip-t-upload'                => 'Rasmlar yoki media fayllar yuklash',
-'tooltip-t-specialpages'          => "Maxsus sahifalar ro'yxati",
-'tooltip-t-print'                 => 'Ushbu sahifaning bosma uchun versiyasi',
-'tooltip-t-permalink'             => 'Sahifaning ushbu versiyasiga doimiy ishorat',
-'tooltip-ca-nstab-main'           => "Sahifani ko'rish",
-'tooltip-ca-nstab-user'           => "Foydalanuvchi sahifasini ko'rish",
-'tooltip-ca-nstab-media'          => "Media sahifasini ko'rish",
-'tooltip-ca-nstab-special'        => 'Bu maxsus sahifa, uni tahrirlay olmaysiz.',
-'tooltip-ca-nstab-project'        => "Loyiha sahifasini ko'rish",
-'tooltip-ca-nstab-image'          => "Rasm sahifasini ko'rish",
-'tooltip-ca-nstab-mediawiki'      => "Tizim xabarini ko'rish",
-'tooltip-ca-nstab-template'       => 'Andozani koʻrish',
-'tooltip-ca-nstab-help'           => "Yordam sahifasini ko'rish",
-'tooltip-ca-nstab-category'       => 'Turkum sahifasini koʻrish',
-'tooltip-minoredit'               => "Kichik o'zgarish sifatida belgilash",
-'tooltip-save'                    => "O'zgarishlarni saqlash",
-'tooltip-preview'                 => "O'zgarishlarni saqlash. Iltimos saqlashdan oldin uni ishlating!",
-'tooltip-diff'                    => "Matnga qanday o'zgarishlar kiritganligingizni ko'rish.",
+'tooltip-pt-userpage' => 'Foydalanuvchi sahifangiz',
+'tooltip-pt-anonuserpage' => 'Siznig ip manzilingiz foydalanuvchi sahifasi',
+'tooltip-pt-mytalk' => 'Suhbat sahifangiz',
+'tooltip-pt-anontalk' => 'Bu ip manzildan amalga oshirilgan tahrirlar munozarasi',
+'tooltip-pt-preferences' => 'Moslamalaringiz',
+'tooltip-pt-watchlist' => "Siz kuzatib borayotgan sahifalar ro'yxati.",
+'tooltip-pt-mycontris' => 'Hissalaringiz roʻyxati',
+'tooltip-pt-login' => 'Bu majburiyat mavjud bo‘lmasa-da, kirishingiz taklif qilinadi.',
+'tooltip-pt-anonlogin' => "Bu majburiyat bo'lmasada, kirishingiz taklif qilinadi.",
+'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-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-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-go' => 'Xuddi shu nomli sahifa bor boʻlsa, uni och',
+'tooltip-search-fulltext' => 'Sahifalarda ushbu matnni izlash',
+'tooltip-p-logo' => 'Bosh sahifaga o‘tish',
+'tooltip-n-mainpage' => 'Bosh sahifaga oʻtish',
+'tooltip-n-mainpage-description' => 'Bosh sahifaga o‘tish',
+'tooltip-n-portal' => 'Loyiha haqida, nimalar qilishingiz mumkin, nimalarni qayerdan topish mumkin',
+'tooltip-n-currentevents' => 'Joriy hodisalar haqida ma’lumot olish',
+'tooltip-n-recentchanges' => 'Wikidagi eng so‘nggi o‘zgartirishlar ro‘yxati',
+'tooltip-n-randompage' => 'Tasodifiy sahifani yuklash',
+'tooltip-n-help' => 'O‘rganish uchun manzil',
+'tooltip-t-whatlinkshere' => "Bu sahifaga bog'langan sahifalar ro'yxati",
+'tooltip-t-recentchangeslinked' => "Bu sahifa bog'langan sahifalardagi yangi o'zgarishlar",
+'tooltip-feed-rss' => "Bu sahifa uchun RSS ta'minot",
+'tooltip-feed-atom' => "Bu sahifa uchun Atom ta'minot",
+'tooltip-t-contributions' => "Bu foydalanuvchinig qo'shgan hissasini ko'rish",
+'tooltip-t-emailuser' => 'Ushbu foydalanuvchiga xat jo‘natish',
+'tooltip-t-upload' => 'Rasmlar yoki media fayllar yuklash',
+'tooltip-t-specialpages' => 'Maxsus sahifalar ro‘yxati',
+'tooltip-t-print' => 'Ushbu sahifaning bosma uchun versiyasi',
+'tooltip-t-permalink' => 'Sahifaning ushbu versiyasiga doimiy ishorat',
+'tooltip-ca-nstab-main' => 'Sahifani ko‘rish',
+'tooltip-ca-nstab-user' => "Foydalanuvchi sahifasini ko'rish",
+'tooltip-ca-nstab-media' => "Media sahifasini ko'rish",
+'tooltip-ca-nstab-special' => 'Bu maxsus sahifa, uni tahrirlay olmaysiz.',
+'tooltip-ca-nstab-project' => "Loyiha sahifasini ko'rish",
+'tooltip-ca-nstab-image' => "Rasm sahifasini ko'rish",
+'tooltip-ca-nstab-mediawiki' => "Tizim xabarini ko'rish",
+'tooltip-ca-nstab-template' => 'Andozani koʻrish',
+'tooltip-ca-nstab-help' => "Yordam sahifasini ko'rish",
+'tooltip-ca-nstab-category' => 'Turkum sahifasini koʻrish',
+'tooltip-minoredit' => 'Kichik o‘zgartirish sifatida belgilash',
+'tooltip-save' => "O'zgarishlarni saqlash",
+'tooltip-preview' => "O'zgarishlarni saqlash. Iltimos saqlashdan oldin uni ishlating!",
+'tooltip-diff' => "Matnga qanday o'zgarishlar kiritganligingizni ko'rish.",
 'tooltip-compareselectedversions' => "Bu sahifaning ikki tanlangan versiyalari o'rtasidagi farqni ko'rish.",
-'tooltip-watch'                   => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
-'tooltip-recreate'                => "Bu sahifani u o'chirilgan bo'lishiga qaramasdan qayta yaratish",
-'tooltip-summary'                 => 'Qisqa mazmun kiriting',
+'tooltip-watch' => 'Ushbu sahifani kuzatuv ro‘yxatingizga qo‘shish',
+'tooltip-recreate' => "Bu sahifani u o'chirilgan bo'lishiga qaramasdan qayta yaratish",
+'tooltip-summary' => 'Qisqa mazmun kiriting',
 
 # Browsing diffs
 'previousdiff' => '← Avvalgi tahrir',
-'nextdiff'     => 'Keyingi tahrir →',
+'nextdiff' => 'Keyingi tahrir →',
 
 # Media information
-'imagemaxsize'   => "Tasvir ta'rifi sahifasidagi tasvirning kattaligi:",
-'thumbsize'      => 'Tasvirning kichiklashtirilgan versiyasining kattaligi:',
+'imagemaxsize' => "Tasvir ta'rifi sahifasidagi tasvirning kattaligi:",
+'thumbsize' => 'Tasvirning kichiklashtirilgan versiyasining kattaligi:',
 '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',
+'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',
 
 # Special:NewFiles
 'ilsubmit' => 'Qidirish',
 
 # Metadata
-'metadata'          => "Metama'lumot",
-'metadata-expand'   => 'Batafsil axborot koʻrsat',
+'metadata' => 'Metama’lumot',
+'metadata-expand' => 'Batafsil axborot koʻrsat',
 'metadata-collapse' => 'Batafsil axborotni yashir',
 
 # External editor support
-'edit-externally'      => 'Bu faylni tashqi dasturiy ilovalar yordamida tahrirla',
+'edit-externally' => 'Bu faylni tashqi dasturiy ilovalar yordamida tahrirla',
 'edit-externally-help' => "(Batafsil ma'lumotlar uchun [//www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Barcha',
 'namespacesall' => 'Barchasi',
+'monthsall' => 'barchasi',
 
 'unit-pixel' => 'piksel',
 
index 0304476..878c93b 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Alunardon90
  * @author BrokenArrow
  * @author Candalua
  * @author Frigotoni
@@ -177,10 +178,10 @@ $messages = array(
 'tog-enotifminoredits' => 'Avìseme par e-mail anca par i canbiamenti picenini',
 'tog-enotifrevealaddr' => 'Fà védar el me indirisso e-mail in tei messagi de aviso',
 'tog-shownumberswatching' => 'Mostra el numaro de utenti che i ga ła pajina en oservasion',
-'tog-oldsig' => 'Anteprima de la firma:',
+'tog-oldsig' => 'Anteprima de ła firma:',
 'tog-fancysig' => 'Interpreta i comandi wiki in te la firma (sensa colegamento automatego)',
-'tog-externaleditor' => "Dopara par default on editor de testo esterno (soło par utenti esperti, el richiede l'uso de impostasion particołari sol proprio computer)",
-'tog-externaldiff' => "Dopara par default on programa de diff esterno (soło par utenti esperti, el richiede l'uso de impostasion particołari sol proprio computer)",
+'tog-externaleditor' => "Dopara par default un editor de testo esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
+'tog-externaldiff' => "Dopara par default un programa de diff esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-showjumplinks' => 'Ativa i cołegamenti acesibiłi "va a"',
 'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el richiede JavaScript; sperimentałe)',
 'tog-forceeditsummary' => "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
@@ -305,7 +306,7 @@ $messages = array(
 'vector-action-move' => 'Sposta',
 'vector-action-protect' => 'Protezi',
 'vector-action-undelete' => 'Recupera',
-'vector-action-unprotect' => 'Sbloca',
+'vector-action-unprotect' => 'Canbia ła protesion',
 'vector-simplesearch-preference' => "Intaca i sugerimenti di ricerca avansadi (solo par l'interfacia Vector)",
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Canbia',
@@ -338,11 +339,12 @@ $messages = array(
 'delete' => 'Scansela',
 'deletethispage' => 'Scansela sta pagina',
 'undelete_short' => 'Recupera {{PLURAL:$1|na revision|$1 revision}}',
+'viewdeleted_short' => 'Vedi {{PLURAL:$1|na modifega cancełà|$1 modifeghe cancełade}}',
 'protect' => 'Protezi',
 'protect_change' => 'canbia',
 'protectthispage' => 'Protezi sta pagina',
-'unprotect' => 'Sbloca',
-'unprotectthispage' => 'Cava ła protesion a sta pajina',
+'unprotect' => 'Canbia ła protesion',
+'unprotectthispage' => 'Canbia ła protesion de sta pajina',
 'newpage' => 'Pagina nova',
 'talkpage' => 'Pagina de discussion',
 'talkpagelinktext' => 'Discussion',
@@ -421,6 +423,8 @@ $1',
 'toc' => 'Indice',
 'showtoc' => 'mostra',
 'hidetoc' => 'scondi',
+'collapsible-collapse' => 'Conprimi',
+'collapsible-expand' => 'Espandi',
 'thisisdeleted' => 'Varda o ripristina $1?',
 'viewdeleted' => 'Varda $1?',
 'restorelink' => '{{PLURAL:$1|un canbiamento scanselà|$1 canbiamenti scanselà}}',
@@ -432,6 +436,8 @@ $1',
 'page-rss-feed' => 'Feed RSS par "$1"',
 'page-atom-feed' => 'Feed Atom par "$1"',
 'red-link-title' => '$1 (sta pagina no la ghe xe)',
+'sort-descending' => 'Ordinamento decresente',
+'sort-ascending' => 'Ordinamento cresente',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Voxe',
@@ -499,10 +505,11 @@ Se prega de dìrghelo a un [[Special:ListUsers/sysop|aministradore]] indicando l
 'badarticleerror' => 'Operasion no consentia par sta pajina.',
 'cannotdelete' => 'No xè sta posibiłe scansełare el file "$1".
 Podaria esare sta zà scansełà da qualcun altro.',
+'cannotdelete-title' => 'Inposibiłe ełiminare ła pajina "$1"',
 'badtitle' => 'Titoło mia justo',
 'badtitletext' => "El titoło de ła pajina richiesta xè vodo, erà o con carateri no amesi opure el deriva da n'erore ne i cołegamenti tra siti wiki diversi o version en łengue diverse de ło steso sito.",
-'perfcached' => 'Sti dati qua no i vien mia azornà in tenpo reale, ma solo na olta ogni tanto. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => "Sti dati qua i xe stà azornà l'ultima olta el $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+'perfcached' => 'Sti dati vien tiradi fora da na copia "cache" del database e łi podarìa no esare ajornadi. Inte ła cache xe {{PLURAL:$1|disponibiłe un rixultado|xe disponibiłi $1 rixultadi}}.',
+'perfcachedts' => "Sti dati cua xe stà ajornadi l'ultima volta el $1. Inte ła cache xe disponibiłe al masimo {{PLURAL:$4|on rexultado|$4 rexultadi}}.",
 'querypage-no-updates' => "L'azornamento periodico de sta pagina el xe sospeso. 
 I dati che ghè qua drento no i xe azornà.",
 'wrong_wfQuery_params' => 'Erore ne i parametri invià a ła funsion wfQuery()<br />
@@ -527,6 +534,9 @@ $2',
 'ns-specialprotected' => 'No xè posibiłe modifegare łe pajine spesałi.',
 'titleprotected' => 'Ła creasion de na pajina con sto titoło xè sta blocà da [[User:$1|$1]].
 Ła modivasion xè ła seguente: "$2".',
+'filereadonlyerror' => 'No xe stà posibiłe modifegare el file "$1" parché el repository de file "$2" xe in modałità de soła letura.
+
+L\'aministradore che ło ga blocà ga fornìo sta spiegasion: "$3".',
 
 # Virus scanner
 'virus-badscanner' => 'Erore de configurasion: antivirus sconossuo: "$1"',
@@ -566,8 +576,8 @@ Te poli sistemarte come te vol le to [[Special:Preferences|prefarense de {{SITEN
 'createaccountmail' => 'Par e-mail',
 'createaccountreason' => 'Motivassion:',
 'badretype' => 'Le do password le xe difarenti.',
-'userexists' => 'Sto nome utente se lo gà zà tolto qualchedun altro.
-Tòtene uno difarente.',
+'userexists' => 'El nome utente inserido vien xa doparà da cualchedun altro.
+Prova co un nome utente difarente.',
 'loginerror' => "Erore ne l'aceso",
 'createaccounterror' => "No se pole crear l'utente: $1",
 'nocookiesnew' => "Ła rejistrasion xè sta conpletà, ma no xè sta posibiłe asedare a {{SITENAME}} parché i cookie i xè disativai. Riprovare l'aceso con el nome utente e ła password pena creai dopo aver ativà i cookie nel proprio browser.",
@@ -609,6 +619,8 @@ Par piaser, fà subito un login \'pena che la te riva.',
 'emailconfirmlink' => 'Conferma el to indirizo de e-mail',
 'invalidemailaddress' => "L'indirisso email no'l pode èssar acetà parché el gà un formato mìa valido.
 Inserissi un indirisso valido o svoda la casèła.",
+'cannotchangeemail' => "I indirisi de posta ełetronega de l'account no połe esare canbiadi inte sto projeto wiki.",
+'emaildisabled' => 'Sto sito no połe spedire mesaji de posta ełetronega.',
 'accountcreated' => 'Acesso creà',
 'accountcreatedtext' => "Xè stà creà un acesso par l'utente $1.",
 'createaccount-title' => 'Creazion de un acesso a {{SITENAME}}',
@@ -619,9 +631,14 @@ Se l\'acesso el xe stà creà par sbaglio, se pol ignorar sto messagio.',
 'usernamehasherror' => "El nome utente no'l pode contegner caràteri hash",
 'login-throttled' => 'Te ghè fato massa tentativi de autenticarte.
 Spèta un tocheto prima de proàr da novo.',
+'login-abort-generic' => 'El to login no xe riusido - Anułà.',
 'loginlanguagelabel' => 'Lengua: $1',
 'suspicious-userlogout' => 'Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.',
 
+# E-mail sending
+'php-mail-error-unknown' => "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
+'user-mail-no-addy' => 'Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.',
+
 # Change password dialog
 'resetpass' => 'Cànbia la password',
 'resetpass_announce' => "L'acesso el xe stà efetuà con un codice tenporaneo, mandà par e-mail. Par conpletar l'acesso bisogna inpostar na password nova:",
@@ -640,6 +657,51 @@ Spèta un tocheto prima de proàr da novo.',
 Forse te ghè zà canbià la to password o te ghè domandà na password tenporanea nova.',
 'resetpass-temp-password' => 'Password tenporanea:',
 
+# Special:PasswordReset
+'passwordreset' => 'Rinposta ła password',
+'passwordreset-text' => 'Conpleta sto moduło par riçevare i detaji del to account via posta ełetronega.',
+'passwordreset-legend' => 'Rinposta ła password',
+'passwordreset-disabled' => 'Ła rinpostasion deła password xe stà dixabiłità so sto projeto wiki.',
+'passwordreset-pretext' => '{{PLURAL:$1|| Inserisi una dełe porsion de dati cua soto}}',
+'passwordreset-username' => 'Nome utente:',
+'passwordreset-domain' => 'Dominio',
+'passwordreset-capture' => 'Vixuałixare el contenuto del mesajo de posta ełetronega?',
+'passwordreset-capture-help' => "Se se sełesiona sta caxeła, l'indiriso de posta ełetronega (co' ła password tenporanea) ve vegnarà mostrà anca a voialtri oltre che esare invià a 'l utente.",
+'passwordreset-email' => 'Indiriso de posta ełetronega',
+'passwordreset-emailtitle' => "Detaji de l'account so {{SITENAME}}",
+'passwordreset-emailtext-ip' => "Cualcheduni (probabilmente ti, co indiriso IP $1) ga richiesto l'invio de na nova password par l'aceso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente asocià|I utenti asociadi}} a sto indiriso de posta ełetronega łi xe:
+
+$2
+
+{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.
+Sarìa mejo acedare e deçidare na nova password sùito. 
+
+Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
+'passwordreset-emailtext-user' => "El utente $1 da {{SITENAME}} (probabilmente ti steso) ga richiesto l'invio dei to detaji del profiło par {{SITENAME}} ($4). {{PLURAL:$3|El profiło utente asocià|I profiłi utenti asociadi}} a sto indiriso de posta ełetronega łi xe:
+
+$2
+
+{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.
+Sarìa mejo acedare e deçidare na nova password sùito. 
+
+Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
+'passwordreset-emailelement' => 'Nome utente: $1
+Password tenporanea: $2',
+'passwordreset-emailsent' => 'Xe stà invià on promemoria via posta eletronega.',
+'passwordreset-emailsent-capture' => 'Xe stà invià un promemoria via posta eletronega: el contegù xe riportà cuà de seguito.',
+'passwordreset-emailerror-capture' => "Xe stà generà el promemoria riportà cuà de seguito. L'invio al utente no xe riusido: $1",
+
+# Special:ChangeEmail
+'changeemail' => 'Canbia indiriso de posta ełetronega',
+'changeemail-header' => 'Canbia el indiriso de posta ełetronega del account',
+'changeemail-text' => 'Conpleta sto moduło par canbiare el to indiriso de posta ełetronega. Sarà necesario inserire ła password par confermare ła modifega.',
+'changeemail-no-info' => "Te ghe da aver efetuà l'aceso par acedare a sta pajina diretamente.",
+'changeemail-oldemail' => 'Indiriso de posta ełetronega atuałe:',
+'changeemail-newemail' => 'Novo indiriso de posta ełetronega:',
+'changeemail-none' => '(nisun)',
+'changeemail-submit' => 'Canbia indiriso de posta ełetronega',
+'changeemail-cancel' => 'Anuła',
+
 # Edit page toolbar
 'bold_sample' => 'Testo in grosso',
 'bold_tip' => 'Testo in grosso',
@@ -739,7 +801,12 @@ o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'userpage-userdoesnotexist-view' => 'L\'utensa "$1" no la xe gnancora registrà.',
 'blocked-notice-logextract' => "Sto utente xè atualmente blocà.
 L'ultimo ełemento del rejistro de i blochi xè riportà de seguito par informasion:",
-'clearyourcache' => "'''Ocio: dopo aver salvà, te ghè da netar la cache del to browser par védar i canbiamenti.''' Par '''Mozilla / Firefox / Safari:''' tien macà el boton de le majuscole e schiza \"Ricarica\", o senò maca ''Ctrl-F5'' o ''Ctrl-R'' (''Command-R'' se te ghè el Mac); par '''Konqueror:''' schiza \"Ricarica\" o maca ''F5;'' par '''Opera:''' néta la cache in ''Strumenti → Preferenze;'' par '''Internet Explorer:''' tien macà ''Ctrl'' fin che te schizi ''Ricarica'', o maca ''Ctrl-F5.''",
+'clearyourcache' => "Ocio: dopo aver salvà, połe darse che te gabi da netare ła cache del to browser par védar i canbiamenti.
+*Par '''Firefox / Safari:''' tien macà el boton de łe majuscołe e schicia \"Recarga\", o senò maca ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' se te ghè el Mac)
+*Par '''Google Chrome''':schicia ''Ctrl-Shift-R'' (''⌘-Shift-R'' co' un Mac)
+*Par '''Internet Explorer''': tien schicià el boton \"Ctrl\" fin che te schici '''Recarga''', senò schicia '''Ctrl+F5'''
+*Par '''Konqueror''': schicia \"Recarga\" o maca ''F5'';
+*Par '''Opera:''' néta la cache in ''Strumenti → Preferense;''",
 'usercssyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}} par proàr i novi CSS prima de salvarli.",
 'userjsyoucanpreview' => "'''Sugerimento:''' se consiglia de doparar el boton \"{{int:showpreview}}\" par proàr i novi JavaScript prima de salvarli.",
 'usercsspreview' => "'''Sta qua la xe solo n'anteprima del proprio CSS personal.
@@ -750,7 +817,8 @@ Le modifiche no le xe gnancora stà salvà!'''",
 'userinvalidcssjstitle' => "'''Ocio:'''  No ghe xe nissuna skin con nome \"\$1\". Nota che le pagine par i .css e .js personalizà le gà l'iniziale del titolo minuscola, par esenpio {{ns:user}}:Esenpio/vector.css e no {{ns:user}}:Esenpio/Vector.css.",
 'updated' => '(Agiornà)',
 'note' => "'''Nota:'''",
-'previewnote' => "'''Sta qua la xe solo n'anteprima; i canbiamenti a la pagina NO i xe gnancora stà salvà!'''",
+'previewnote' => "Sta cua ła xe soło n'anteprima; i canbiamenti a ła pajina NO i xe gnancora stà salvài!",
+'continue-editing' => 'Continua modifegare',
 'previewconflict' => 'Sta anteprima la corisponde al testo ne la casèla de edizion de sora, e la fa védar come vegnarà fora la pagina se te machi "Salva la pagina" in sto momento.',
 'session_fail_preview' => "No xè stà possibiłe salvar le to modifiche parché i dati de la session i xè andai persi.
 Par piaser, riproa da novo.
@@ -762,7 +830,9 @@ Se no funsiona gnancora, proa a [[Special:UserLogout|scołegarte]] e a cołegart
 '''Se te stè fasendo na modifica legìtima, par piaser próa de novo.
 Se no funsiona gnancora, te pol proár a [[Special:UserLogout|scolegarte]] e efetuar da novo l'acesso.'''",
 'token_suffix_mismatch' => "'''La modifica no la xe mìa stà salvà parché el client el gà mostrà de gestir in maniera sbaglià i caràteri de puntegiatura nel token associà a la stessa. Par evitar na possibile coruzion del testo de la pagina, xe stà rifiutà l'intera modifica. Sta situazion la pode verificarse, a olte, quando vien doparà serti servizi de proxy anonimi via web che presenta dei bug.'''",
+'edit_form_incomplete' => "' ' Alcune parte del moduło de modifega no łe xe rivade al server; controłare che łe modifeghe sìe intate e riprovare. ' '",
 'editing' => 'Canbia $1',
+'creating' => 'Te si drio creare $1',
 'editingsection' => 'Canbia $1 (sezion)',
 'editingcomment' => 'Modifica de $1 (sezion nova)',
 'editconflict' => 'Conflito de edizion: $1',
@@ -783,8 +853,8 @@ Cargando el testo te dichiari inoltre, soto la to responsabilità, che el testo
 Se no te voli che i to scriti i vegna modificà sensa pietà, alora no sta inserirli qua.<br />
 Sapi che te stè prometendo che te stè inserendo un testo scrito de to pugno, o copià da na fonte de publico dominio o similarmente lìbara (varda $1 par i detagli).
 '''NO STA INSERIR OPERE PROTETE DA COPYRIGHT SENSA PERMESSO!'''",
-'longpageerror' => "'''ERROR: The text you have submitted is $1 kilobytes
-long, which is longer than the maximum of $2 kilobytes. It cannot be saved.'''",
+'longpageerror' => "'''Erore: el testo invià xe grando {{PLURAL:$1|1|$1}} kilobyte, che xe de pì deła dimension masima consentìa de {{PLURAL:$2|1|$2}} kilobyte.'''
+El testo no połe esare salvà.",
 'readonlywarning' => "'''OCIO: El database el xe stà blocà par manutenzion, quindi no se pol salvar le modifiche in sto momento.
 Par no pèrdarle, te pol copiar tuto quel che te ghè inserìo fin desso ne la casela de modifica, incolarlo in un programa de elaborazion de testi e salvarlo, intanto che te speti che i sbloca el database.'''
 
@@ -822,6 +892,7 @@ Pararìa che la sìpia stà scancelà.',
 'edit-no-change' => 'La to modifica la xe stà ignorà, parché no ti gà canbià gnente nel testo.',
 'edit-already-exists' => 'No se pol crear na pagina nova.
 La esiste de zà.',
+'defaultmessagetext' => 'Testo predefinìo',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Ocio: Sta pagina la contien dele chiamate de funzion al parser massa onerose.
@@ -837,6 +908,7 @@ Sti argomenti i xe stà omessi.",
 'parser-template-loop-warning' => 'Xe stà catà un ciclo in tel modèl: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Xe stà rajunto el limite màssimo de ricorsion in tel modèl ($1)',
 'language-converter-depth-warning' => 'Limite de profondità del convertidor de lengua superà ($1)',
+'node-count-exceeded-category' => 'Pajine ndove che el node-count supera el limite',
 
 # "Undo" feature
 'undo-success' => 'Sta modifica la pode èssar anulà. Verifica el confronto presentà de seguito par èssar sicuro che el contenuto el sia come te lo voli e quindi salva le modifiche par conpletar la procedura de anulamento.',
@@ -888,29 +960,27 @@ Legenda: '''({{int:cur}})''' = difarense co l'ultima version, '''({{int:last}})'
 'rev-deleted-user-contribs' => '[nome utente o indirisso IP cavà - modifica sconta dai contributi]',
 'rev-deleted-text-permission' => "Sta version de la pagina la xe stà '''scancelà'''.
 Varda el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelazion] par ulteriori detagli.",
-'rev-deleted-text-unhide' => "Sta version de la pàxena la xe sta '''scancelà'''.
-Varda el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelassion] par ulteriori detagli.
-Ai aministradori xe ancora consentìo [$1 vardar sta version] se i vole.",
-'rev-suppressed-text-unhide' => "Sta version de la pagina la xe stà '''cavà'''.
-Varda el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de rimozion] par ulteriori detagli.
-I aministratori i pode ancora [$1 vardar sta versione] se i vole.",
+'rev-deleted-text-unhide' => "Sta version de la pajina ła xe stà '''scancełà'''.
+Controłare el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistro dełe scancełasion] par ulteriori detaji.
+Ai aministradori ghe xe uncora consentìo [$1 vardar sta version] se i vołe.",
+'rev-suppressed-text-unhide' => "Sta version de ła pagina la xe stà ''rimosa'''.
+Controłare el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistro dełe rimosion] par ulteriori detaji.
+I aministradori połe uncora [$1 vardar sta version] se i vołe.",
 'rev-deleted-text-view' => "Sta version de la pagina la xe stà '''scancelà'''.
-El testo el pode èssar visualizà soltanto dai aministradori del sito.
-Varda el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelazion] par ulteriori detagli.",
-'rev-suppressed-text-view' => "Sta version de la pagina la xe stà '''cavà'''.
-Solo i aministratori i pole ancora védarla.
-Varda el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de rimozion] par ulteriori detagli.",
+I aministradori połe uncora vixuałixarla. Controłare el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistro dełe scancełasion] par ulteriori detaji.",
+'rev-suppressed-text-view' => "Sta version de ła pajina xe stà '''rimosa'''.
+I aministradori i połe uncora vedarla; controłare el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistro dełe rimosion] par ulteriori detaji.",
 'rev-deleted-no-diff' => "No te pode vardar sta difarensa parché una de le revision la xe stà '''scancelà'''.
 Varda el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelassion] par savérghene piessè.",
 'rev-suppressed-no-diff' => "No te pol védar sta difarensa, parché una de le revision la xe stà '''scancelà'''.",
-'rev-deleted-unhide-diff' => "Una dele revision de sta difarensa la xe stà '''scancelà'''.
-Consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelassion] par ulteriori detagli.
-I aministradori i pode ancora [$1 vardar sta difarensa] se i vole.",
-'rev-suppressed-unhide-diff' => "Una dele revision de sta difarensa la xe stà '''sopressa'''.
-Consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de sopression] par ulteriori detagli.
-I aministradori i pode ancora [$1 vardar sta difarensa] se i vole.",
-'rev-deleted-diff-view' => "Una dele revision de sta difarensa la xe stà '''scancelà'''.
-Come aministrador, te pol vardar el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de scancelassion] par ulteriori detagli.",
+'rev-deleted-unhide-diff' => "Una dełe revixion de sto confronto fra version xe stà '''scancełà'''.
+Controłare el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistro dełe scancełasion] par ulteriori detaji.
+Ai aministradori ghe xe uncora consentìo [$1 vixualixare el confronto] se i vołe.",
+'rev-suppressed-unhide-diff' => "Una dełe revixion de sto confronto de version xe stà '''sopresa'''.
+Controła el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistro dełe sopresion] par ulteriori detaji.
+I aministradori i połe uncora [$1 vixualixare el confronto] se i vołe.",
+'rev-deleted-diff-view' => "Una dełe revixion de sto confronto de version ła xe stà '''scancelà'''.
+Te połi uncora vixuałixare sto confronto; controłare el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistro dełe scancełasion] par ulteriori detaji.",
 'rev-suppressed-diff-view' => "Una dele revision de sta difarensa la xe stà '''sopressa'''.
 Come aminitrador, te pol vardar el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de sopression] par ulteriori detagli.",
 'rev-delundel' => 'mostra/scondi',
@@ -1011,7 +1081,6 @@ Assicùrete che la continuità storica de la pagina no la vegna alterà.',
 
 # Diffs
 'history-title' => "Storia dei canbiamenti de ''$1''",
-'difference' => '(Difarense fra le version)',
 'difference-multipage' => '(Difarensa tra le pagine)',
 'lineno' => 'Riga $1:',
 'compareselectedversions' => 'Confronta le version segnàe',
index 5e6f22f..6430cd6 100644 (file)
@@ -906,7 +906,6 @@ Tö ei voigoi kävutada sidä.',
 
 # Diffs
 'history-title' => '"$1"-lehtpolen toižetusiden istorii',
-'difference' => '(Erod versijoiden keskes)',
 'difference-multipage' => '(Lehtpoliden erinend)',
 'lineno' => 'Rivi $1:',
 'compareselectedversions' => 'Rindatada valitud versijad',
index 1b5bf34..ed3f4e3 100644 (file)
@@ -677,6 +677,8 @@ Lý do được cung cấp là ''$2''.",
 'filereadonlyerror' => 'Không thể sửa đổi tập tin “$1” vì kho tập tin “$2” đang ở chế độ chỉ-đọc.
 
 Bảo quản viên khóa nó đưa lý do là: “$3”.',
+'invalidtitle-knownnamespace' => 'Tựa trang không hợp lệ có không gian tên “$2” và văn bản “$3”',
+'invalidtitle-unknownnamespace' => 'Tựa trang không hợp lệ có không gian tên số $1 không rõ và văn bản “$2”',
 
 # Virus scanner
 'virus-badscanner' => "Cấu hình sau: không nhận ra bộ quét virus: ''$1''",
@@ -1055,6 +1057,12 @@ Những giá trị này sẽ bị bỏ đi.',
 'parser-template-loop-warning' => 'Phát hiện bản mẫu lặp vòng: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Bản mẫu đã vượt quá giới hạn về độ sâu đệ quy ($1)',
 'language-converter-depth-warning' => 'Đã vượt quá giới hạn độ sâu của bộ chuyển đổi ngôn ngữ ($1)',
+'node-count-exceeded-category' => 'Những trang có số nốt vượt quá giới hạn cho phép',
+'node-count-exceeded-warning' => 'Trang có nhiều nốt quá',
+'expansion-depth-exceeded-category' => 'Những trang có độ sâu bung bản mẫu vượt quá giới hạn cho phép',
+'expansion-depth-exceeded-warning' => 'Trang bung bản mẫu sâu quá',
+'parser-unstrip-loop-warning' => 'Vòng lặp unstrip',
+'parser-unstrip-recursion-limit' => 'Đã vượt quá giới hạn về độ sâu đệ quy unstrip ($1)',
 
 # "Undo" feature
 'undo-success' => 'Các sửa đổi có thể được lùi lại. Xin hãy kiểm tra phần so sánh bên dưới để xác nhận lại những gì bạn muốn làm, sau đó lưu thay đổi ở dưới để hoàn tất việc lùi lại sửa đổi.',
@@ -1232,7 +1240,6 @@ Xin hãy bảo đảm giữ vững tính liên tục của lịch sử trang.',
 
 # Diffs
 'history-title' => 'Lịch sử sửa đổi của “$1”',
-'difference' => '(Khác biệt giữa các bản)',
 'difference-multipage' => '(Khác biệt giữa các trang)',
 'lineno' => 'Dòng $1:',
 'compareselectedversions' => 'So sánh các bản đã chọn',
@@ -1866,6 +1873,7 @@ Vì lý do bảo mật, img_auth.php đã bị tắt.',
 'http-curl-error' => 'Có lỗi khi truy xuất URL: $1',
 'http-host-unreachable' => 'Không thể truy cập URL',
 'http-bad-status' => 'Có vấn đề khi yêu cầu HTTP: $1 $2',
+'http-truncated-body' => 'Chỉ nhận được một phần của thân yêu cầu.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Không thể truy cập URL',
@@ -3962,14 +3970,14 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'revdelete-uname-unhid' => 'đã hiện tên người dùng',
 'revdelete-restricted' => 'đã áp dụng hạn chế cho bảo quản viên',
 'revdelete-unrestricted' => 'đã gỡ bỏ hạn chế cho bảo quản viên',
-'logentry-move-move' => '$1 đã đổi trang $3 thành $4',
-'logentry-move-move-noredirect' => '$1 đã đổi trang $3 thành $4 mà không để lại một trang đổi hướng',
-'logentry-move-move_redir' => '$1 đã đổi trang $3 thành $4 qua trang đổi hướng',
-'logentry-move-move_redir-noredirect' => '$1 đã đổi trang $3 thành $4 qua trang đổi hướng mà không để lại một trang đổi hướng',
+'logentry-move-move' => '$1 đã đổi $3 thành $4',
+'logentry-move-move-noredirect' => '$1 đã đổi $3 thành $4 (đã tắt đổi hướng)',
+'logentry-move-move_redir' => '$1 đã đổi $3 thành $4 qua đổi hướng',
+'logentry-move-move_redir-noredirect' => '$1 đã đổi $3 thành $4 qua đổi hướng (đã tắt đổi hướng)',
 'logentry-patrol-patrol' => '$1 đã đánh dấu tuần tra phiên bản $4 của trang $3',
 'logentry-patrol-patrol-auto' => '$1 đã tự động đánh dấu tuần tra phiên bản $4 của trang $3',
-'logentry-newusers-newusers' => '$1 đã mở một tài khoản người dùng',
-'logentry-newusers-create' => '$1 đã mở một tài khoản người dùng',
+'logentry-newusers-newusers' => '$1 đã mở tài khoản mới',
+'logentry-newusers-create' => '$1 đã mở tài khoản mới',
 'logentry-newusers-create2' => '$1 đã mở tài khoản người dùng $3',
 'logentry-newusers-autocreate' => 'Tài khoản $1 đã được mở tự động',
 'newuserlog-byemail' => 'gửi mật khẩu qua thư điện tử',
index cfa3c22..3b9e36f 100644 (file)
@@ -439,7 +439,6 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 
 # Diffs
 'history-title' => 'Wärsjoonsfolche fo „$1“',
-'difference' => '(Undârschiid dswischâ wärsjoonâ)',
 'lineno' => 'Dsajln $1:',
 'compareselectedversions' => 'Ausgwäälde wärsjoona fârglajchn',
 'editundo' => 'riggängich machng',
index db79ffc..76df447 100644 (file)
@@ -883,7 +883,6 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 
 # Diffs
 'history-title' => 'Revidajenotem pada: "$1"',
-'difference' => '(Dif vü revids)',
 'difference-multipage' => '(Dif vü pads)',
 'lineno' => 'Lien $1:',
 'compareselectedversions' => 'Leigodolöd fomamis pevälöl',
index debee28..11d3087 100644 (file)
@@ -10,6 +10,7 @@
  * @author Kaganer
  * @author Niklas Laxström
  * @author Pikne
+ * @author Reedy
  * @author Sulev Iva (Võrok)
  * @author Trixt
  * @author Võrok
@@ -639,7 +640,7 @@ Ku klõpsahtat nuppi \"{{int:savearticle}}\", sis pästetäs '''õnnõ''' ülemb
 'copyrightwarning2' => "Rehkendäq tuud, et kõiki seo lehe pääle tettüid kirotuisi ja toimõnduisi või kiä taht muutaq vai ärq kistutaq. Ku sa taha-i, et su tüüd armuhiitmäldä ümbre tetäs ja uma ärqnägemise perrä pruugitas, sis pästku-i taad siiäq. Sa piät ka lubama, et kirotit uma jutu esiq vai võtit kopimiskeelüldä paigast (täpsämbält kaeq $1). '''PANGU-I TAAHA TEGIJÄÕIGUISIGA KAIDSÕTUT MATÕRJAALI ILMA LUALDA!'''",
 'longpageerror' => "'''VIGA: Lehe suurus om $1 kilobaiti. Taad saa-i pästäq, selle et kõgõ suurõmb lubat suurus om $2 kilobaiti.'''",
 'readonlywarning' => "'''HOIATUS: Teedüskogo om huuldustöie jaos lukku pant, nii et parhilla saa-i paranduisi pästäq. Võit teksti alalõ hoitaq tekstifailin ja pästäq taa siiäq peränpoolõ.'''",
-'protectedpagewarning' => '<center><small>Taa leht om lukun. Taad saavaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq.</small></center>',
+'protectedpagewarning' => 'Taa leht om lukun. Taad saavaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq.',
 'semiprotectedpagewarning' => 'Seod lehte saavaq muutaq õnnõ nimega sisse lännüq pruukjaq.',
 'cascadeprotectedwarning' => 'Taad lehte võivaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq, selle et taa kuulus $1 järgmädse kaidsõdu lehe hulka:',
 'templatesused' => 'Seo lehe pääl om pruugit {{PLURAL:$1|näüdüst|näüdüssit}}:',
@@ -752,7 +753,6 @@ Lisateedüst või ollaq [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME
 
 # Diffs
 'history-title' => '"$1" muutmiisi nimekiri',
-'difference' => '(Kujjõ lahkominegiq)',
 'lineno' => 'Rida $1:',
 'compareselectedversions' => 'Võrdõlõq valituid kujjõ',
 'editundo' => 'võtaq tagasi',
index 682ab5b..369b8f8 100644 (file)
@@ -593,7 +593,6 @@ Les ôtes manaedjeus so ç' wiki ci pôront todi vey li contnou catchî eyet l'
 'mergehistory-reason' => 'Råjhon:',
 
 # Diffs
-'difference' => '(Diferinces inte les modêyes)',
 'lineno' => 'Roye $1:',
 'compareselectedversions' => 'Comparer les modêyes tchoezeyes',
 'editundo' => 'disfé',
index bc1f439..1afb5c9 100644 (file)
@@ -644,7 +644,6 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
 
 # Diffs
 'history-title' => "Kaagi han pagbag-o han ''$1''",
-'difference' => '(Kaibhan han kabutngaan han mga pagliwat)',
 'lineno' => 'Bagis $1:',
 'compareselectedversions' => 'Igkumpara an mga pinili nga pagbabag-o',
 'editundo' => 'Igpawara an ginbuhat',
index 81e4f16..5a6f244 100644 (file)
@@ -861,7 +861,6 @@ Soo jëfandikoo lëkkalekaayu joow yi day neenal boyot yi nga jotoon a fal.',
 
 # Diffs
 'history-title' => 'Jaar-jaaru sumbi « $1 »',
-'difference' => '(Wuute gi ci sumb yi)',
 'lineno' => 'Rëdd $1 :',
 'compareselectedversions' => 'Méngale sumb yi nga fal',
 'editundo' => 'neenal',
index 364b863..b6c9a70 100644 (file)
@@ -837,7 +837,6 @@ $1",
 
 # Diffs
 'history-title' => '“$1”个修订历史',
-'difference' => '(修订版本间差异)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比较选中个版本',
 'showhideselectedversions' => '显示/囥脱选定修订版本',
index 5d9d61d..b85c6a7 100644 (file)
@@ -566,7 +566,6 @@ $1',
 
 # Diffs
 'history-title' => '$1 — сольлһна тууҗ',
-'difference' => '(Йилһән)',
 'lineno' => '$1 мөр:',
 'compareselectedversions' => 'Суңһсн янзс әдлцүлх',
 'editundo' => 'уга кех',
index 474fa8d..69eb238 100644 (file)
@@ -322,8 +322,8 @@ $messages = array(
 თქვა შეილებუნა [[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>.',
 'previewnote' => "'''რშუდანი თენა რე ხვალე გიწოთოლორაფა'''
 თქვანი თირაფეფი დიო ვარე ჩუალირი!",
 'editing' => 'რედაქტირაფა $1',
@@ -391,7 +391,6 @@ $messages = array(
 
 # Diffs
 'history-title' => '"$1"–იშ თირაფეფიშ ისტორია',
-'difference' => '(ვერსიეფშკას შხვაოფეფ)',
 'lineno' => 'ღოზი $1:',
 'compareselectedversions' => 'გიშაგორილ ვერსიეფიშ მეზიმაფა',
 'editundo' => 'გოუქვაფა',
index fc2e86c..35f4196 100644 (file)
@@ -570,6 +570,8 @@ $2',
 די אורזאך איז  \'\'$2".',
 'filereadonlyerror' => 'נישט מעגלעך צו ענדערן די טעקע "$1" ווייל די טעקע רעפאזיטאריום  "$2" איז אין נאר־ליינען מצב.
 דער סיסאפ וואס האט זי פארשפארט האט געגעבן דעם הסבר:  "$3"',
+'invalidtitle-knownnamespace' => 'אומגילטירער טיטל מיט נאמענטייל "$2" און טעקסט "$3"',
+'invalidtitle-unknownnamespace' => 'אומגילטיקער טיטל מיט אומבאוואוסטן נאמענטייל נומער $1 און טעקסט "$2"',
 
 # Virus scanner
 'virus-badscanner' => "שלעכטע קאנפֿיגוראציע: אומבאוואוסטער ווירוס איבערקוקער: ''$1''",
@@ -869,6 +871,7 @@ $2
 'note' => "'''באמערקונג:'''",
 'previewnote' => "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''
 אייערע ענדערונגען זענען נאָך נישט געהיט!",
+'continue-editing' => 'רעדאקטירן ווײַטער',
 'previewconflict' => 'די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.',
 'session_fail_preview' => "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
 'session_fail_preview_html' => "''''''אַנטשולדיקט! מיר קענען נישט פּראָצעסירן אײַער ענדערונג צוליב א פֿאַרלוסט פֿון סעסיע דאַטע.''''''
@@ -879,6 +882,7 @@ $2
 'token_suffix_mismatch' => "'''אייער רעדאקטירונג איז געווארן אפגעווארפן ווייל אייער בראוזער האט אפגעווארפן די נקודות ביים רעדאקטירן.'''
 די ענדערונג איז געווארן אפגעווארפן כדי נישט צו אנמאכן א חורבן אין די טעקסט פונעם בלאט.
 דאס געשענט מייסטענס ווען איר נוצט אן אנאניאמער פראקסי סערווער.",
+'edit_form_incomplete' => "'''טייל פון דער רעדאקטירונג פֿארעם זענען נישט אנגעקומען צום סארווער; קאנטראלירט אז אייערע רעדאקטירונגען זענען פולשטענדיק און פרובירט נאכאמאל.'''",
 'editing' => 'ענדערן $1',
 'creating' => 'שאפֿן $1',
 'editingsection' => 'ענדערט $1 (אפטיילונג)',
@@ -1133,7 +1137,6 @@ $1",
 
 # Diffs
 'history-title' => 'רעוויזיע היסטאריע פֿון $1',
-'difference' => '(אונטערשייד צווישן ווערסיעס)',
 'difference-multipage' => '(אונטערשייד צווישן בלעטער)',
 'lineno' => 'שורה $1:',
 'compareselectedversions' => 'פארגלייך סעלעקטירטע ווערסיעס',
@@ -1852,6 +1855,7 @@ $1",
 'mostimages' => 'מערסט פֿארבונדענע טעקעס',
 'mostrevisions' => 'אַרטיקלען מיט די מערסטע באַאַרבעטונגען',
 'prefixindex' => 'פּרעפֿיקס אינדעקס',
+'prefixindex-namespace' => 'אלע בלעטער מיט פרעפֿיקס ($1 נאמענטייל)',
 'shortpages' => 'קורצע בלעטער',
 'longpages' => 'לאנגע בלעטער',
 'deadendpages' => 'בלינדע בלעטער',
@@ -1919,6 +1923,10 @@ $1",
 'allpagesprefix' => 'בלעטער וואס זייער נאמען הייבט זיך אן מיט…:',
 'allpagesbadtitle' => 'דער אײַנגעגעבענער נאָמען איז אומגילטיק: לײדיק, אַנטהאַלט אינטערװיקי. עס איז מעגליך אז ער אנטהאלט אותיות וואס מען קען נישט ניצן אין קעפלעך.',
 'allpages-bad-ns' => '{{SITENAME}} האט נישט קיין נאָמענטייל "$1".',
+'allpages-hide-redirects' => 'פֿארהיילן ווייטערפֿירונגען',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'איר באקוקט א ווערסיע פון דעם בלאט פונעם זאפאס, וואס קען אבער זיין  פֿארעלטערט ביז $1.',
 
 # Special:Categories
 'categories' => 'קאַטעגאָריעס',
@@ -2952,11 +2960,18 @@ $1',
 'exif-languagecode' => 'שפראַך',
 'exif-iimversion' => 'IIM ווערסיע',
 'exif-iimcategory' => 'קאַטעגאָריע',
+'exif-iimsupplementalcategory' => 'אונטער־קאטעגאריעס',
 'exif-datetimeexpires' => 'נישט צו ניצן נאָך',
 'exif-datetimereleased' => 'באַפֿרייט אום',
+'exif-originaltransmissionref' => 'ארגינעלער טראנסמיסיע פלאצירונג קאד',
+'exif-identifier' => 'אידענטיפֿיצירער',
+'exif-lens' => 'געניצטער לינז',
+'exif-serialnumber' => 'סעריע־נומער פון קאמערע',
 'exif-cameraownername' => 'אייגנטימער פון קאמערע',
+'exif-label' => 'צעטל',
 'exif-datetimemetadata' => 'דאטע ווען מעטאדאטן זענען געווען לעצט געענדערט',
 'exif-rating' => 'שאצונג (פֿון 5)',
+'exif-rightscertificate' => 'רעכטן פארוואלטונג צערטיפיקאט',
 'exif-copyrighted' => 'קאפירעכט סטאַטוס',
 'exif-copyrightowner' => 'קאפירעכטן האלטער',
 'exif-usageterms' => 'ניץ באַדינגונג',
@@ -2964,6 +2979,7 @@ $1',
 'exif-morepermissionsurl' => 'אלטערנאטיווע ליצענצירן אינפארמאציע',
 'exif-pngfilecomment' => 'PNG טעקע הערה',
 'exif-giffilecomment' => 'GIF טעקע הערה',
+'exif-intellectualgenre' => 'ארט  איינהייט',
 'exif-subjectnewscode' => 'טעמע קאד',
 
 # EXIF attributes
@@ -3236,6 +3252,7 @@ $5
 'watchlistedit-normal-title' => 'רעדאַקטירן די אויפֿפאַסונג ליסטע',
 'watchlistedit-normal-legend' => 'אַראָפנעמען בלעטער פון דער אויפֿפאסן ליסטע',
 'watchlistedit-normal-submit' => 'אַראָפנעמען בלעטער',
+'watchlistedit-normal-done' => '{{PLURAL:$1|1 טיטל איז|$1 טיטלען זענען}} געווארן אראפגענומען פון אייער אויפפאסונג־ליסטע:',
 'watchlistedit-raw-title' => 'רעדאַקטירן די רויע אויפֿפאַסונג ליסטע',
 'watchlistedit-raw-legend' => 'רעדאַקטירן די רויע אויפֿפאַסונג ליסטע',
 'watchlistedit-raw-titles' => 'טיטלען:',
index 2a795bf..f3a674c 100644 (file)
@@ -1009,7 +1009,6 @@ Kò ṣe é bòmọ́lẹ̀.',
 
 # Diffs
 'history-title' => 'Ìtàn àtúnyẹ̀wò fún "$1"',
-'difference' => '(Ìyàtọ̀ láàrin àwọn àtúnyẹ́wò)',
 'difference-multipage' => '(Ìyàtọ̀ láàrin àwọn ojúewé)',
 'lineno' => 'Ìlà $1:',
 'compareselectedversions' => 'Ìfiwéra àwọn àtúnṣe ìṣàyàn',
@@ -2466,6 +2465,7 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 
 # Export
 'export' => 'Ìkójáde àwọn ojúewé',
+'exportall' => 'Ìkójáde gbogbo àwọn ojúewé',
 'export-submit' => 'Kósíta',
 'export-addcattext' => 'Àfikún àwọn ojúewé láti inú ẹ̀ka:',
 'export-addcat' => 'Ìròpọ̀',
index 8a07a72..2eb7a06 100644 (file)
@@ -1099,7 +1099,6 @@ $1",
 
 # Diffs
 'history-title' => '"$1"嘅修訂歷史',
-'difference' => '(修訂之間嘅差異)',
 'difference-multipage' => '(版之間嘅差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較被選嘅修訂',
index 2be7b19..6fde574 100644 (file)
@@ -792,7 +792,6 @@ Zurg da je bie deêze wiezigieng de heschiedenisdeurloôpendeid van de pagina be
 
 # Diffs
 'history-title' => 'Heschiedenisse van "$1"',
-'difference' => '(Verschil tussen bewerkiengen)',
 'lineno' => 'Rehel $1:',
 'compareselectedversions' => 'Anevienkte versies verhelieken',
 'editundo' => 'onedaene maeken',
index 9cc1b18..9f918b2 100644 (file)
@@ -457,7 +457,7 @@ $messages = array(
 'protectthispage' => '保护本页',
 'unprotect' => '更改保护',
 'unprotectthispage' => '更改本页面的保护',
-'newpage' => 'æ\9c\80æ\96°é¡µé\9d¢',
+'newpage' => '新页面',
 'talkpage' => '讨论本页',
 'talkpagelinktext' => '讨论',
 'specialpage' => '特殊页面',
@@ -639,6 +639,8 @@ $2',
 'filereadonlyerror' => '无法修改文件“$1”,因为文件库“$2”处于只读模式。 
 
 管理员对锁定它给出的解释是:“$3”。',
+'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
+'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -979,6 +981,9 @@ $2
 'parser-template-loop-warning' => '检查到模板循环:[[$1]]',
 'parser-template-recursion-depth-warning' => '模板递归深度越限($1)',
 'language-converter-depth-warning' => '字词转换器深度越限($1)',
+'node-count-exceeded-category' => '页面的节点数超出限制',
+'node-count-exceeded-warning' => '页面超出了节点数',
+'expansion-depth-exceeded-category' => '扩展深度超出限制的页面',
 
 # "Undo" feature
 'undo-success' => '此编辑可以被撤销。请检查以下比较以核实这正是您想做的,然后保存以下更改完成撤销编辑。',
@@ -1137,7 +1142,6 @@ $1",
 
 # Diffs
 'history-title' => '“$1”的版本历史',
-'difference' => '(版本间的差异)',
 'difference-multipage' => '(页面间的差异)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '对比选择的版本',
@@ -1159,8 +1163,8 @@ $1",
 'notextmatches' => '没有页面内容匹配',
 'prevn' => '前$1个',
 'nextn' => '后$1个',
-'prevn-title' => '前$1结果',
-'nextn-title' => '后$1结果',
+'prevn-title' => '前$1结果',
+'nextn-title' => '后$1结果',
 'shown-title' => '每页显示$1项结果',
 'viewprevnext' => '查看($1{{int:pipe-separator}}$2)($3)',
 'searchmenu-legend' => '搜索选项',
@@ -1236,7 +1240,7 @@ $1",
 'prefs-rc' => '最近更改',
 'prefs-watchlist' => '监视列表',
 'prefs-watchlist-days' => '监视列表中显示的天数:',
-'prefs-watchlist-days-max' => '最多$1{{PLURAL:$1|天}}',
+'prefs-watchlist-days-max' => '最多$1',
 'prefs-watchlist-edits' => '扩展监视列表中显示的最大更改数:',
 'prefs-watchlist-edits-max' => '最大数量:1000',
 'prefs-watchlist-token' => '监视列表权标:',
@@ -1744,6 +1748,7 @@ $1',
 'http-curl-error' => '撷取URL时出错:$1',
 'http-host-unreachable' => '无法到达URL。',
 'http-bad-status' => '进行HTTP请求时出现问题:$1 $2',
+'http-truncated-body' => '只收到部分请求的正文。',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => '无法访问URL',
@@ -1963,7 +1968,7 @@ $1',
 'listusers-creationsort' => '按建立日期排序',
 'usereditcount' => '$1次编辑',
 'usercreated' => '$1 $2{{GENDER:$3|创建}}',
-'newpages' => 'æ\9c\80æ\96°é¡µé\9d¢',
+'newpages' => '新页面',
 'newpages-username' => '用户名:',
 'ancientpages' => '最早页面',
 'move' => '移动',
@@ -2018,6 +2023,7 @@ $1',
 
 # SpecialCachedPage
 'cachedspecial-viewing-cached-ttl' => '你正在浏览本页的缓存版本,至多可能存在 $1 的延迟。',
+'cachedspecial-viewing-cached-ts' => '您正浏览此页的缓存版本,不一定是最新的完整版本。',
 'cachedspecial-refresh-now' => '查看最新的。',
 
 # Special:Categories
@@ -3600,6 +3606,8 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'version-software' => '已安装的软件',
 'version-software-product' => '产品',
 'version-software-version' => '版本',
+'version-entrypoints' => '入口点 URL',
+'version-entrypoints-header-entrypoint' => '入口点',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
index fe7fb6a..2ccf3fc 100644 (file)
@@ -965,6 +965,10 @@ $2
 'parser-template-loop-warning' => '已偵測迴歸模板: [[$1]]',
 'parser-template-recursion-depth-warning' => '已超過迴歸模板深度限制 ($1)',
 'language-converter-depth-warning' => '已超過字詞轉換器深度限制($1)',
+'node-count-exceeded-category' => '頁面的節點數超出限制',
+'node-count-exceeded-warning' => '頁面超出節點數',
+'expansion-depth-exceeded-category' => '擴展深度超出限制的頁面',
+'expansion-depth-exceeded-warning' => '頁面超出擴展深度',
 
 # "Undo" feature
 'undo-success' => '該編輯可以被撤銷。請檢查以下對比以核實這正是您想做的,然後儲存以下更改以完成撤銷編輯。',
@@ -1124,7 +1128,6 @@ $1",
 
 # Diffs
 'history-title' => '「$1」的修訂歷史',
-'difference' => '(修訂版本間的差異)',
 'difference-multipage' => '(頁面間的差異)',
 'lineno' => '第$1行:',
 'compareselectedversions' => '比較選定的修訂版本',
index 6e82971..2fa637a 100644 (file)
--- a/load.php
+++ b/load.php
@@ -24,7 +24,7 @@
  */
 
 // Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.2.3' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) {
        require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' );
        wfPHPVersionError( 'load.php' );
 }
index ae1367b..cec1270 100644 (file)
@@ -32,7 +32,7 @@ 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.2.3' ) < 0 ) {
+if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
        require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
        wfPHPVersionError( 'cli' );
 }
diff --git a/maintenance/archives/patch-ipb-parent-block-id-index.sql b/maintenance/archives/patch-ipb-parent-block-id-index.sql
new file mode 100644 (file)
index 0000000..1f413f3
--- /dev/null
@@ -0,0 +1,2 @@
+-- index for ipblocks.ipb_parent_block_id
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
diff --git a/maintenance/archives/patch-ipb-parent-block-id.sql b/maintenance/archives/patch-ipb-parent-block-id.sql
new file mode 100644 (file)
index 0000000..8ebcf78
--- /dev/null
@@ -0,0 +1,3 @@
+-- Adding ipb_parent_block_id to track the block that caused an autoblock
+ALTER TABLE /*$wgDBprefix*/ipblocks
+  ADD ipb_parent_block_id int DEFAULT NULL;
index 11f0cd5..3846ef5 100644 (file)
@@ -24,6 +24,7 @@
  * @ingroup Maintenance
  */
 
+require_once( dirname( __FILE__ ) . '/backup.inc' );
 
 /**
  * @ingroup Maintenance
@@ -430,7 +431,8 @@ class TextPassDumper extends BackupDumper {
                                if ( $text === false && isset( $this->prefetch ) && $prefetchNotTried ) {
                                        $prefetchNotTried = false;
                                        $tryIsPrefetch = true;
-                                       $text = $this->prefetch->prefetch( $this->thisPage, $this->thisRev );
+                                       $text = $this->prefetch->prefetch( intval( $this->thisPage ),
+                                               intval( $this->thisRev ) );
                                        if ( $text === null ) {
                                                $text = false;
                                        }
index 6a6a446..687a95c 100644 (file)
@@ -192,9 +192,8 @@ class ImageCleanup extends TableCleanup {
        }
 
        private function buildSafeTitle( $name ) {
-               global $wgLegalTitleChars;
                $x = preg_replace_callback(
-                       "/([^$wgLegalTitleChars]|~)/",
+                       '/([^' . Title::legalChars() . ']|~)/',
                        array( $this, 'hexChar' ),
                        $name );
 
index 5f57ffd..c8d8924 100644 (file)
@@ -68,15 +68,21 @@ class UploadStashCleanup extends Maintenance {
                // out-of-date someday
                $stash = new UploadStash( $repo );
 
+               $i = 0;
                foreach( $keys as $key ) {
+                       $i++;
                        try {
                                $stash->getFile( $key, true );
                                $stash->removeFileNoAuth( $key );
                        } catch ( UploadStashBadPathException $ex ) {
                                $this->output( "Failed removing stashed upload with key: $key\n"  );
                        }
+                       if ( $i % 100 == 0 ) {
+                               $this->output( "$i\n" );
+                       }
                }
-       }
+               $this->output( "$i done\n" );
+       }
 }
 
 $maintClass = "UploadStashCleanup";
index e05f43c..4638468 100644 (file)
@@ -30,7 +30,7 @@ $originalDir = getcwd();
 $optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend');
 
 require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( 'backup.inc' );
+require_once( dirname( __FILE__ ) . '/backup.inc' );
 
 $dumper = new BackupDumper( $argv );
 
index 7a5a5f6..41a7a68 100644 (file)
@@ -27,8 +27,7 @@
 $originalDir = getcwd();
 
 require_once( dirname( __FILE__ ) . '/commandLine.inc' );
-require_once( 'backup.inc' );
-require_once( 'backupTextPass.inc' );
+require_once( dirname( __FILE__ ) . '/backupTextPass.inc' );
 
 
 $dumper = new TextPassDumper( $argv );
diff --git a/maintenance/fileOpPerfTest.php b/maintenance/fileOpPerfTest.php
new file mode 100644 (file)
index 0000000..b16bd95
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Maintenance script to test fileop performance
+ *
+ * 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
+ */
+
+$initialTime = microtime( true );
+$wgProfiler = array( 'class' => 'ProfilerSimpleText' );
+error_reporting( E_ALL );
+
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+
+class TestFileOpPerformance extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Test fileop performance";
+               $this->addOption( 'b1', 'Backend 1', true, true );
+               $this->addOption( 'b2', 'Backend 2', false, true );
+               $this->addOption( 'srcdir', 'File source directory', true, true );
+               $this->addOption( 'maxfiles', 'Max files', false, true );
+       }
+
+       public function execute() {
+               $backend = FileBackendGroup::singleton()->get( $this->getOption( 'b1' ) );
+               $this->doPerfTest( $backend );
+
+               if ( $this->getOption( 'b2' ) ) {
+                       $backend = FileBackendGroup::singleton()->get( $this->getOption( 'b2' ) );
+                       $this->doPerfTest( $backend );
+               }
+
+               $profiler = Profiler::instance();
+               $profiler->setTemplated( true );
+               $profiler->logData(); // prints
+       }
+
+       protected function doPerfTest( FileBackend $backend ) {
+               $ops1 = array();
+               $ops2 = array();
+               $ops3 = array();
+               $ops4 = array();
+               $ops5 = array();
+
+               $baseDir = 'mwstore://' . $backend->getName() . '/testing-cont1';
+               $backend->prepare( array( 'dir' => $baseDir ) );
+
+               $dirname = $this->getOption( 'srcdir' );
+               $dir = opendir( $dirname );
+               if ( !$dir ) {
+                       return;
+               }
+
+               while ( $dir && ( $file = readdir( $dir ) ) !== false ) {
+                       if ( $file[0] != '.' ) {
+                               $this->output( "Using '$dirname/$file' in operations.\n" );
+                               $dst = $baseDir . '/' . wfBaseName( $file );
+                               $ops1[] = array( 'op' => 'store', 'src' => "$dirname/$file", 'dst' => $dst, 'overwrite' => 1);
+                               $ops2[] = array( 'op' => 'copy', 'src' => "$dst", 'dst' => "$dst-1", 'overwrite' => 1);
+                               $ops3[] = array( 'op' => 'move', 'src' => $dst, 'dst' => "$dst-2", 'overwrite' => 1);
+                               $ops4[] = array( 'op' => 'delete', 'src' => "$dst-1", 'overwrite' => 1 );
+                               $ops5[] = array( 'op' => 'delete', 'src' => "$dst-2", 'overwrite' => 1 );
+                       }
+                       if ( count( $ops1 ) >= $this->getOption( 'maxfiles', 20 ) ) {
+                               break; // enough
+                       }
+               }
+               closedir( $dir );
+               $this->output( "\n" );
+
+               $start = microtime( true );
+               $status = $backend->doOperations( $ops1, array( 'force' => 1 ) );
+               $e = ( microtime( true ) - $start ) * 1000;
+               if ( $status->getErrorsArray() ) {
+                       print_r( $status->getErrorsArray() );
+                       exit(0);
+               }
+               $this->output( $backend->getName() . ": Stored " . count( $ops1 ) . " files in $e ms.\n" );
+
+               $start = microtime( true );
+               $backend->doOperations( $ops2, array( 'force' => 1 ) );
+               $e = ( microtime( true ) - $start ) * 1000;
+               if ( $status->getErrorsArray() ) {
+                       print_r( $status->getErrorsArray() );
+                       exit(0);
+               }
+               $this->output( $backend->getName() . ": Copied " . count( $ops2 ) . " files in $e ms.\n" );
+
+               $start = microtime( true );
+               $backend->doOperations( $ops3, array( 'force' => 1 ) );
+               $e = ( microtime( true ) - $start ) * 1000;
+               if ( $status->getErrorsArray() ) {
+                       print_r( $status->getErrorsArray() );
+                       exit(0);
+               }
+               $this->output( $backend->getName() . ": Moved " . count( $ops3 ) . " files in $e ms.\n" );
+
+               $start = microtime( true );
+               $backend->doOperations( $ops4, array( 'force' => 1 ) );
+               $e = ( microtime( true ) - $start ) * 1000;
+               if ( $status->getErrorsArray() ) {
+                       print_r( $status->getErrorsArray() );
+                       exit(0);
+               }
+               $this->output( $backend->getName() . ": Deleted " . count( $ops4 ) . " files in $e ms.\n" );
+
+               $start = microtime( true );
+               $backend->doOperations( $ops5, array( 'force' => 1 ) );
+               $e = ( microtime( true ) - $start ) * 1000;
+               if ( $status->getErrorsArray() ) {
+                       print_r( $status->getErrorsArray() );
+                       exit(0);
+               }
+               $this->output( $backend->getName() . ": Deleted " . count( $ops5 ) . " files in $e ms.\n" );
+       }
+}
+
+$maintClass = "TestFileOpPerformance";
+require_once( RUN_MAINTENANCE_IF_MAIN );
index 66fc656..f5162c9 100644 (file)
@@ -371,7 +371,9 @@ CREATE TABLE ipblocks (
   ipb_range_end         VARCHAR(1024),
   ipb_deleted           SMALLINT NOT NULL DEFAULT 0,
   ipb_block_email       SMALLINT NOT NULL DEFAULT 0,
-  ipb_allow_usertalk    SMALLINT NOT NULL DEFAULT 0
+  ipb_allow_usertalk    SMALLINT NOT NULL DEFAULT 0,
+  ipb_parent_block_id             INTEGER DEFAULT NULL
+  -- REFERENCES ipblocks(ipb_id) ON DELETE SET NULL
 
 );
 CREATE INDEX ipb_address
index 9a408aa..96a65fc 100644 (file)
@@ -20,8 +20,8 @@
  * @see wfWaitForSlaves()
  */
 
-if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.2.3' ) < 0 ) ) {
-       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.2.3 or higher. ABORTING.\n" .
+if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
+       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
        "Check if you have a newer php executable with a different name, such as php5.\n";
        die( 1 );
 }
index d22449b..c55b83d 100644 (file)
@@ -408,7 +408,9 @@ $wgMessageStructure = array(
                'customjsprotected',
                'ns-specialprotected',
                'titleprotected',
-               'filereadonlyerror'
+               'filereadonlyerror',
+               'invalidtitle-knownnamespace',
+               'invalidtitle-unknownnamespace',
        ),
        'virus' => array(
                'virus-badscanner',
@@ -692,6 +694,8 @@ $wgMessageStructure = array(
                'node-count-exceeded-warning',
                'expansion-depth-exceeded-category',
                'expansion-depth-exceeded-warning',
+               'parser-unstrip-loop-warning',
+               'parser-unstrip-recursion-limit',
        ),
        'undo' => array(
                'undo-success',
@@ -838,7 +842,8 @@ $wgMessageStructure = array(
        ),
        'diffs' => array(
                'history-title',
-               'difference',
+               'difference-title',
+               'difference-title-multipage',
                'difference-multipage',
                'lineno',
                'compareselectedversions',
@@ -1445,6 +1450,7 @@ $wgMessageStructure = array(
                'http-curl-error',
                'http-host-unreachable',
                'http-bad-status',
+               'http-truncated-body',
        ),
 
        'upload-curl-errors' => array(
index 8c4d500..a0c3d17 100644 (file)
@@ -396,6 +396,7 @@ CREATE TABLE /*$wgDBprefix*/ipblocks (
        ipb_deleted BIT NOT NULL DEFAULT 0,
        ipb_block_email BIT NOT NULL DEFAULT 0,
        ipb_allow_usertalk BIT NOT NULL DEFAULT 0,
+       ipb_parent_block_id   INT DEFAULT NULL,
 );
 -- Unique index to support "user already blocked" messages
 -- Any new options which prevent collisions should be included
index 9f875ae..3722120 100644 (file)
@@ -272,7 +272,8 @@ CREATE TABLE &mw_prefix.ipblocks (
   ipb_range_end         VARCHAR2(255),
   ipb_deleted           CHAR(1)      DEFAULT '0' NOT NULL,
   ipb_block_email       CHAR(1)      DEFAULT '0' NOT NULL,
-  ipb_allow_usertalk    CHAR(1)      DEFAULT '0' NOT NULL
+  ipb_allow_usertalk    CHAR(1)      DEFAULT '0' NOT NULL,
+  ipb_parent_block_id             NUMBER       DEFAULT NULL
 );
 ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id);
 ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
index b0cdb84..1e3eecb 100644 (file)
@@ -277,12 +277,14 @@ CREATE TABLE ipblocks (
   ipb_range_end         TEXT,
   ipb_deleted           SMALLINT     NOT NULL  DEFAULT 0,
   ipb_block_email       SMALLINT     NOT NULL  DEFAULT 0,
-  ipb_allow_usertalk    SMALLINT     NOT NULL  DEFAULT 0
+  ipb_allow_usertalk    SMALLINT     NOT NULL  DEFAULT 0,
+  ipb_parent_block_id             INTEGER          NULL  REFERENCES ipblocks(ipb_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED
 
 );
 CREATE UNIQUE INDEX ipb_address_unique ON ipblocks (ipb_address,ipb_user,ipb_auto,ipb_anon_only);
 CREATE INDEX ipb_user    ON ipblocks (ipb_user);
 CREATE INDEX ipb_range   ON ipblocks (ipb_range_start,ipb_range_end);
+CREATE INDEX ipb_parent_block_id   ON ipblocks (ipb_parent_block_id);
 
 
 CREATE TABLE image (
index 37effdf..b8a86e7 100644 (file)
@@ -788,7 +788,13 @@ CREATE TABLE /*_*/ipblocks (
   ipb_block_email bool NOT NULL default 0,
 
   -- Block allows user to edit their own talk page
-  ipb_allow_usertalk bool NOT NULL default 0
+  ipb_allow_usertalk bool NOT NULL default 0,
+
+  -- ID of the block that caused this block to exist
+  -- Autoblocks set this to the original block
+  -- so that the original block being deleted also
+  -- deletes the autoblocks
+  ipb_parent_block_id int default NULL
 
 ) /*$wgDBTableOptions*/;
 
@@ -800,6 +806,7 @@ CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
 CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8));
 CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
 CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
+CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
 
 
 --
index c4bf3b2..741ec90 100644 (file)
@@ -25,8 +25,8 @@
  * @ingroup Maintenance
  */
 
-if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.2.3' ) < 0 ) ) {
-       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.2.3 or higher. ABORTING.\n" .
+if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
+       echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
        "Check if you have a newer php executable with a different name, such as php5.\n";
        die( 1 );
 }
index 909cb6e..34b9be6 100644 (file)
@@ -70,12 +70,13 @@ return array(
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.vector' => array(
+               // Keep in sync with WebInstallerOutput::getCSS()
                'styles' => array(
                        'common/commonElements.css' => array( 'media' => 'screen' ),
                        'common/commonContent.css' => array( 'media' => 'screen' ),
                        'common/commonInterface.css' => array( 'media' => 'screen' ),
                        'vector/screen.css' => array( 'media' => 'screen' ),
-                       'vector/screen-hd.css' => array( 'media' => 'screen and (min-width: 900px)' ),
+                       'vector/screen-hd.css' => array( 'media' => 'screen and (min-width: 982px)' ),
                ),
                'scripts' => 'vector/vector.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
@@ -633,7 +634,6 @@ return array(
        ),
        'mediawiki.action.history' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
-               'dependencies' => 'jquery.ui.button',
                'group' => 'mediawiki.action.history',
        ),
        'mediawiki.action.history.diff' => array(
index 4a771fd..c28503b 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Blind 1.8.19
+ * jQuery UI Effects Blind 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 947c50f..5666312 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Bounce 1.8.19
+ * jQuery UI Effects Bounce 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index a92e061..9244a15 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Clip 1.8.19
+ * jQuery UI Effects Clip 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 430dd2e..c49bdaa 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects 1.8.19
+ * jQuery UI Effects 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -306,7 +306,7 @@ $.fn.extend({
 /******************************************************************************/
 
 $.extend($.effects, {
-       version: "@VERSION",
+       version: "1.8.20",
 
        // Saves a set of properties in a data storage
        save: function(element, set) {
index 43e6420..4fdb521 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Drop 1.8.19
+ * jQuery UI Effects Drop 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1076e47..1a9d32e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Explode 1.8.19
+ * jQuery UI Effects Explode 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 2f2c4fa..c976ce4 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fade 1.8.19
+ * jQuery UI Effects Fade 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1fd8e2a..017f70c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Fold 1.8.19
+ * jQuery UI Effects Fold 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 2169411..71462fb 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Highlight 1.8.19
+ * jQuery UI Effects Highlight 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f68a110..4d8e90e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Pulsate 1.8.19
+ * jQuery UI Effects Pulsate 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 11f1c25..a4941f9 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Scale 1.8.19
+ * jQuery UI Effects Scale 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index eca9bee..b40c783 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Shake 1.8.19
+ * jQuery UI Effects Shake 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6a0e973..49059cf 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Slide 1.8.19
+ * jQuery UI Effects Slide 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index f668859..565ad28 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Effects Transfer 1.8.19
+ * jQuery UI Effects Transfer 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index d75e98e..6c563b9 100644 (file)
@@ -2,19 +2,19 @@
 /* Written by Michael Dawart. */
 jQuery(function($){
        $.datepicker.regional['hi'] = {
-               closeText: 'हà¥\8bà¤\95र',
-               prevText: 'à¤\85à¤\97ला',
-               nextText: 'नà¥\87à¤\95à¥\8dसà¥\8dà¤\9f',
+               closeText: 'बà¤\82द',
+               prevText: 'पिà¤\9bला',
+               nextText: 'à¤\85à¤\97ला',
                currentText: 'आज',
-               monthNames: ['à¤\9cनवरà¥\80 ','फरवरà¥\80','मारà¥\8dà¤\9a','à¤\85पà¥\8dरà¥\87ल','मà¥\88','à¤\9cà¥\82न',
-               'à¤\9cà¥\82लाà¤\88','à¤\85à¤\97सà¥\8dत ','सितमà¥\8dबर','à¤\86à¤\95à¥\8dà¤\9fà¥\8bबर','नवम्बर','दिसम्बर'],
-               monthNamesShort: ['à¤\9cन', 'फर', 'मारà¥\8dà¤\9a', 'à¤\85पà¥\8dरà¥\87ल', 'मà¥\88', 'à¤\9cà¥\82न',
-               'à¤\9cà¥\82लाà¤\88', 'à¤\85à¤\97', 'सित', 'à¤\86à¤\95à¥\8dà¤\9f', 'नव', 'िद'],
-               dayNames: ['रविवासर', 'सà¥\8bमवासर', 'मà¤\82à¤\97लवासर', 'बà¥\81धवासर', 'à¤\97à¥\81रà¥\81वासर', 'शà¥\81à¤\95à¥\8dरवासर', 'शनिवासर'],
+               monthNames: ['à¤\9cनवरà¥\80 ','फरवरà¥\80','मारà¥\8dà¤\9a','à¤\85पà¥\8dरà¥\87ल','मà¤\88','à¤\9cà¥\82न',
+               'à¤\9cà¥\82लाà¤\88','à¤\85à¤\97सà¥\8dत ','सितमà¥\8dबर','à¤\85à¤\95à¥\8dà¤\9fà¥\82बर','नवम्बर','दिसम्बर'],
+               monthNamesShort: ['à¤\9cन', 'फर', 'मारà¥\8dà¤\9a', 'à¤\85पà¥\8dरà¥\87ल', 'मà¤\88', 'à¤\9cà¥\82न',
+               'à¤\9cà¥\82लाà¤\88', 'à¤\85à¤\97', 'सित', 'à¤\85à¤\95à¥\8dà¤\9f', 'नव', 'दि'],
+               dayNames: ['रविवार', 'सà¥\8bमवार', 'मà¤\82à¤\97लवार', 'बà¥\81धवार', 'à¤\97à¥\81रà¥\81वार', 'शà¥\81à¤\95à¥\8dरवार', 'शनिवार'],
                dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
                dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
                weekHeader: 'हफ्ता',
-               dateFormat: 'mm/dd/yy',
+               dateFormat: 'dd/mm/yy',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
index c078963..f086f81 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.19
+ * jQuery UI Accordion 1.8.20
  *
  * 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: "@VERSION",
+       version: "1.8.20",
        animations: {
                slide: function( options, additions ) {
                        options = $.extend({
index 70fb33b..f95b78f 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.19
+ * jQuery UI Autocomplete 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index b1e3466..cbec505 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.19
+ * jQuery UI Button 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 9feda3e..6e2b3be 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI 1.8.19
+ * jQuery UI 1.8.20
  *
  * 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: "@VERSION",
+       version: "1.8.20",
 
        keyCode: {
                ALT: 18,
index 71820bb..951c1a9 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.19
+ * jQuery UI Datepicker 1.8.20
  *
  * 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: "@VERSION" } });
+$.extend($.ui, { datepicker: { version: "1.8.20" } });
 
 var PROP_NAME = 'datepicker';
 var dpuuid = new Date().getTime();
@@ -1815,7 +1815,7 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "@VERSION";
+$.datepicker.version = "1.8.20";
 
 // Workaround for #4055
 // Add another global to avoid noConflict issues with inline event handlers
index 1461016..d28be0c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.19
+ * jQuery UI Dialog 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -702,7 +702,7 @@ $.widget("ui.dialog", {
 });
 
 $.extend($.ui.dialog, {
-       version: "@VERSION",
+       version: "1.8.20",
 
        uuid: 0,
        maxZ: 0,
index 417b761..dee9777 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Draggable 1.8.19
+ * jQuery UI Draggable 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -208,8 +208,14 @@ $.widget("ui.draggable", $.ui.mouse, {
                        this.dropped = false;
                }
                
-               //if the original element is removed, don't bother to continue if helper is set to "original"
-               if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
+               //if the original element is no longer in the DOM don't bother to continue (see #8269)
+               var element = this.element[0], elementInDom = false;
+               while ( element && (element = element.parentNode) ) {
+                       if (element == document ) {
+                               elementInDom = true;
+                       }
+               }
+               if ( !elementInDom && this.options.helper === "original" )
                        return false;
 
                if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
@@ -505,7 +511,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 });
 
 $.extend($.ui.draggable, {
-       version: "@VERSION"
+       version: "1.8.20"
 });
 
 $.ui.plugin.add("draggable", "connectToSortable", {
index c551864..8cb2bb7 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Droppable 1.8.19
+ * jQuery UI Droppable 1.8.20
  *
  * 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: "@VERSION"
+       version: "1.8.20"
 });
 
 $.ui.intersect = function(draggable, droppable, toleranceMode) {
index cb3acd8..63f8570 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Mouse 1.8.19
+ * jQuery UI Mouse 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 2f1975d..1989896 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Position 1.8.19
+ * jQuery UI Position 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 17d55cf..b1c05de 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.19
+ * jQuery UI Progressbar 1.8.20
  *
  * 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: "@VERSION"
+       version: "1.8.20"
 });
 
 })( jQuery );
index ea5de1b..a2a7ad5 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.19
+ * jQuery UI Resizable 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -98,9 +98,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                                var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
                                var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
 
-                               // increase zIndex of sw, se, ne, nw axis
-                               //TODO : this modifies original option
-                               if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+                               // Apply zIndex to all handles - see #7960
+                               axis.css({ zIndex: o.zIndex });
 
                                //TODO : What's going on here?
                                if ('se' == handle) {
@@ -541,7 +540,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 });
 
 $.extend($.ui.resizable, {
-       version: "@VERSION"
+       version: "1.8.20"
 });
 
 /*
index 852dc26..b68ea95 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.19
+ * jQuery UI Selectable 1.8.20
  *
  * 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: "@VERSION"
+       version: "1.8.20"
 });
 
 })(jQuery);
index d74ee25..3e6178e 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.19
+ * jQuery UI Slider 1.8.20
  *
  * 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: "@VERSION"
+       version: "1.8.20"
 });
 
 }(jQuery));
index 13bcd7d..3438f59 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Sortable 1.8.19
+ * jQuery UI Sortable 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -468,8 +468,8 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        _intersectsWithPointer: function(item) {
 
-               var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
-                       isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+               var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+                       isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
                        isOverElement = isOverElementHeight && isOverElementWidth,
                        verticalDirection = this._getDragVerticalDirection(),
                        horizontalDirection = this._getDragHorizontalDirection();
@@ -661,7 +661,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                                        var el = $(document.createElement(self.currentItem[0].nodeName))
                                                .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
-                                               .removeClass("ui-sortable-helper").html("&nbsp;")[0];
+                                               .removeClass("ui-sortable-helper")[0];
 
                                        if(!className)
                                                el.style.visibility = "hidden";
@@ -1075,7 +1075,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 });
 
 $.extend($.ui.sortable, {
-       version: "@VERSION"
+       version: "1.8.20"
 });
 
 })(jQuery);
index 88e8dd9..7cc19f0 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.19
+ * jQuery UI Tabs 1.8.20
  *
  * 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: "@VERSION"
+       version: "1.8.20"
 });
 
 /*
index f3b789a..5a71348 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Widget 1.8.19
+ * jQuery UI Widget 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index b98034f..cd207b9 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Accordion 1.8.19
+ * jQuery UI Accordion 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 978f2bb..535f1e6 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Autocomplete 1.8.19
+ * jQuery UI Autocomplete 1.8.20
  *
  * 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 @VERSION
+ * jQuery UI Menu 1.8.20
  *
  * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 8b3de3d..1e2b1ff 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Button 1.8.19
+ * jQuery UI Button 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 38b5426..c42f9ba 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.19
+ * jQuery UI CSS Framework 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index bb532e0..fefb016 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Datepicker 1.8.19
+ * jQuery UI Datepicker 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 6bac05c..2319611 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Dialog 1.8.19
+ * jQuery UI Dialog 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 9e86586..7c099ad 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Progressbar 1.8.19
+ * jQuery UI Progressbar 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 57b7158..b6b90de 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Resizable 1.8.19
+ * jQuery UI Resizable 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -8,13 +8,19 @@
  * http://docs.jquery.com/UI/Resizable#theming
  */
 .ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
 .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
 .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
 .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+/* @noflip */
 .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+/* @noflip */
 .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+/* @noflip */
 .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+/* @noflip */
 .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+/* @noflip */
 .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
+/* @noflip */
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
index d3ef7c3..279effc 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Selectable 1.8.19
+ * jQuery UI Selectable 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 1491d6b..6acaeaa 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Slider 1.8.19
+ * jQuery UI Slider 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 20bc1ca..42a3692 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI Tabs 1.8.19
+ * jQuery UI Tabs 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 9e16251..b705ff6 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery UI CSS Framework 1.8.19
+ * jQuery UI CSS Framework 1.8.20
  *
  * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
  * Dual licensed under the MIT or GPL Version 2 licenses.
index 366643b..f1bd7c5 100644 (file)
@@ -5,9 +5,15 @@
 .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
 .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
 .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+/* @noflip */
 .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+/* @noflip */
 .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+/* @noflip */
 .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+/* @noflip */
 .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+/* @noflip */
 .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+/* @noflip */
 .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
index 55c3001..466c551 100644 (file)
@@ -103,7 +103,7 @@ $.suggestions = {
                        // Wait for the browser to update the value
                        setTimeout( function() {
                                // Render special
-                               $special = context.data.$container.find( '.suggestions-special' );
+                               var $special = context.data.$container.find( '.suggestions-special' );
                                context.config.special.render.call( $special, context.data.$textbox.val() );
                        }, 1 );
                }
@@ -311,7 +311,7 @@ $.suggestions = {
                        case 13:
                                context.data.$container.hide();
                                preventDefault = wasVisible;
-                               selected = context.data.$container.find( '.suggestions-result-current' );
+                               var selected = context.data.$container.find( '.suggestions-result-current' );
                                if ( selected.length === 0 || context.data.selectedWithMouse ) {
                                        // if nothing is selected OR if something was selected with the mouse,
                                        // cancel any current requests and submit the form
index 4f345ab..66309bb 100644 (file)
@@ -481,9 +481,19 @@ var mw = ( function ( $, undefined ) {
                        }
 
                        /**
-                        * Recursively resolves dependencies and detects circular references
+                        * Resolves dependencies and detects circular references.
+                        *
+                        * @param module String Name of the top-level module whose dependencies shall be
+                        *   resolved and sorted.
+                        * @param resolved Array Returns a topological sort of the given module and its
+                        *   dependencies, such that later modules depend on earlier modules. The array
+                        *   contains the module names. If the array contains already some module names,
+                        *   this function appends its result to the pre-existing array.
+                        * @param unresolved Object [optional] Hash used to track the current dependency
+                        *   chain; used to report loops in the dependency graph.
+                        * @throws Error if any unregistered module or a dependency loop is encountered
                         */
-                       function recurse( module, resolved, unresolved ) {
+                       function sortDependencies( module, resolved, unresolved ) {
                                var n, deps, len;
 
                                if ( registry[module] === undefined ) {
@@ -497,12 +507,20 @@ var mw = ( function ( $, undefined ) {
                                                registry[module].dependencies = [registry[module].dependencies];
                                        }
                                }
+                               if ( $.inArray( module, resolved ) !== -1 ) {
+                                       // Module already resolved; nothing to do.
+                                       return;
+                               }
+                               // unresolved is optional, supply it if not passed in
+                               if ( !unresolved ) {
+                                       unresolved = {};
+                               }
                                // Tracks down dependencies
                                deps = registry[module].dependencies;
                                len = deps.length;
                                for ( n = 0; n < len; n += 1 ) {
                                        if ( $.inArray( deps[n], resolved ) === -1 ) {
-                                               if ( $.inArray( deps[n], unresolved ) !== -1 ) {
+                                               if ( unresolved[deps[n]] ) {
                                                        throw new Error(
                                                                'Circular reference detected: ' + module +
                                                                ' -> ' + deps[n]
@@ -510,40 +528,37 @@ var mw = ( function ( $, undefined ) {
                                                }
 
                                                // Add to unresolved
-                                               unresolved[unresolved.length] = module;
-                                               recurse( deps[n], resolved, unresolved );
-                                               // module is at the end of unresolved
-                                               unresolved.pop();
+                                               unresolved[module] = true;
+                                               sortDependencies( deps[n], resolved, unresolved );
+                                               delete unresolved[module];
                                        }
                                }
                                resolved[resolved.length] = module;
                        }
 
                        /**
-                        * Gets a list of module names that a module depends on in their proper dependency order
+                        * Gets a list of module names that a module depends on in their proper dependency
+                        * order.
                         *
                         * @param module string module name or array of string module names
                         * @return list of dependencies, including 'module'.
                         * @throws Error if circular reference is detected
                         */
                        function resolve( module ) {
-                               var modules, m, deps, n, resolved;
+                               var m, resolved;
 
                                // Allow calling with an array of module names
                                if ( $.isArray( module ) ) {
-                                       modules = [];
+                                       resolved = [];
                                        for ( m = 0; m < module.length; m += 1 ) {
-                                               deps = resolve( module[m] );
-                                               for ( n = 0; n < deps.length; n += 1 ) {
-                                                       modules[modules.length] = deps[n];
-                                               }
+                                               sortDependencies( module[m], resolved );
                                        }
-                                       return modules;
+                                       return resolved;
                                }
 
                                if ( typeof module === 'string' ) {
                                        resolved = [];
-                                       recurse( module, resolved, [] );
+                                       sortDependencies( module, resolved );
                                        return resolved;
                                }
 
@@ -598,57 +613,107 @@ var mw = ( function ( $, undefined ) {
                        }
 
                        /**
-                        * Automatically executes jobs and modules which are pending with satistifed dependencies.
+                        * Determine whether all dependencies are in state 'ready', which means we may
+                        * execute the module or job now.
+                        *
+                        * @param dependencies Array dependencies (module names) to be checked.
                         *
-                        * This is used when dependencies are satisfied, such as when a module is executed.
+                        * @return Boolean true if all dependencies are in state 'ready', false otherwise
                         */
-                       function handlePending( module ) {
-                               var j, r;
+                       function allReady( dependencies ) {
+                               return filter( 'ready', dependencies ).length === dependencies.length;
+                       }
 
-                               try {
-                                       // Run jobs whose dependencies have just been met
-                                       for ( j = 0; j < jobs.length; j += 1 ) {
-                                               if ( compare(
-                                                       filter( 'ready', jobs[j].dependencies ),
-                                                       jobs[j].dependencies ) )
-                                               {
-                                                       var callback = jobs[j].ready;
-                                                       jobs.splice( j, 1 );
-                                                       j -= 1;
-                                                       if ( $.isFunction( callback ) ) {
-                                                               callback();
+                       /**
+                        * Log a message to window.console, if possible. Useful to force logging of some
+                        * errors that are otherwise hard to detect, even if mw.log is not available. (I.e.,
+                        * this logs also if not in debug mode.)
+                        *
+                        * @param msg String text for the log entry
+                        * @param e   Error [optional] to also log.
+                        */
+                       function log( msg, e ) {
+                               if ( window.console && typeof window.console.log === 'function' ) {
+                                       console.log( msg );
+                                       if ( e ) {
+                                               console.log( e );
+                                       }
+                               }
+                       }
+
+                       /**
+                        * A module has entered state 'ready', 'error', or 'missing'. Automatically update pending jobs
+                        * and modules that depend upon this module. if the given module failed, propagate the 'error'
+                        * state up the dependency tree; otherwise, execute all jobs/modules that now have all their
+                        * dependencies satisfied. On jobs depending on a failed module, run the error callback, if any.
+                        *
+                        * @param module String name of module that entered one of the states 'ready', 'error', or 'missing'.
+                        */
+                       function handlePending( module ) {
+                               var j, job, hasErrors, m, stateChange;
+
+                               // Modules.
+                               if ( $.inArray( registry[module].state, ['error', 'missing'] ) !== -1 ) {
+                                       // If the current module failed, mark all dependent modules also as failed.
+                                       // Iterate until steady-state to propagate the error state upwards in the
+                                       // dependency tree.
+                                       do {
+                                               stateChange = false;
+                                               for ( m in registry ) {
+                                                       if ( $.inArray( registry[m].state, ['error', 'missing'] ) === -1 ) {
+                                                               if ( filter( ['error', 'missing'], registry[m].dependencies ).length > 0 ) {
+                                                                       registry[m].state = 'error';
+                                                                       stateChange = true;
+                                                               }
                                                        }
                                                }
-                                       }
-                                       // Execute modules whose dependencies have just been met
-                                       for ( r in registry ) {
-                                               if ( registry[r].state === 'loaded' ) {
-                                                       if ( compare(
-                                                               filter( ['ready'], registry[r].dependencies ),
-                                                               registry[r].dependencies ) )
-                                                       {
-                                                               execute( r );
+                                       } while ( stateChange );
+                               }
+
+                               // Execute all jobs whose dependencies are either all satisfied or contain at least one failed module.
+                               for ( j = 0; j < jobs.length; j += 1 ) {
+                                       hasErrors = filter( ['error', 'missing'], jobs[j].dependencies ).length > 0;
+                                       if ( hasErrors || allReady( jobs[j].dependencies ) ) {
+                                               // All dependencies satisfied, or some have errors
+                                               job = jobs[j];
+                                               jobs.splice( j, 1 );
+                                               j -= 1;
+                                               try {
+                                                       if ( hasErrors ) {
+                                                               throw new Error ("Module " + module + " failed.");
+                                                       } else {
+                                                               if ( $.isFunction( job.ready ) ) {
+                                                                       job.ready();
+                                                               }
+                                                       }
+                                               } catch ( e ) {
+                                                       if ( $.isFunction( job.error ) ) {
+                                                               try {
+                                                                       job.error( e, [module] );
+                                                               } catch ( ex ) {
+                                                                       // A user-defined operation raised an exception. Swallow to protect
+                                                                       // our state machine!
+                                                                       log( 'mw.loader::handlePending> Exception thrown by job.error()', ex );
+                                                               }
                                                        }
                                                }
                                        }
-                               } catch ( e ) {
-                                       // Run error callbacks of jobs affected by this condition
-                                       for ( j = 0; j < jobs.length; j += 1 ) {
-                                               if ( $.inArray( module, jobs[j].dependencies ) !== -1 ) {
-                                                       if ( $.isFunction( jobs[j].error ) ) {
-                                                               jobs[j].error( e, module );
-                                                       }
-                                                       jobs.splice( j, 1 );
-                                                       j -= 1;
+                               }
+
+                               if ( registry[module].state === 'ready' ) {
+                                       // The current module became 'ready'. Recursively execute all dependent modules that are loaded
+                                       // and now have all dependencies satisfied.
+                                       for ( m in registry ) {
+                                               if ( registry[m].state === 'loaded' && allReady( registry[m].dependencies ) ) {
+                                                       execute( m );
                                                }
                                        }
-                                       throw e;
                                }
                        }
 
                        /**
                         * Adds a script tag to the DOM, either using document.write or low-level DOM manipulation,
-                        * depending on whether document-ready has occured yet and whether we are in async mode.
+                        * depending on whether document-ready has occurred yet and whether we are in async mode.
                         *
                         * @param src String: URL to script, will be used as the src attribute in the script tag
                         * @param callback Function: Optional callback which will be run when the script is done
@@ -725,7 +790,7 @@ var mw = ( function ( $, undefined ) {
                         *
                         * @param module string module name to execute
                         */
-                       function execute( module, callback ) {
+                       function execute( module ) {
                                var style, media, i, script, markModuleReady, nestedAddScript;
 
                                if ( registry[module] === undefined ) {
@@ -766,9 +831,6 @@ var mw = ( function ( $, undefined ) {
                                        markModuleReady = function() {
                                                registry[module].state = 'ready';
                                                handlePending( module );
-                                               if ( $.isFunction( callback ) ) {
-                                                       callback();
-                                               }
                                        };
                                        nestedAddScript = function ( arr, callback, async, i ) {
                                                // Recursively call addScript() in its own callback
@@ -794,11 +856,9 @@ 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
-                                       if ( window.console && typeof window.console.log === 'function' ) {
-                                               console.log( 'mw.loader::execute> Exception thrown by ' + module + ': ' + e.message );
-                                               console.log( e );
-                                       }
+                                       log('mw.loader::execute> Exception thrown by ' + module + ': ' + e.message, e);
                                        registry[module].state = 'error';
+                                       handlePending( module );
                                }
                        }
 
@@ -990,6 +1050,10 @@ var mw = ( function ( $, undefined ) {
                                                        }
 
                                                        currReqBase = $.extend( { 'version': formatVersionNumber( maxVersion ) }, reqBase );
+                                                       // For user modules append a user name to the request.
+                                                       if ( group === "user" && mw.config.get( 'wgUserName' ) !== null ) {
+                                                               currReqBase.user = mw.config.get( 'wgUserName' );
+                                                       }
                                                        currReqBaseLength = $.param( currReqBase ).length;
                                                        async = true;
                                                        // We may need to split up the request to honor the query string length limit,
@@ -1157,18 +1221,16 @@ var mw = ( function ( $, undefined ) {
                                        if ( registry[module] !== undefined && registry[module].script !== undefined ) {
                                                throw new Error( 'module already implemented: ' + module );
                                        }
-                                       // Mark module as loaded
-                                       registry[module].state = 'loaded';
                                        // Attach components
                                        registry[module].script = script;
                                        registry[module].style = style;
                                        registry[module].messages = msgs;
-                                       // Execute or queue callback
-                                       if ( compare(
-                                               filter( ['ready'], registry[module].dependencies ),
-                                               registry[module].dependencies ) )
-                                       {
-                                               execute( module );
+                                       // The module may already have been marked as erroneous
+                                       if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
+                                               registry[module].state = 'loaded';
+                                               if ( allReady( registry[module].dependencies ) ) {
+                                                       execute( module );
+                                               }
                                        }
                                },
 
@@ -1192,21 +1254,19 @@ var mw = ( function ( $, undefined ) {
                                        }
                                        // Resolve entire dependency map
                                        dependencies = resolve( dependencies );
-                                       // If all dependencies are met, execute ready immediately
-                                       if ( compare( filter( ['ready'], dependencies ), dependencies ) ) {
+                                       if ( allReady( dependencies ) ) {
+                                               // Run ready immediately
                                                if ( $.isFunction( ready ) ) {
                                                        ready();
                                                }
-                                       }
-                                       // If any dependencies have errors execute error immediately
-                                       else if ( filter( ['error'], dependencies ).length ) {
+                                       } else if ( filter( ['error', 'missing'], dependencies ).length ) {
+                                               // Execute error immediately if any dependencies have errors
                                                if ( $.isFunction( error ) ) {
-                                                       error( new Error( 'one or more dependencies have state "error"' ),
+                                                       error( new Error( 'one or more dependencies have state "error" or "missing"' ),
                                                                dependencies );
                                                }
-                                       }
-                                       // Since some dependencies are not yet ready, queue up a request
-                                       else {
+                                       } else {
+                                               // Not all dependencies are ready: queue up a request
                                                request( dependencies, ready, error );
                                        }
                                },
@@ -1225,7 +1285,7 @@ var mw = ( function ( $, undefined ) {
                                 *  be assumed if loading a URL, and false will be assumed otherwise.
                                 */
                                load: function ( modules, type, async ) {
-                                       var filtered, m;
+                                       var filtered, m, module;
 
                                        // Validate input
                                        if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
@@ -1264,24 +1324,29 @@ var mw = ( function ( $, undefined ) {
                                        // an array of unrelated modules, whereas the modules passed to
                                        // using() are related and must all be loaded.
                                        for ( filtered = [], m = 0; m < modules.length; m += 1 ) {
-                                               if ( registry[modules[m]] !== undefined ) {
-                                                       filtered[filtered.length] = modules[m];
+                                               module = registry[modules[m]];
+                                               if ( module !== undefined ) {
+                                                       if ( $.inArray( module.state, ['error', 'missing'] ) === -1 ) {
+                                                               filtered[filtered.length] = modules[m];
+                                                       }
                                                }
                                        }
 
+                                       if (filtered.length === 0) {
+                                               return;
+                                       }
                                        // Resolve entire dependency map
                                        filtered = resolve( filtered );
-                                       // If all modules are ready, nothing dependency be done
-                                       if ( compare( filter( ['ready'], filtered ), filtered ) ) {
+                                       // If all modules are ready, nothing to be done
+                                       if ( allReady( filtered ) ) {
                                                return;
                                        }
-                                       // If any modules have errors
-                                       if ( filter( ['error'], filtered ).length ) {
+                                       // If any modules have errors: also quit.
+                                       if ( filter( ['error', 'missing'], filtered ).length ) {
                                                return;
                                        }
-                                       // Since some modules are not yet ready, queue up a request
+                                       // Since some modules are not yet ready, queue up a request.
                                        request( filtered, null, null, async );
-                                       return;
                                },
 
                                /**
@@ -1302,7 +1367,8 @@ var mw = ( function ( $, undefined ) {
                                        if ( registry[module] === undefined ) {
                                                mw.loader.register( module );
                                        }
-                                       if ( state === 'ready' && registry[module].state !== state) {
+                                       if ( $.inArray(state, ['ready', 'error', 'missing']) !== -1
+                                               && registry[module].state !== state ) {
                                                // Make sure pending modules depending on this one get executed if their
                                                // dependencies are now fulfilled!
                                                registry[module].state = state;
index d1b51a6..04413b5 100644 (file)
@@ -18,6 +18,8 @@ if( !defined( 'MEDIAWIKI' ) ) {
  */
 class SkinVector extends SkinTemplate {
 
+       protected static $bodyClasses = array( 'vector-animateLayout' );
+
        var $skinname = 'vector', $stylename = 'vector',
                $template = 'VectorTemplate', $useHeadElement = true;
 
@@ -52,6 +54,20 @@ class SkinVector extends SkinTemplate {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'skins.vector' );
        }
+
+       /**
+        * Adds classes to the body element.
+        * 
+        * @param $out OutputPage object
+        * @param &$bodyAttrs Array of attributes that will be set on the body element
+        */
+       function addToBodyAttributes( $out, &$bodyAttrs ) {
+               if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
+                       $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
+               } else {
+                       $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
+               }
+       }
 }
 
 /**
@@ -134,9 +150,7 @@ class VectorTemplate extends BaseTemplate {
                        <!-- /sitenotice -->
                        <?php endif; ?>
                        <!-- firstHeading -->
-                       <h1 id="firstHeading" class="firstHeading">
-                               <span dir="auto"><?php $this->html( 'title' ) ?></span>
-                       </h1>
+                       <h1 id="firstHeading" class="firstHeading"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
                        <!-- /firstHeading -->
                        <!-- bodyContent -->
                        <div id="bodyContent">
index ba689b0..5e2a2e7 100644 (file)
@@ -151,7 +151,7 @@ q {
        font-style: italic;
 }
 code { background-color: #f9f9f9; }
-pre {
+pre, .mw-code {
        padding: 1em;
        border: 1px dashed #2f6fab;
        color: black;
index cf8ca12..57b5410 100644 (file)
@@ -52,7 +52,7 @@ body {
        margin-bottom: 0;
 }
 
-p, pre, td, th, li, dd, dt {
+p, pre, .mw-code, td, th, li, dd, dt {
        line-height: 12pt;
 }
 
index 3d12860..02fd29f 100644 (file)
@@ -183,7 +183,7 @@ blockquote {
        font-family: Times, "Times New Roman", serif;
        font-style: italic;
 }*/
-pre, code, tt, kbd, samp {
+pre, code, tt, kbd, samp, .mw-code {
        /*
         * Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
         * Specifying any valid, second value will trigger correct behaviour without forcing a different font.
@@ -193,7 +193,7 @@ pre, code, tt, kbd, samp {
 code {
        background-color: #f9f9f9;
 }
-pre {
+pre, .mw-code {
        padding: 1em;
        border: 1px dashed #2f6fab;
        color: black;
index 3e3b50b..cf602ea 100644 (file)
@@ -158,7 +158,7 @@ p {
        line-height: 1.2em;
 }
 
-pre {
+pre, .mw-code {
        border: 1pt dashed black;
        white-space: pre;
        font-size: 8pt;
index 5d6eb0b..7149551 100644 (file)
@@ -811,7 +811,7 @@ span.subpages {
        display: block;
 }
 
-pre {
+pre, .mw-code {
        border: solid 1px #3c78b5;
        padding: 0.4em;
        background-color: #f0f0f0;
index 868d32e..2fe259e 100644 (file)
@@ -83,7 +83,7 @@ input.historysubmit {
        margin-left: 1.6em;
 }
 
-pre {
+pre, .mw-code {
        line-height: 1.1em;
 }
 
index dbcf199..7b4f2ae 100644 (file)
@@ -215,7 +215,7 @@ textarea {
        margin-left: 0.5em;
 }
 
-pre {
+pre, .mw-code {
        margin: 2em;
        border: solid 1px black;
 }
index ebb639b..b90fd63 100644 (file)
@@ -11,12 +11,9 @@ div#footer {
        margin-left: 11em;
        padding: 1.25em;
 }
-div#mw-panel div.portal div.body {
+#mw-panel {
        padding-left: 0.5em;
 }
-div#mw-panel div.portal h5 {
-       padding-left: 2.25em;
-}
 #p-search {
        margin-right: 1em;
 }
index b309d15..32a6489 100644 (file)
@@ -652,7 +652,7 @@ div#footer #footer-places li {
        padding-left: 0.5em;
        padding-right: 0.5em;
 }
-#preferences td.htmlform-tip {
+.htmlform-tip {
        font-size: x-small;
        padding: .2em 2em;
        color: #666666;
@@ -683,7 +683,7 @@ ul {
        list-style-image: url(images/bullet-icon.png);
 }
 
-pre {
+pre, .mw-code {
        line-height: 1.3em;
 }
 
@@ -847,40 +847,39 @@ div.vectorTabs ul {
 
 /* Animate between standard and high definition layouts */
 
-div#content,
-div#footer {
+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;
 }
-#p-logo,
-#left-navigation {
+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;
 }
-div#mw-panel div.portal div.body,
-div#mw-panel div.portal h5 {
+body.vector-animateLayout #mw-panel {
        transition: padding-left 250ms;
        -moz-transition: padding-left 250ms;
        -webkit-transition: padding-left 250ms;
        -o-transition: padding-left 250ms;
 }
-#p-search {
+body.vector-animateLayout #p-search {
        transition: margin-right 250ms;
        -moz-transition: margin-right 250ms;
        -webkit-transition: margin-right 250ms;
        -o-transition: margin-right 250ms;
 }
-#p-personal {
+body.vector-animateLayout #p-personal {
        transition: right 250ms;
        -moz-transition: right 250ms;
        -webkit-transition: right 250ms;
        -o-transition: right 250ms;
 }
-#mw-head-base {
+body.vector-animateLayout #mw-head-base {
        transition: margin-left 250ms;
        -moz-transition: margin-left 250ms;
        -webkit-transition: margin-left 250ms;
index fdb53c2..ddb84c3 100644 (file)
@@ -9347,6 +9347,15 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
 
 !! end
 
+!!test
+Language parser function
+!! input
+{{#language:ar}}
+!! result
+<p>العربية
+</p>
+!! end
+
 TODO:
 more images
 more tables
index f626459..8c6a411 100644 (file)
@@ -132,8 +132,18 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        function needsDB() {
+               # if the test says it uses database tables, it needs the database
+               if ( $this->tablesUsed ) {
+                       return true;
+               }
+
+               # if the test says it belongs to the Database group, it needs the database
                $rc = new ReflectionClass( $this );
-               return strpos( $rc->getDocComment(), '@group Database' ) !== false;
+               if ( preg_match( '/@group +Database/im', $rc->getDocComment() ) ) {
+                       return true;
+               }
+
+               return false;
        }
 
        /**
@@ -331,4 +341,65 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                wfDeprecated( $function );
                wfRestoreWarnings();
        }
+
+       /**
+        * Asserts that the given database query yields the rows given by $expectedRows.
+        * The expected rows should be given as indexed (not associative) arrays, with
+        * the values given in the order of the columns in the $fields parameter.
+        * Note that the rows are sorted by the columns given in $fields.
+        *
+        * @param $table String|Array the table(s) to query
+        * @param $fields String|Array the columns to include in the result (and to sort by)
+        * @param $condition String|Array "where" condition(s)
+        * @param $expectedRows Array - an array of arrays giving the expected rows.
+        *
+        * @throws MWException if this test cases's needsDB() method doesn't return true.
+        *         Test cases can use "@group Database" to enable database test support,
+        *         or list the tables under testing in $this->tablesUsed, or override the
+        *         needsDB() method.
+        */
+       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.');
+               }
+
+               $db = wfGetDB( DB_SLAVE );
+
+               $res = $db->select( $table, $fields, $condition, array( 'ORDER BY' => $fields ) );
+               $this->assertNotEmpty( $res, "query failed: " . $db->lastError() );
+
+               $i = 0;
+
+               foreach ( $expectedRows as $expected ) {
+                       $r = $res->fetchRow();
+                       self::stripStringKeys( $r );
+
+                       $i += 1;
+                       $this->assertNotEmpty( $r, "row #$i missing" );
+
+                       $this->assertEquals( $expected, $r, "row #$i mismatches" );
+               }
+
+               $r = $res->fetchRow();
+               self::stripStringKeys( $r );
+
+               $this->assertFalse( $r, "found extra row (after #$i)" );
+       }
+
+       /**
+        * Utility function for eliminating all string keys from an array.
+        * Useful to turn a database result row as returned by fetchRow() into
+        * a pure indexed array.
+        *
+        * @static
+        * @param $r mixed the array to remove string keys from.
+        */
+       protected static function stripStringKeys( &$r ) {
+               if ( !is_array( $r ) ) return;
+
+               foreach ( $r as $k => $v ) {
+                       if ( is_string( $k ) ) unset( $r[$k] );
+               }
+       }
 }
index b023fdc..08eb50f 100644 (file)
@@ -15,11 +15,11 @@ EOF;
 }
 
 // Output a notice when running with older versions of PHPUnit
-if ( !version_compare( PHPUnit_Runner_Version::id(), "3.4.1", ">" ) ) {
+if ( version_compare( PHPUnit_Runner_Version::id(), "3.6.7", "<" ) ) {
   echo <<<EOF
 ********************************************************************************
 
-These tests run best with version PHPUnit 3.4.2 or better. Earlier versions may
+These tests run best with version PHPUnit 3.6.7 or better. Earlier versions may
 show failures because earlier versions of PHPUnit do not properly implement
 dependencies.
 
index 6c3e666..b5418dd 100644 (file)
@@ -8,7 +8,7 @@ class CdbTest extends MediaWikiTestCase {
 
        public function setUp() {
                if ( !CdbReader::haveExtension() ) {
-                       $this->markTestIncomplete( 'This test requires native CDB support to be present.' );
+                       $this->markTestSkipped( 'Native CDB support is not available' );
                }
        }
 
diff --git a/tests/phpunit/includes/DeviceDetectionTest.php b/tests/phpunit/includes/DeviceDetectionTest.php
new file mode 100644 (file)
index 0000000..0e15653
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @group Mobile
+ */
+ class DeviceDetectionTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider provideTestFormatName
+        */
+       public function testFormatName( $format, $userAgent ) {
+               $detector = new DeviceDetection();
+               $this->assertEquals( $format, $detector->detectFormatName( $userAgent ) );
+       }
+
+       public function provideTestFormatName() {
+               return array(
+                       array( 'android',   'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' ),
+                       array( 'iphone2',   'Mozilla/5.0 (ipod: U;CPU iPhone OS 2_2 like Mac OS X: es_es) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3' ),
+                       array( 'iphone',    'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3' ),
+                       array( 'nokia',     'Mozilla/5.0 (SymbianOS/9.1; U; [en]; SymbianOS/91 Series60/3.0) AppleWebKit/413 (KHTML, like Gecko) Safari/413' ),
+                       array( 'palm_pre',  'Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0' ),
+                       array( 'wii',       'Opera/9.00 (Nintendo Wii; U; ; 1309-9; en)' ),
+                       array( 'operamini', 'Opera/9.50 (J2ME/MIDP; Opera Mini/4.0.10031/298; U; en)' ),
+                       array( 'operamobile',    'Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)' ),
+                       array( 'kindle',    'Mozilla/4.0 (compatible; Linux 2.6.10) NetFront/3.3 Kindle/1.0 (screen 600x800)' ),
+                       array( 'kindle2',   'Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 824x1200; rotate)' ),
+                       array( 'capable',   'Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1' ),
+                       array( 'netfront',  'Mozilla/4.08 (Windows; Mobile Content Viewer/1.0) NetFront/3.2' ),
+                       array( 'wap2',      'SonyEricssonK608i/R2L/SN356841000828910 Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
+                       array( 'wap2',      'NokiaN73-2/3.0-630.0.2 Series60/3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
+                       array( 'psp',       'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)' ),
+                       array( 'ps3',       'Mozilla/5.0 (PLAYSTATION 3; 1.00)' ),
+                       array( 'ie', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' ),
+                       array( 'ie', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)' ),
+                       array( 'blackberry', 'BlackBerry9300/5.0.0.716 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/133' ),
+                       array( 'blackberry-lt5', 'BlackBerry7250/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' ),
+               );
+       }
+}
diff --git a/tests/phpunit/includes/LinksUpdateTest.php b/tests/phpunit/includes/LinksUpdateTest.php
new file mode 100644 (file)
index 0000000..4946200
--- /dev/null
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ *
+ * @group Database
+ * ^--- make sure temporary tables are used.
+ */
+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' ) );
+       }
+
+       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',
+                                               ) );
+       }
+
+       protected function makeTitleAndParserOutput( $name, $id ) {
+               $t = Title::newFromText( $name );
+               $t->mArticleID = $id; # XXX: this is fugly
+
+               $po = new ParserOutput();
+               $po->setTitleText( $t->getPrefixedText() );
+
+               return array( $t, $po );
+       }
+
+       public function testUpdate_pagelinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addLink( Title::newFromText( "Foo" ) );
+               $po->addLink( Title::newFromText( "Special:Foo" ) ); // special namespace should be ignored
+               $po->addLink( Title::newFromText( "linksupdatetest:Foo" ) ); // interwiki link should be ignored
+               $po->addLink( Title::newFromText( "#Foo" ) ); // hash link should be ignored
+
+               $this->assertLinksUpdate( $t, $po, 'pagelinks', 'pl_namespace, pl_title', 'pl_from = 111', array(
+                       array( NS_MAIN, 'Foo' ),
+               ) );
+
+               $po = new ParserOutput();
+               $po->setTitleText( $t->getPrefixedText() );
+
+               $po->addLink( Title::newFromText( "Bar" ) );
+
+               $this->assertLinksUpdate( $t, $po, 'pagelinks', 'pl_namespace, pl_title', 'pl_from = 111', array(
+                       array( NS_MAIN, 'Bar' ),
+               ) );
+       }
+
+       public function testUpdate_externallinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addExternalLink( "http://testing.com/wiki/Foo" );
+
+               $this->assertLinksUpdate( $t, $po, 'externallinks', 'el_to, el_index', 'el_from = 111', array(
+                       array( 'http://testing.com/wiki/Foo', 'http://com.testing./wiki/Foo' ),
+               ) );
+       }
+
+       public function testUpdate_categorylinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addCategory( "Foo", "FOO" );
+
+               $this->assertLinksUpdate( $t, $po, 'categorylinks', 'cl_to, cl_sortkey', 'cl_from = 111', array(
+                       array( 'Foo', "FOO\nTESTING" ),
+               ) );
+       }
+
+       public function testUpdate_iwlinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $target = Title::makeTitleSafe( NS_MAIN, "Foo", '', 'linksupdatetest' );
+               $po->addInterwikiLink( $target );
+
+               $this->assertLinksUpdate( $t, $po, 'iwlinks', 'iwl_prefix, iwl_title', 'iwl_from = 111', array(
+                       array( 'linksupdatetest', 'Foo' ),
+               ) );
+       }
+
+       public function testUpdate_templatelinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addTemplate( Title::newFromText( "Template:Foo" ), 23, 42 );
+
+               $this->assertLinksUpdate( $t, $po, 'templatelinks', 'tl_namespace, tl_title', 'tl_from = 111', array(
+                       array( NS_TEMPLATE, 'Foo' ),
+               ) );
+       }
+
+       public function testUpdate_imagelinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addImage( "Foo.png" );
+
+
+               $this->assertLinksUpdate( $t, $po, 'imagelinks', 'il_to', 'il_from = 111', array(
+                       array( 'Foo.png' ),
+               ) );
+       }
+
+       public function testUpdate_langlinks() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->addLanguageLink( Title::newFromText( "en:Foo" ) );
+
+
+               $this->assertLinksUpdate( $t, $po, 'langlinks', 'll_lang, ll_title', 'll_from = 111', array(
+                       array( 'En', 'Foo' ),
+               ) );
+       }
+
+       public function testUpdate_page_props() {
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", 111 );
+
+               $po->setProperty( "foo", "bar" );
+
+               $this->assertLinksUpdate( $t, $po, 'page_props', 'pp_propname, pp_value', 'pp_page = 111', array(
+                       array( 'foo', 'bar' ),
+               ) );
+       }
+
+       #@todo: test recursive, too!
+
+       protected function assertLinksUpdate( Title $title, ParserOutput $parserOutput, $table, $fields, $condition, Array $expectedRows ) {
+               $update = new LinksUpdate( $title, $parserOutput );
+
+               $update->doUpdate();
+
+               $this->assertSelect( $table, $fields, $condition, $expectedRows );
+       }
+}
+
index d459022..da36ffd 100644 (file)
@@ -546,6 +546,15 @@ 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 ) );
+       }
+
        ####### HELPERS ###########################################################
        function __call( $method, $args ) {
                // Call the real method if it exists
index 89d9e0c..664f04a 100644 (file)
@@ -8,6 +8,7 @@ class PreferencesTest extends MediaWikiTestCase {
 
        function __construct() {
                parent::__construct();
+               global $wgEnableEmail;
 
                $this->users['noemail'] = new User;
 
@@ -23,6 +24,9 @@ class PreferencesTest extends MediaWikiTestCase {
 
                $this->context = new RequestContext;
                $this->context->setTitle( Title::newFromText('PreferencesTest') );
+
+               //some tests depends on email setting
+               $wgEnableEmail = true;
        }
 
        /**
index e152778..8b77746 100644 (file)
@@ -7,10 +7,31 @@
  * @group Database
  * ^--- important, causes temporary tables to be used instead of the real database
  */
-class RevisionStorageTest extends PHPUnit_Framework_TestCase {
+class RevisionStorageTest extends MediaWikiTestCase {
 
        var $the_page;
 
+       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->tablesUsed = array_merge( $this->tablesUsed,
+                                                array( 'page',
+                                                     'revision',
+                                                     'text',
+
+                                                     'recentchanges',
+                                                     'logging',
+
+                                                     'page_props',
+                                                     'pagelinks',
+                                                     'categorylinks',
+                                                     'langlinks',
+                                                     'externallinks',
+                                                     'imagelinks',
+                                                     'templatelinks',
+                                                     'iwlinks' ) );
+       }
+
        public function setUp() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
@@ -350,4 +371,3 @@ class RevisionStorageTest extends PHPUnit_Framework_TestCase {
                $this->assertEquals( 'some testing text', $rev->getContent()->getNativeData() );
        }
 }
-?>
index 4edff72..de8f18f 100644 (file)
@@ -102,7 +102,6 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
        }
 
-
        public function dataGetContentModel() {
                return array(
                        array( 'Foo', CONTENT_MODEL_WIKITEXT ),
index 3f3ba5a..2540603 100644 (file)
@@ -9,6 +9,27 @@ class WikiPageTest extends MediaWikiTestCase {
 
        var $pages_to_delete;
 
+       function  __construct( $name = null, array $data = array(), $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->tablesUsed = array_merge ( $this->tablesUsed,
+                                                 array( 'page',
+                                                      'revision',
+                                                      'text',
+
+                                                      'recentchanges',
+                                                      'logging',
+
+                                                      'page_props',
+                                                      'pagelinks',
+                                                      'categorylinks',
+                                                      'langlinks',
+                                                      'externallinks',
+                                                      'imagelinks',
+                                                      'templatelinks',
+                                                      'iwlinks' ) );
+       }
+       
        public function setUp() {
                $this->pages_to_delete = array();
        }
@@ -90,7 +111,7 @@ class WikiPageTest extends MediaWikiTestCase {
 
                $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
        }
-
+       
        public function testDoEdit() {
                $title = Title::newFromText( "WikiPageTest_testDoEdit" );
 
@@ -158,7 +179,7 @@ class WikiPageTest extends MediaWikiTestCase {
                $page = new WikiPage( $page->getTitle() );
                $this->assertTrue( $content->equals( $page->getContent() ) );
        }
-
+       
        public function testDoDeleteArticle() {
                $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
                $id = $page->getId();
@@ -166,7 +187,6 @@ class WikiPageTest extends MediaWikiTestCase {
                $page->doDeleteArticle( "testing deletion" );
 
                $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" );
 
@@ -311,7 +331,7 @@ class WikiPageTest extends MediaWikiTestCase {
                # 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();
                $this->assertEquals( $target, is_null( $t ) ? null : $t->getPrefixedText() );
@@ -542,7 +562,7 @@ more stuff
 
                $this->assertEquals( $expected, is_null( $c ) ? null : trim( $c->getNativeData() ) );
        }
-
+       
        /* @FIXME: fix this!
        public function testGetUndoText() {
                global $wgDiff3;
@@ -595,11 +615,9 @@ more stuff
        */
 
        /**
-        * @group broken
-        *
-        * ^--- marked as broken, because it fails in jenkins, though it passes locally for everyone. or so it seems.
+        * @todo FIXME: this is a better rollback test than the one below, but it keeps failing in jenkins for some reason.
         */
-       public function testDoRollback() {
+       public function broken_testDoRollback() {
                $admin = new User();
                $admin->setName("Admin");
 
@@ -648,6 +666,38 @@ more stuff
                $this->assertEquals( "one\n\ntwo", $page->getContent()->getNativeData() );
        }
 
+       /**
+        * @todo FIXME: the above rollback test is better, but it keeps failing in jenkins for some reason.
+        */
+       public function testDoRollback() {
+               $admin = new User();
+               $admin->setName("Admin");
+
+               $text = "one";
+               $page = $this->newPage( "WikiPageTest_testDoRollback" );
+               $page->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "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->doEditContent( ContentHandler::makeContent( $text, $page->getTitle() ), "adding section two", 0, false, $user1 );
+
+               # now, try the rollback
+               $admin->addGroup( "sysop" ); #XXX: make the test user a sysop...
+               $token = $admin->getEditToken( array( $page->getTitle()->getPrefixedText(), $user1->getName() ), null );
+               $errors = $page->doRollback( $user1->getName(), "testing revert", $token, false, $details, $admin );
+
+               if ( $errors ) {
+                       $this->fail( "Rollback failed:\n" . print_r( $errors, true ) . ";\n" . print_r( $details, true ) );
+               }
+
+               $page = new WikiPage( $page->getTitle() );
+               $this->assertEquals( $rev1->getSha1(), $page->getRevision()->getSha1(), "rollback did not revert to the correct revision" );
+               $this->assertEquals( "one", $page->getContent()->getNativeData() );
+       }
+
        public function dataGetAutosummary( ) {
                return array(
                        array(
diff --git a/tests/phpunit/includes/api/ApiOptionsTest.php b/tests/phpunit/includes/api/ApiOptionsTest.php
new file mode 100644 (file)
index 0000000..8acdc1c
--- /dev/null
@@ -0,0 +1,223 @@
+<?php
+
+/**
+ * @group API
+ */
+class ApiOptionsTest extends MediaWikiLangTestCase {
+
+       private $mTested, $mApiMainMock, $mUserMock, $mContext, $mSession;
+
+       private static $Success = array( 'options' => 'success' );
+
+       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 ) ) );
+
+
+               // Empty session
+               $this->mSession = array();
+
+               $this->mTested = new ApiOptions( $this->mApiMainMock, 'options' );
+       }
+
+       private function getSampleRequest( $custom = array() ) {
+               $request = array(
+                       'token' => '123ABC',
+                       'change' => null,
+                       'optionname' => null,
+                       'optionvalue' => null,
+               );
+               return array_merge( $request, $custom );
+       }
+
+       private function executeQuery( $request ) {
+               $this->mContext->setRequest( new FauxRequest( $request, true, $this->mSession ) );
+               $this->mTested->execute();
+               return $this->mTested->getResult()->getData();
+       }
+
+       /**
+        * @expectedException UsageException
+        */
+       public function testNoToken() {
+               $request = $this->getSampleRequest( array( 'token' => null ) );
+
+               $this->executeQuery( $request );
+       }
+
+       public function testAnon() {
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'isAnon' )
+                       ->will( $this->returnValue( true ) );
+
+               try {
+                       $request = $this->getSampleRequest();
+
+                       $this->executeQuery( $request );
+               } catch ( UsageException $e ) {
+                       $this->assertEquals( 'notloggedin', $e->getCodeString() );
+                       $this->assertEquals( 'Anonymous users cannot change preferences', $e->getMessage() );
+                       return;
+               }
+               $this->fail( "UsageException was not thrown" );
+       }
+
+       public function testNoOptionname() {
+               try {
+                       $request = $this->getSampleRequest( array( 'optionvalue' => '1' ) );
+
+                       $this->executeQuery( $request );
+               } catch ( UsageException $e ) {
+                       $this->assertEquals( 'nooptionname', $e->getCodeString() );
+                       $this->assertEquals( 'The optionname parameter must be set', $e->getMessage() );
+                       return;
+               }
+               $this->fail( "UsageException was not thrown" );
+       }
+
+       public function testNoChanges() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'setOption' );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'saveSettings' );
+
+               try {
+                       $request = $this->getSampleRequest();
+
+                       $this->executeQuery( $request );
+               } catch ( UsageException $e ) {
+                       $this->assertEquals( 'nochanges', $e->getCodeString() );
+                       $this->assertEquals( 'No changes were requested', $e->getMessage() );
+                       return;
+               }
+               $this->fail( "UsageException was not thrown" );
+       }
+
+       public function testReset() {
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'setOption' );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'reset' => '' ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
+       public function testOptionWithValue() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'optionname' => 'name', 'optionvalue' => 'value' ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
+       public function testOptionResetValue() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'name' ), $this->equalTo( null ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'optionname' => 'name' ) );
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
+       public function testChange() {
+               $this->mUserMock->expects( $this->never() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->at( 1 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'willBeNull' ), $this->equalTo( null ) );
+
+               $this->mUserMock->expects( $this->at( 2 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
+
+               $this->mUserMock->expects( $this->at( 3 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $request = $this->getSampleRequest( array( 'change' => 'willBeNull|willBeEmpty=|willBeHappy=Happy' ) );
+
+               $response = $this->executeQuery( $request );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+
+       public function testResetChangeOption() {
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'resetOptions' );
+
+               $this->mUserMock->expects( $this->at( 2 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
+
+               $this->mUserMock->expects( $this->at( 3 ) )
+                       ->method( 'setOption' )
+                       ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
+
+               $this->mUserMock->expects( $this->once() )
+                       ->method( 'saveSettings' );
+
+               $args = array(
+                       'reset' => '',
+                       'change' => 'willBeHappy=Happy',
+                       'optionname' => 'name',
+                       'optionvalue' => 'value'
+               );
+
+               $response = $this->executeQuery( $this->getSampleRequest( $args ) );
+
+               $this->assertEquals( self::$Success, $response );
+       }
+}
index af88bc8..ec2fbac 100644 (file)
@@ -1,6 +1,9 @@
 <?php
 
 /**
+ * @group medium
+ * ^---- causes phpunit to use a higher timeout threshold
+ * 
  * @group FileRepo
  * @group FileBackend
  */
@@ -35,6 +38,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        $this->singleBackend = new FSFileBackend( array(
                                'name'        => 'localtesting',
                                'lockManager' => 'fsLockManager',
+                               #'parallelize' => 'implicit',
                                'containerPaths' => array(
                                        'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
                                        'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
@@ -43,6 +47,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->multiBackend = new FileBackendMultiWrite( array(
                        'name'        => 'localtesting',
                        'lockManager' => 'fsLockManager',
+                       'parallelize' => 'implicit',
                        'backends'    => array(
                                array(
                                        'name'          => 'localmutlitesting1',
@@ -205,7 +210,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       function doTestStore( $op ) {
+       private function doTestStore( $op ) {
                $backendName = $this->backendClass();
 
                $source = $op['src'];
@@ -220,9 +225,9 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->doOperation( $op );
 
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Store from $source to $dest succeeded without warnings ($backendName)." );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertEquals( true, $status->isOK(),
                        "Store from $source to $dest succeeded ($backendName)." );
                $this->assertEquals( array( 0 => true ), $status->success,
                        "Store from $source to $dest has proper 'success' field in Status ($backendName)." );
@@ -287,7 +292,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       function doTestCopy( $op ) {
+       private function doTestCopy( $op ) {
                $backendName = $this->backendClass();
 
                $source = $op['src'];
@@ -297,7 +302,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->doOperation(
                        array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of file at $source succeeded ($backendName)." );
 
                if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
@@ -306,7 +311,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->doOperation( $op );
 
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Copy from $source to $dest succeeded without warnings ($backendName)." );
                $this->assertEquals( true, $status->isOK(),
                        "Copy from $source to $dest succeeded ($backendName)." );
@@ -385,7 +390,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->doOperation(
                        array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of file at $source succeeded ($backendName)." );
 
                if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
@@ -393,7 +398,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
 
                $status = $this->backend->doOperation( $op );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Move from $source to $dest succeeded without warnings ($backendName)." );
                $this->assertEquals( true, $status->isOK(),
                        "Move from $source to $dest succeeded ($backendName)." );
@@ -473,13 +478,13 @@ class FileBackendTest extends MediaWikiTestCase {
                if ( $withSource ) {
                        $status = $this->backend->doOperation(
                                array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Creation of file at $source succeeded ($backendName)." );
                }
 
                $status = $this->backend->doOperation( $op );
                if ( $okStatus ) {
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Deletion of file at $source succeeded without warnings ($backendName)." );
                        $this->assertEquals( true, $status->isOK(),
                                "Deletion of file at $source succeeded ($backendName)." );
@@ -555,13 +560,13 @@ class FileBackendTest extends MediaWikiTestCase {
                if ( $alreadyExists ) {
                        $status = $this->backend->doOperation(
                                array( 'op' => 'create', 'content' => $oldText, 'dst' => $dest ) );
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Creation of file at $dest succeeded ($backendName)." );
                }
 
                $status = $this->backend->doOperation( $op );
                if ( $okStatus ) {
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Creation of file at $dest succeeded without warnings ($backendName)." );
                        $this->assertEquals( true, $status->isOK(),
                                "Creation of file at $dest succeeded ($backendName)." );
@@ -668,7 +673,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       public function doTestConcatenate( $params, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
+       private function doTestConcatenate( $params, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
                $backendName = $this->backendClass();
 
                $expContent = '';
@@ -685,7 +690,7 @@ class FileBackendTest extends MediaWikiTestCase {
                }
                $status = $this->backend->doOperations( $ops );
 
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of source files succeeded ($backendName)." );
 
                $dest = $params['dst'];
@@ -702,7 +707,7 @@ class FileBackendTest extends MediaWikiTestCase {
                // Combine the files into one
                $status = $this->backend->concatenate( $params );
                if ( $okStatus ) {
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Creation of concat file at $dest succeeded without warnings ($backendName)." );
                        $this->assertEquals( true, $status->isOK(),
                                "Creation of concat file at $dest succeeded ($backendName)." );
@@ -802,7 +807,7 @@ class FileBackendTest extends MediaWikiTestCase {
                if ( $alreadyExists ) {
                        $this->prepare( array( 'dir' => dirname( $path ) ) );
                        $status = $this->backend->create( array( 'dst' => $path, 'content' => $content ) );
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Creation of file at $path succeeded ($backendName)." );
 
                        $size = $this->backend->getFileSize( array( 'src' => $path ) );
@@ -857,14 +862,14 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       public function doTestGetFileContents( $source, $content ) {
+       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->assertEquals( array(), $status->errors,
+               $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)." );
@@ -902,14 +907,14 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->tearDownFiles();
        }
 
-       public function doTestGetLocalCopy( $source, $content ) {
+       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->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of file at $source succeeded ($backendName)." );
 
                $tmpFile = $this->backend->getLocalCopy( array( 'src' => $source ) );
@@ -952,7 +957,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->doOperation(
                        array( 'op' => 'create', 'content' => $content, 'dst' => $source ) );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of file at $source succeeded ($backendName)." );
 
                $tmpFile = $this->backend->getLocalReference( array( 'src' => $source ) );
@@ -996,12 +1001,12 @@ class FileBackendTest extends MediaWikiTestCase {
                );
        }
 
-       function doTestPrepareAndClean( $path, $isOK ) {
+       private function doTestPrepareAndClean( $path, $isOK ) {
                $backendName = $this->backendClass();
 
                $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
                if ( $isOK ) {
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Preparing dir $path succeeded without warnings ($backendName)." );
                        $this->assertEquals( true, $status->isOK(),
                                "Preparing dir $path succeeded ($backendName)." );
@@ -1012,7 +1017,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->clean( array( 'dir' => dirname( $path ) ) );
                if ( $isOK ) {
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Cleaning dir $path succeeded without warnings ($backendName)." );
                        $this->assertEquals( true, $status->isOK(),
                                "Cleaning dir $path succeeded ($backendName)." );
@@ -1052,7 +1057,7 @@ class FileBackendTest extends MediaWikiTestCase {
                );
                foreach ( $dirs as $dir ) {
                        $status = $this->prepare( array( 'dir' => $dir ) );
-                       $this->assertEquals( array(), $status->errors,
+                       $this->assertGoodStatus( $status,
                                "Preparing dir $dir succeeded without warnings ($backendName)." );
                }
 
@@ -1065,7 +1070,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $status = $this->backend->clean(
                        array( 'dir' => "$base/unittest-cont1", 'recursive' => 1 ) );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Recursive cleaning of dir $dir succeeded without warnings ($backendName)." );
 
                foreach ( $dirs as $dir ) {
@@ -1089,18 +1094,26 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $this->backend = $this->singleBackend;
                $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
+               $this->doTestDoOperations2();
                $this->tearDownFiles();
 
                $this->backend = $this->multiBackend;
                $this->tearDownFiles();
+               $this->doTestDoOperations2();
+               $this->tearDownFiles();
+
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
                $this->doTestDoOperationsFailing();
                $this->tearDownFiles();
 
-               // @TODO: test some cases where the ops should fail
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
        }
 
-       function doTestDoOperations() {
+       private function doTestDoOperations() {
                $base = $this->baseStorePath();
 
                $fileA = "$base/unittest-cont1/a/b/fileA.txt";
@@ -1117,6 +1130,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->backend->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
                $this->prepare( array( 'dir' => dirname( $fileC ) ) );
                $this->backend->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
 
                $status = $this->backend->doOperations( array(
                        array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC, 'overwrite' => 1 ),
@@ -1147,7 +1161,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        // Does nothing
                ) );
 
-               $this->assertEquals( array(), $status->errors, "Operation batch succeeded" );
+               $this->assertGoodStatus( $status, "Operation batch succeeded" );
                $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
                $this->assertEquals( 13, count( $status->success ),
                        "Operation batch has correct success array" );
@@ -1172,6 +1186,93 @@ class FileBackendTest extends MediaWikiTestCase {
                        "Correct file SHA-1 of $fileC" );
        }
 
+       // concurrency orientated
+       function doTestDoOperations2() {
+               $base = $this->baseStorePath();
+
+               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
+               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
+               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
+
+               $tmpNameA = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameA, $fileAContents );
+               $tmpNameB = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameB, $fileBContents );
+               $tmpNameC = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameC, $fileCContents );
+
+               $this->filesToPrune[] = $tmpNameA; # avoid file leaking
+               $this->filesToPrune[] = $tmpNameB; # avoid file leaking
+               $this->filesToPrune[] = $tmpNameC; # avoid file leaking
+
+               $fileA = "$base/unittest-cont1/a/b/fileA.txt";
+               $fileB = "$base/unittest-cont1/a/b/fileB.txt";
+               $fileC = "$base/unittest-cont1/a/b/fileC.txt";
+               $fileD = "$base/unittest-cont1/a/b/fileD.txt";
+
+               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
+               $this->backend->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
+               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
+               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
+
+               $status = $this->backend->doOperations( array(
+                       array( 'op' => 'store', 'src' => $tmpNameA, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       array( 'op' => 'store', 'src' => $tmpNameB, 'dst' => $fileB, 'overwrite' => 1 ),
+                       array( 'op' => 'store', 'src' => $tmpNameC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty> (file:<orginal contents>)
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD, 'overwrite' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<empty>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileD, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileA, 'overwrite' => 1 ),
+                       // Now: A:<B>, B:<empty>, C:<empty>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC ),
+                       // Now: A:<B>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileA, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Now: A:<empty>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'null' ),
+                       // Does nothing
+               ) );
+
+               $this->assertGoodStatus( $status, "Operation batch succeeded" );
+               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
+               $this->assertEquals( 16, count( $status->success ),
+                       "Operation batch has correct success array" );
+
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
+                       "File does not exist at $fileA" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
+                       "File does not exist at $fileB" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
+                       "File does not exist at $fileD" );
+
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
+                       "File exists at $fileC" );
+               $this->assertEquals( $fileBContents,
+                       $this->backend->getFileContents( array( 'src' => $fileC ) ),
+                       "Correct file contents of $fileC" );
+               $this->assertEquals( strlen( $fileBContents ),
+                       $this->backend->getFileSize( array( 'src' => $fileC ) ),
+                       "Correct file size of $fileC" );
+               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
+                       $this->backend->getFileSha1Base36( array( 'src' => $fileC ) ),
+                       "Correct file SHA-1 of $fileC" );
+       }
+
        function doTestDoOperationsFailing() {
                $base = $this->baseStorePath();
 
@@ -1274,7 +1375,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
                }
                $status = $this->backend->doOperations( $ops );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of files succeeded ($backendName)." );
                $this->assertEquals( true, $status->isOK(),
                        "Creation of files succeeded with OK status ($backendName)." );
@@ -1427,7 +1528,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
                }
                $status = $this->backend->doOperations( $ops );
-               $this->assertEquals( array(), $status->errors,
+               $this->assertGoodStatus( $status,
                        "Creation of files succeeded ($backendName)." );
                $this->assertEquals( true, $status->isOK(),
                        "Creation of files succeeded with OK status ($backendName)." );
@@ -1563,6 +1664,64 @@ class FileBackendTest extends MediaWikiTestCase {
                foreach ( $iter as $iter ) {} // no errors
        }
 
+       public function testLockCalls() {
+               $this->backend = $this->singleBackend;
+               $this->doTestLockCalls();
+       }
+
+       private function doTestLockCalls() {
+               $backendName = $this->backendClass();
+
+               for ( $i=0; $i<50; $i++ ) {
+                       $paths = array(
+                               "test1.txt",
+                               "test2.txt",
+                               "test3.txt",
+                               "subdir1",
+                               "subdir1", // duplicate
+                               "subdir1/test1.txt",
+                               "subdir1/test2.txt",
+                               "subdir2",
+                               "subdir2", // duplicate
+                               "subdir2/test3.txt",
+                               "subdir2/test4.txt",
+                               "subdir2/subdir",
+                               "subdir2/subdir/test1.txt",
+                               "subdir2/subdir/test2.txt",
+                               "subdir2/subdir/test3.txt",
+                               "subdir2/subdir/test4.txt",
+                               "subdir2/subdir/test5.txt",
+                               "subdir2/subdir/sub",
+                               "subdir2/subdir/sub/test0.txt",
+                               "subdir2/subdir/sub/120-px-file.txt",
+                       );
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+               }
+       }
+
        // test helper wrapper for backend prepare() function
        private function prepare( array $params ) {
                $this->dirsToPrune[] = $params['dir'];
@@ -1588,17 +1747,18 @@ class FileBackendTest extends MediaWikiTestCase {
                $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 ) );
+                               $this->backend->delete( array( 'src' => "$base/$container/$file" ),
+                                       array( 'force' => 1, 'nonLocking' => 1 ) );
                        }
                }
        }
 
        private function recursiveClean( $dir ) {
-               do {
-                       if ( !$this->backend->clean( array( 'dir' => $dir ) )->isOK() ) {
-                               break;
-                       }
-               } while ( $dir = FileBackend::parentStoragePath( $dir ) );
+               $this->backend->clean( array( 'dir' => $dir, 'recursive' => 1 ) );
+       }
+
+       function assertGoodStatus( $status, $msg ) {
+               $this->assertEquals( print_r( array(), 1 ), print_r( $status->errors, 1 ), $msg );
        }
 
        function tearDown() {
index 2f8c232..eaa6aa0 100644 (file)
@@ -74,7 +74,7 @@ abstract class DumpTestCase extends MediaWikiTestCase {
         *
         * Clears $wgUser, and reports errors from addDBData to PHPUnit
         */
-       function setUp() {
+       protected function setUp() {
                global $wgUser;
 
                parent::setUp();
@@ -88,6 +88,30 @@ abstract class DumpTestCase extends MediaWikiTestCase {
                $wgUser = new User();
        }
 
+       /**
+        * Checks for test output consisting only of lines containing ETA announcements
+        */
+       function expectETAOutput() {
+               // Newer PHPUnits require assertion about the output using PHPUnit's own
+               // expectOutput[...] functions. However, the PHPUnit shipped prediactes
+               // do not allow to check /each/ line of the output using /readable/ REs.
+               // So we ...
+               //
+               // 1. ... add a dummy output checking to make PHPUnit not complain
+               //    about unchecked test output
+               $this->expectOutputRegex( '//' );
+
+               // 2. Do the real output checking on our own.
+               $lines = explode( "\n", $this->getActualOutput() );
+               $this->assertGreaterThan( 1, count( $lines ), "Minimal lines of produced output" );
+               $this->assertEquals( '', array_pop( $lines ), "Output ends in LF" );
+               $timestamp_re = "[0-9]{4}-[01][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-6][0-9]";
+               foreach ( $lines as $line ) {
+                       $this->assertRegExp( "/$timestamp_re: .* \(ID [0-9]+\) [0-9]* pages .*, [0-9]* revs .*, ETA/", $line );
+               }
+       }
+
+
        /**
         * Step the current XML reader until node end of given name is found.
         *
@@ -289,6 +313,18 @@ abstract class DumpTestCase extends MediaWikiTestCase {
                $this->skipWhitespace();
 
                $this->assertTextNode( "comment", $summary );
+               $this->skipWhitespace();
+
+               if ( $this->xml->name == "model" ) { // model tag is optional
+                       $this->assertTextNode( "model", CONTENT_MODEL_WIKITEXT ); //@todo: make this a test parameter
+                       $this->skipWhitespace();
+               }
+
+
+               if ( $this->xml->name == "format" ) { // format tag is optional
+                       $this->assertTextNode( "format", CONTENT_FORMAT_WIKITEXT ); //@todo: make this a test parameter
+                       $this->skipWhitespace();
+               }
 
                $this->assertNodeStart( "text", false );
                if ( $text_bytes !== false ) {
diff --git a/tests/phpunit/maintenance/backupPrefetchTest.php b/tests/phpunit/maintenance/backupPrefetchTest.php
new file mode 100644 (file)
index 0000000..9273233
--- /dev/null
@@ -0,0 +1,267 @@
+<?php
+global $IP;
+require_once( "$IP/maintenance/backupPrefetch.inc" );
+
+/**
+ * Tests for BaseDump
+ *
+ * @group Dump
+ */
+class BaseDumpTest extends MediaWikiTestCase {
+
+       /**
+        * @var BaseDump the BaseDump instance used within a test.
+        *
+        * If set, this BaseDump gets automatically closed in tearDown.
+        */
+       private $dump = null;
+
+       protected function tearDown() {
+               parent::tearDown();
+
+               if ( $this->dump !== null ) {
+                       $this->dump->close();
+               }
+       }
+
+       /**
+        * asserts that a prefetch yields an expected string
+        *
+        * @param $expected string|null: the exepcted result of the prefetch
+        * @param $page int: the page number to prefetch the text for
+        * @param $revision int: the revision number to prefetch the text for
+        */
+       private function assertPrefetchEquals( $expected, $page, $revision ) {
+               $this->assertEquals( $expected, $this->dump->prefetch( $page, $revision ),
+                       "Prefetch of page $page revision $revision" );
+
+       }
+
+       function testSequential() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP1Text1", 1, 1 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text4 some additional Text", 2, 5 );
+               $this->assertPrefetchEquals( "Talk about BackupDumperTestP1 Text1", 4, 8 );
+       }
+
+       function testSynchronizeRevisionMissToRevision() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( null, 2, 3 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text4 some additional Text", 2, 5 );
+       }
+
+       function testSynchronizeRevisionMissToPage() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( null, 2, 40 );
+               $this->assertPrefetchEquals( "Talk about BackupDumperTestP1 Text1", 4, 8 );
+       }
+
+       function testSynchronizePageMiss() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( null, 3, 40 );
+               $this->assertPrefetchEquals( "Talk about BackupDumperTestP1 Text1", 4, 8 );
+       }
+
+       function testPageMissAtEnd() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( null, 6, 40 );
+       }
+
+       function testRevisionMissAtEnd() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( null, 4, 40 );
+       }
+
+       function testSynchronizePageMissAtStart() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( null, 0, 2 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+       }
+
+       function testSynchronizeRevisionMissAtStart() {
+               $fname = $this->setUpPrefetch();
+               $this->dump = new BaseDump( $fname );
+
+               $this->assertPrefetchEquals( null, 1, -2 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+       }
+
+       function testSequentialAcrossFiles() {
+               $fname1 = $this->setUpPrefetch( array( 1 ) );
+               $fname2 = $this->setUpPrefetch( array( 2, 4 ) );
+               $this->dump = new BaseDump( $fname1 . ";" . $fname2 );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP1Text1", 1, 1 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text4 some additional Text", 2, 5 );
+               $this->assertPrefetchEquals( "Talk about BackupDumperTestP1 Text1", 4, 8 );
+       }
+
+       function testSynchronizeSkipAcrossFile() {
+               $fname1 = $this->setUpPrefetch( array( 1 ) );
+               $fname2 = $this->setUpPrefetch( array( 2 ) );
+               $fname3 = $this->setUpPrefetch( array( 4 ) );
+               $this->dump = new BaseDump( $fname1 . ";" . $fname2 . ";" . $fname3 );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP1Text1", 1, 1 );
+               $this->assertPrefetchEquals( "Talk about BackupDumperTestP1 Text1", 4, 8 );
+       }
+
+       function testSynchronizeMissInWholeFirstFile() {
+               $fname1 = $this->setUpPrefetch( array( 1 ) );
+               $fname2 = $this->setUpPrefetch( array( 2 ) );
+               $this->dump = new BaseDump( $fname1 . ";" . $fname2 );
+
+               $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
+       }
+
+
+       /**
+        * Constructs a temporary file that can be used for prefetching
+        *
+        * The temporary file is removed by DumpBackup upon tearDown.
+        *
+        * @param $requested_pages Array The indices of the page parts that should
+        *             go into the prefetch file. 1,2,4 are available.
+        * @return String The file name of the created temporary file
+        */
+       private function setUpPrefetch( $requested_pages = array( 1, 2, 4 ) ) {
+               // The file name, where we store the prepared prefetch file
+               $fname = $this->getNewTempFile();
+
+               // The header of every prefetch file
+               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.6/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.6/ http://www.mediawiki.org/xml/export-0.6.xsd" version="0.6" xml:lang="en">
+  <siteinfo>
+    <sitename>wikisvn</sitename>
+    <base>http://localhost/wiki-svn/index.php/Main_Page</base>
+    <generator>MediaWiki 1.20alpha</generator>
+    <case>first-letter</case>
+    <namespaces>
+      <namespace key="-2" case="first-letter">Media</namespace>
+      <namespace key="-1" case="first-letter">Special</namespace>
+      <namespace key="0" case="first-letter" />
+      <namespace key="1" case="first-letter">Talk</namespace>
+      <namespace key="2" case="first-letter">User</namespace>
+      <namespace key="3" case="first-letter">User talk</namespace>
+      <namespace key="4" case="first-letter">Wikisvn</namespace>
+      <namespace key="5" case="first-letter">Wikisvn talk</namespace>
+      <namespace key="6" case="first-letter">File</namespace>
+      <namespace key="7" case="first-letter">File talk</namespace>
+      <namespace key="8" case="first-letter">MediaWiki</namespace>
+      <namespace key="9" case="first-letter">MediaWiki talk</namespace>
+      <namespace key="10" case="first-letter">Template</namespace>
+      <namespace key="11" case="first-letter">Template talk</namespace>
+      <namespace key="12" case="first-letter">Help</namespace>
+      <namespace key="13" case="first-letter">Help talk</namespace>
+      <namespace key="14" case="first-letter">Category</namespace>
+      <namespace key="15" case="first-letter">Category talk</namespace>
+    </namespaces>
+  </siteinfo>
+';
+
+
+               // An array holding the pages that are available for prefetch
+               $available_pages = array();
+
+               // Simple plain page
+               $available_pages[1] = '  <page>
+    <title>BackupDumperTestP1</title>
+    <ns>0</ns>
+    <id>1</id>
+    <revision>
+      <id>1</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP1Summary1</comment>
+      <text xml:space="preserve">BackupDumperTestP1Text1</text>
+      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
+    </revision>
+  </page>
+';
+               // Page with more than one revisions. Hole in rev ids.
+               $available_pages[2] = '  <page>
+    <title>BackupDumperTestP2</title>
+    <ns>0</ns>
+    <id>2</id>
+    <revision>
+      <id>2</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary1</comment>
+      <text xml:space="preserve">BackupDumperTestP2Text1</text>
+      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
+    </revision>
+    <revision>
+      <id>5</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary4 extra</comment>
+      <text xml:space="preserve">BackupDumperTestP2Text4 some additional Text</text>
+      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
+    </revision>
+  </page>
+';
+               // Page with id higher than previous id + 1
+               $available_pages[4] = '  <page>
+    <title>Talk:BackupDumperTestP1</title>
+    <ns>1</ns>
+    <id>4</id>
+    <revision>
+      <id>8</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>Talk BackupDumperTestP1 Summary1</comment>
+      <text xml:space="preserve">Talk about BackupDumperTestP1 Text1</text>
+      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
+    </revision>
+  </page>
+';
+
+               // The common ending for all files
+               $tail = '</mediawiki>
+';
+
+               // Putting together the content of the prefetch files
+               $content = $header;
+               foreach ( $requested_pages as $i ) {
+                       $this->assertTrue( array_key_exists( $i, $available_pages ),
+                               "Check for availability of requested page " . $i );
+                       $content .= $available_pages[ $i ];
+               }
+               $content .= $tail;
+
+               $this->assertEquals( strlen( $content ), file_put_contents(
+                               $fname, $content ), "Length of prepared prefetch" );
+
+               return $fname;
+       }
+
+}
diff --git a/tests/phpunit/maintenance/backupTextPassTest.php b/tests/phpunit/maintenance/backupTextPassTest.php
new file mode 100644 (file)
index 0000000..0dade60
--- /dev/null
@@ -0,0 +1,558 @@
+<?php
+global $IP;
+require_once( "$IP/maintenance/backup.inc" );
+require_once( "$IP/maintenance/backupTextPass.inc" );
+
+/**
+ * Tests for page dumps of BackupDumper
+ *
+ * @group Database
+ * @group Dump
+ */
+class TextPassDumperTest extends DumpTestCase {
+
+       // We'll add several pages, revision and texts. The following variables hold the
+       // corresponding ids.
+       private $pageId1, $pageId2, $pageId3, $pageId4, $pageId5;
+       private $revId1_1, $textId1_1;
+       private $revId2_1, $textId2_1, $revId2_2, $textId2_2;
+       private $revId2_3, $textId2_3, $revId2_4, $textId2_4;
+       private $revId3_1, $textId3_1, $revId3_2, $textId3_2;
+       private $revId4_1, $textId4_1;
+
+       function addDBData() {
+               $this->tablesUsed[] = 'page';
+               $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'text';
+
+               try {
+                       // Simple page
+                       $title = Title::newFromText( 'BackupDumperTestP1' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId1_1, $this->textId1_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP1Text1", "BackupDumperTestP1Summary1" );
+                       $this->pageId1 = $page->getId();
+
+                       // Page with more than one revision
+                       $title = Title::newFromText( 'BackupDumperTestP2' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId2_1, $this->textId2_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text1", "BackupDumperTestP2Summary1" );
+                       list( $this->revId2_2, $this->textId2_2 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text2", "BackupDumperTestP2Summary2" );
+                       list( $this->revId2_3, $this->textId2_3 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text3", "BackupDumperTestP2Summary3" );
+                       list( $this->revId2_4, $this->textId2_4 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text4 some additional Text  ",
+                               "BackupDumperTestP2Summary4 extra " );
+                       $this->pageId2 = $page->getId();
+
+                       // Deleted page.
+                       $title = Title::newFromText( 'BackupDumperTestP3' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId3_1, $this->textId3_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP3Text1", "BackupDumperTestP2Summary1" );
+                       list( $this->revId3_2, $this->textId3_2 ) = $this->addRevision( $page,
+                               "BackupDumperTestP3Text2", "BackupDumperTestP2Summary2" );
+                       $this->pageId3 = $page->getId();
+                       $page->doDeleteArticle( "Testing ;)" );
+
+                       // Page from non-default namespace
+                       $title = Title::newFromText( 'BackupDumperTestP1', NS_TALK );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId4_1, $this->textId4_1 ) = $this->addRevision( $page,
+                               "Talk about BackupDumperTestP1 Text1",
+                               "Talk BackupDumperTestP1 Summary1" );
+                       $this->pageId4 = $page->getId();
+               } catch ( Exception $e ) {
+                       // We'd love to pass $e directly. However, ... see
+                       // documentation of exceptionFromAddDBData in
+                       // DumpTestCase
+                       $this->exceptionFromAddDBData = $e;
+               }
+
+       }
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Since we will restrict dumping by page ranges (to allow
+               // working tests, even if the db gets prepopulated by a base
+               // class), we have to assert, that the page id are consecutively
+               // increasing
+               $this->assertEquals(
+                       array( $this->pageId2, $this->pageId3, $this->pageId4 ),
+                       array( $this->pageId1 + 1, $this->pageId2 + 1, $this->pageId3 + 1 ),
+                       "Page ids increasing without holes" );
+
+       }
+
+       function testPlain() {
+               // Setting up the dump
+               $nameStub = $this->setUpStub();
+               $nameFull = $this->getNewTempFile();
+               $dumper = new TextPassDumper( array ( "--stub=file:" . $nameStub,
+                               "--output=file:" . $nameFull ) );
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
+
+               // Checking for correctness of the dumped data
+               $this->assertDumpStart( $nameFull );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, false, "0bolhl6ol7i6x0e7yq91gxgaan39j87",
+                       "BackupDumperTestP1Text1" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                       $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
+                       "BackupDumperTestP2Text1" );
+               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                       $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
+                       "BackupDumperTestP2Text2" );
+               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                       $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
+                       "BackupDumperTestP2Text3" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
+                       "BackupDumperTestP2Text4 some additional Text" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
+                       "Talk about BackupDumperTestP1 Text1" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+       }
+
+       function testPrefetchPlain() {
+               // The mapping between ids and text, for the hits of the prefetch mock
+               $prefetchMap = array(
+                       array( $this->pageId1, $this->revId1_1, "Prefetch_________1Text1" ),
+                       array( $this->pageId2, $this->revId2_3, "Prefetch_________2Text3" )
+               );
+
+               // The mock itself
+               $prefetchMock = $this->getMock( 'BaseDump', array( 'prefetch' ), array(), '', FALSE );
+               $prefetchMock->expects( $this->exactly( 6 ) )
+                       ->method( 'prefetch' )
+                       ->will( $this->returnValueMap( $prefetchMap ) );
+
+               // Setting up of the dump
+               $nameStub = $this->setUpStub();
+               $nameFull = $this->getNewTempFile();
+               $dumper = new TextPassDumper( array ( "--stub=file:"
+                               . $nameStub, "--output=file:" . $nameFull ) );
+               $dumper->prefetch = $prefetchMock;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
+
+               // Checking for correctness of the dumped data
+               $this->assertDumpStart( $nameFull );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               // Prefetch kicks in. This is still the SHA-1 of the original text,
+               // But the actual text (with different SHA-1) comes from prefetch.
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, false, "0bolhl6ol7i6x0e7yq91gxgaan39j87",
+                       "Prefetch_________1Text1" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                       $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
+                       "BackupDumperTestP2Text1" );
+               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                       $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
+                       "BackupDumperTestP2Text2" );
+               // Prefetch kicks in. This is still the SHA-1 of the original text,
+               // But the actual text (with different SHA-1) comes from prefetch.
+               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                       $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
+                       "Prefetch_________2Text3" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
+                       "BackupDumperTestP2Text4 some additional Text" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
+                       "Talk about BackupDumperTestP1 Text1" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+
+       }
+
+       /**
+        * Ensures that checkpoint dumps are used and written, by successively increasing the
+        * stub size and dumping until the duration crosses a threshold.
+        *
+        * @param $checkpointFormat string: Either "file" for plain text or "gzip" for gzipped
+        *                checkpoint files.
+        */
+       private function checkpointHelper( $checkpointFormat = "file" ) {
+               // Getting temporary names
+               $nameStub = $this->getNewTempFile();
+               $nameOutputDir = $this->getNewTempDirectory();
+
+               $stderr = fopen( 'php://output', 'a' );
+               if ( $stderr === FALSE ) {
+                       $this->fail( "Could not open stream for stderr" );
+               }
+
+               $iterations = 32; // We'll start with that many iterations of revisions in stub
+               $lastDuration = 0;
+               $minDuration = 2; // We want the dump to take at least this many seconds
+               $checkpointAfter = 0.5; // Generate checkpoint after this many seconds
+
+
+               // Until a dump takes at least $minDuration seconds, perform a dump and check
+               // duration. If the dump did not take long enough increase the iteration
+               // count, to generate a bigger stub file next time.
+               while ( $lastDuration < $minDuration ) {
+
+                       // Setting up the dump
+                       wfRecursiveRemoveDir( $nameOutputDir );
+                       $this->assertTrue( wfMkdirParents( $nameOutputDir ),
+                               "Creating temporary output directory " );
+                       $this->setUpStub( $nameStub, $iterations );
+                       $dumper = new TextPassDumper( array ( "--stub=file:" . $nameStub,
+                                       "--output=" . $checkpointFormat . ":" . $nameOutputDir . "/full",
+                                       "--maxtime=1" /*This is in minutes. Fixup is below*/,
+                                       "--checkpointfile=checkpoint-%s-%s.xml.gz" ) );
+                       $dumper->setDb( $this->db );
+                       $dumper->maxTimeAllowed = $checkpointAfter; // Patching maxTime from 1 minute
+                       $dumper->stderr = $stderr;
+
+                       // The actual dump and taking time
+                       $ts_before = wfTime();
+                       $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
+                       $ts_after = wfTime();
+                       $lastDuration = $ts_after - $ts_before;
+
+                       // Handling increasing the iteration count for the stubs
+                       if ( $lastDuration < $minDuration ) {
+                               $old_iterations = $iterations;
+                               if ( $lastDuration > 0.2 ) {
+                                       // lastDuration is big enough, to allow an educated guess
+                                       $factor = ( $minDuration + 0.5 ) / $lastDuration;
+                                       if ( ( $factor > 1.1 ) && ( $factor < 100 ) ) {
+                                               // educated guess is reasonable
+                                               $iterations = (int)( $iterations * $factor );
+                                       }
+                               }
+
+                               if ( $old_iterations == $iterations ) {
+                                       // Heuristics were not applied, so we just *2.
+                                       $iterations *= 2;
+                               }
+
+                               $this->assertLessThan( 50000, $iterations,
+                                       "Emergency stop against infinitely increasing iteration "
+                                       . "count ( last duration: $lastDuration )" );
+                       }
+               }
+
+               // The dump (hopefully) did take long enough to produce more than one
+               // checkpoint file.
+               //
+               // We now check all the checkpoint files for validity.
+
+               $files = scandir( $nameOutputDir );
+               $this->assertTrue( asort( $files ), "Sorting files in temporary directory" );
+               $fileOpened = false;
+               $lookingForPage = 1;
+               $checkpointFiles = 0;
+
+               // Each run of the following loop body tries to handle exactly 1 /page/ (not
+               // iteration of stub content). $i is only increased after having treated page 4.
+               for ( $i = 0 ; $i < $iterations ; ) {
+
+                       // 1. Assuring a file is opened and ready. Skipping across header if
+                       //    necessary.
+                       if ( ! $fileOpened ) {
+                               $this->assertNotEmpty( $files, "No more existing dump files, "
+                                       . "but not yet all pages found" );
+                               $fname = array_shift( $files );
+                               while ( $fname == "." || $fname == ".." ) {
+                                       $this->assertNotEmpty( $files, "No more existing dump"
+                                               . " files, but not yet all pages found" );
+                                       $fname = array_shift( $files );
+                               }
+                               if ( $checkpointFormat == "gzip" ) {
+                                       $this->gunzip( $nameOutputDir . "/" . $fname );
+                               }
+                               $this->assertDumpStart( $nameOutputDir . "/" . $fname );
+                               $fileOpened = true;
+                               $checkpointFiles++;
+                       }
+
+                       // 2. Performing a single page check
+                       switch ( $lookingForPage ) {
+                       case 1:
+                               // Page 1
+                               $this->assertPageStart( $this->pageId1 + $i * 4, NS_MAIN,
+                                       "BackupDumperTestP1" );
+                               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                                       $this->textId1_1, false, "0bolhl6ol7i6x0e7yq91gxgaan39j87",
+                                       "BackupDumperTestP1Text1" );
+                               $this->assertPageEnd();
+
+                               $lookingForPage = 2;
+                               break;
+
+                       case 2:
+                               // Page 2
+                               $this->assertPageStart( $this->pageId2 + $i * 4, NS_MAIN,
+                                       "BackupDumperTestP2" );
+                               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                                       $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
+                                       "BackupDumperTestP2Text1" );
+                               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                                       $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
+                                       "BackupDumperTestP2Text2" );
+                               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                                       $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
+                                       "BackupDumperTestP2Text3" );
+                               $this->assertRevision( $this->revId2_4,
+                                       "BackupDumperTestP2Summary4 extra",
+                                       $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
+                                       "BackupDumperTestP2Text4 some additional Text" );
+                               $this->assertPageEnd();
+
+                               $lookingForPage = 4;
+                               break;
+
+                       case 4:
+                               // Page 4
+                               $this->assertPageStart( $this->pageId4 + $i * 4, NS_TALK,
+                                       "Talk:BackupDumperTestP1" );
+                               $this->assertRevision( $this->revId4_1,
+                                       "Talk BackupDumperTestP1 Summary1",
+                                       $this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
+                                       "Talk about BackupDumperTestP1 Text1" );
+                               $this->assertPageEnd();
+
+                               $lookingForPage = 1;
+
+                               // We dealt with the whole iteration.
+                               $i++;
+                               break;
+
+                       default:
+                               $this->fail( "Bad setting for lookingForPage ($lookingForPage)" );
+                       }
+
+                       // 3. Checking for the end of the current checkpoint file
+                       if ( $this->xml->nodeType == XMLReader::END_ELEMENT
+                               && $this->xml->name == "mediawiki" ) {
+
+                               $this->assertDumpEnd();
+                               $fileOpened = false;
+                       }
+               }
+
+               // Assuring we completely read all files ...
+               $this->assertFalse( $fileOpened, "Currently read file still open?" );
+               $this->assertEmpty( $files, "Remaining unchecked files" );
+
+               // ... and have dealt with more than one checkpoint file
+               $this->assertGreaterThan( 1, $checkpointFiles, "# of checkpoint files" );
+
+               $this->expectETAOutput();
+       }
+
+       /**
+        * @group large
+        */
+       function testCheckpointPlain() {
+               $this->checkpointHelper();
+       }
+
+       /**
+        * tests for working checkpoint generation in gzip format work.
+        *
+        * We keep this test in addition to the simpler self::testCheckpointPlain, as there
+        * were once problems when the used sinks were DumpPipeOutputs.
+        *
+        * xmldumps-backup typically uses bzip2 instead of gzip. However, as bzip2 requires
+        * PHP extensions, we go for gzip instead, which triggers the same relevant code
+        * paths while still being testable on more systems.
+        *
+        * @group large
+        */
+       function testCheckpointGzip() {
+               $this->checkpointHelper( "gzip" );
+       }
+
+
+       /**
+        * Creates a stub file that is used for testing the text pass of dumps
+        *
+        * @param $fname string: (Optional) Absolute name of the file to write
+        *           the stub into. If this parameter is null, a new temporary
+        *           file is generated that is automatically removed upon
+        *           tearDown.
+        * @param $iterations integer: (Optional) specifies how often the block
+        *           of 3 pages should go into the stub file. The page id
+        *           increase further and further, while the revision and text
+        *           ids of the first iteration are reused. The pages of
+        *           iteration > 1 have no corresponding representation in the
+        *           database.
+        * @return string absolute filename of the stub
+        */
+       private function setUpStub( $fname = null, $iterations = 1 ) {
+               if ( $fname === null ) {
+                       $fname = $this->getNewTempFile();
+               }
+               $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.6/" '
+                       . 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
+                       . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.6/ '
+                       . 'http://www.mediawiki.org/xml/export-0.6.xsd" version="0.6" xml:lang="en">
+  <siteinfo>
+    <sitename>wikisvn</sitename>
+    <base>http://localhost/wiki-svn/index.php/Main_Page</base>
+    <generator>MediaWiki 1.20alpha</generator>
+    <case>first-letter</case>
+    <namespaces>
+      <namespace key="-2" case="first-letter">Media</namespace>
+      <namespace key="-1" case="first-letter">Special</namespace>
+      <namespace key="0" case="first-letter" />
+      <namespace key="1" case="first-letter">Talk</namespace>
+      <namespace key="2" case="first-letter">User</namespace>
+      <namespace key="3" case="first-letter">User talk</namespace>
+      <namespace key="4" case="first-letter">Wikisvn</namespace>
+      <namespace key="5" case="first-letter">Wikisvn talk</namespace>
+      <namespace key="6" case="first-letter">File</namespace>
+      <namespace key="7" case="first-letter">File talk</namespace>
+      <namespace key="8" case="first-letter">MediaWiki</namespace>
+      <namespace key="9" case="first-letter">MediaWiki talk</namespace>
+      <namespace key="10" case="first-letter">Template</namespace>
+      <namespace key="11" case="first-letter">Template talk</namespace>
+      <namespace key="12" case="first-letter">Help</namespace>
+      <namespace key="13" case="first-letter">Help talk</namespace>
+      <namespace key="14" case="first-letter">Category</namespace>
+      <namespace key="15" case="first-letter">Category talk</namespace>
+    </namespaces>
+  </siteinfo>
+';
+               $tail = '</mediawiki>
+';
+
+               $content = $header;
+               $iterations = intval( $iterations );
+               for ( $i = 0; $i < $iterations; $i++ ) {
+
+                       $page1 = '  <page>
+    <title>BackupDumperTestP1</title>
+    <ns>0</ns>
+    <id>' . ( $this->pageId1 + $i * 4 ) . '</id>
+    <revision>
+      <id>' . $this->revId1_1 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP1Summary1</comment>
+      <text id="' . $this->textId1_1 . '" bytes="23" />
+      <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
+    </revision>
+  </page>
+';
+                       $page2 = '  <page>
+    <title>BackupDumperTestP2</title>
+    <ns>0</ns>
+    <id>' . ( $this->pageId2 + $i * 4 ) . '</id>
+    <revision>
+      <id>' . $this->revId2_1 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary1</comment>
+      <text id="' . $this->textId2_1 . '" bytes="23" />
+      <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
+    </revision>
+    <revision>
+      <id>' . $this->revId2_2 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary2</comment>
+      <text id="' . $this->textId2_2 . '" bytes="23" />
+      <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
+    </revision>
+    <revision>
+      <id>' . $this->revId2_3 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary3</comment>
+      <text id="' . $this->textId2_3 . '" bytes="23" />
+      <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
+    </revision>
+    <revision>
+      <id>' . $this->revId2_4 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>BackupDumperTestP2Summary4 extra</comment>
+      <text id="' . $this->textId2_4 . '" bytes="44" />
+      <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
+    </revision>
+  </page>
+';
+                       // page 3 not in stub
+
+                       $page4 = '  <page>
+    <title>Talk:BackupDumperTestP1</title>
+    <ns>1</ns>
+    <id>' . ( $this->pageId4 + $i * 4 ) . '</id>
+    <revision>
+      <id>' . $this->revId4_1 . '</id>
+      <timestamp>2012-04-01T16:46:05Z</timestamp>
+      <contributor>
+        <ip>127.0.0.1</ip>
+      </contributor>
+      <comment>Talk BackupDumperTestP1 Summary1</comment>
+      <text id="' . $this->textId4_1 . '" bytes="35" />
+      <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
+    </revision>
+  </page>
+';
+                       $content .= $page1 . $page2 . $page4;
+               }
+               $content .= $tail;
+               $this->assertEquals( strlen( $content ), file_put_contents(
+                               $fname, $content ), "Length of prepared stub" );
+               return $fname;
+       }
+
+}
diff --git a/tests/phpunit/maintenance/backup_LogTest.php b/tests/phpunit/maintenance/backup_LogTest.php
new file mode 100644 (file)
index 0000000..8a8dea5
--- /dev/null
@@ -0,0 +1,227 @@
+<?php
+/**
+ * Tests for log dumps of BackupDumper
+ *
+ * @group Database
+ * @group Dump
+ */
+class BackupDumperLoggerTest extends DumpTestCase {
+
+
+       // We'll add several log entries and users for this test. The following
+       // variables hold the corresponding ids.
+       private $userId1, $userId2;
+       private $logId1, $logId2, $logId3;
+
+       /**
+        * adds a log entry to the database.
+        *
+        * @param $type string: type of the log entry
+        * @param $subtype string: subtype of the log entry
+        * @param $user User: user that performs the logged operation
+        * @param $ns int: number of the namespace for the entry's target's title
+        * @param $title string: title of the entry's target
+        * @param $comment string: comment of the log entry
+        * @param $parameters Array: (optional) accompanying data that is attached
+        *               to the entry
+        *
+        * @return int id of the added log entry
+        */
+       private function addLogEntry( $type, $subtype, User $user, $ns, $title,
+               $comment = null, $parameters = null ) {
+
+                $logEntry = new ManualLogEntry( $type, $subtype );
+               $logEntry->setPerformer( $user );
+               $logEntry->setTarget( Title::newFromText( $title, $ns ) );
+                if ( $comment !== null ) {
+                       $logEntry->setComment( $comment );
+               }
+                if ( $parameters !== null ) {
+                       $logEntry->setParameters( $parameters );
+               }
+                return $logEntry->insert();
+       }
+
+       function addDBData() {
+               $this->tablesUsed[] = 'logging';
+               $this->tablesUsed[] = 'user';
+
+               try {
+                       $user1 = User::newFromName( 'BackupDumperLogUserA' );
+                       $this->userId1 = $user1->getId();
+                       if ( $this->userId1 === 0 ) {
+                               $user1->addToDatabase();
+                               $this->userId1 = $user1->getId();
+                       }
+                       $this->assertGreaterThan( 0, $this->userId1 );
+
+                       $user2 = User::newFromName( 'BackupDumperLogUserB' );
+                       $this->userId2 = $user2->getId();
+                       if ( $this->userId2 === 0 ) {
+                               $user2->addToDatabase();
+                               $this->userId2 = $user2->getId();
+                       }
+                       $this->assertGreaterThan( 0, $this->userId2 );
+
+                       $this->logId1 = $this->addLogEntry( 'type', 'subtype',
+                               $user1, NS_MAIN, "PageA" );
+                       $this->assertGreaterThan( 0, $this->logId1 );
+
+                       $this->logId2 = $this->addLogEntry( 'supress', 'delete',
+                               $user2, NS_TALK, "PageB", "SomeComment" );
+                       $this->assertGreaterThan( 0, $this->logId2 );
+
+                       $this->logId3 = $this->addLogEntry( 'move', 'delete',
+                               $user2, NS_MAIN, "PageA", "SomeOtherComment",
+                               array( 'key1' => 1,  3 => 'value3' ) );
+                       $this->assertGreaterThan( 0, $this->logId3 );
+
+               } catch ( Exception $e ) {
+                       // We'd love to pass $e directly. However, ... see
+                       // documentation of exceptionFromAddDBData in
+                       // DumpTestCase
+                       $this->exceptionFromAddDBData = $e;
+               }
+
+       }
+
+
+       /**
+        * asserts that the xml reader is at the beginning of a log entry and skips over
+        * it while analyzing it.
+        *
+        * @param $id int: id of the log entry
+        * @param $user_name string: user name of the log entry's performer
+        * @param $user_id int: user id of the log entry 's performer
+        * @param $comment string|null: comment of the log entry. If null, the comment
+        *             text is ignored.
+        * @param $type string: type of the log entry
+        * @param $subtype string: subtype of the log entry
+        * @param $title string: title of the log entry's target
+        * @param $parameters array: (optional) unserialized data accompanying the log entry
+        */
+       private function assertLogItem( $id, $user_name, $user_id, $comment, $type,
+               $subtype, $title, $parameters = array() ) {
+
+               $this->assertNodeStart( "logitem" );
+               $this->skipWhitespace();
+
+               $this->assertTextNode( "id", $id );
+               $this->assertTextNode( "timestamp", false );
+
+               $this->assertNodeStart( "contributor" );
+               $this->skipWhitespace();
+               $this->assertTextNode( "username", $user_name );
+               $this->assertTextNode( "id", $user_id );
+               $this->assertNodeEnd( "contributor" );
+               $this->skipWhitespace();
+
+               if ( $comment !== null ) {
+                       $this->assertTextNode( "comment", $comment );
+               }
+               $this->assertTextNode( "type", $type );
+               $this->assertTextNode( "action", $subtype );
+               $this->assertTextNode( "logtitle", $title );
+
+               $this->assertNodeStart( "params" );
+               $parameters_xml = unserialize( $this->xml->value );
+               $this->assertEquals( $parameters, $parameters_xml );
+               $this->assertTrue( $this->xml->read(), "Skipping past processed text of params" );
+               $this->assertNodeEnd( "params" );
+               $this->skipWhitespace();
+
+               $this->assertNodeEnd( "logitem" );
+               $this->skipWhitespace();
+       }
+
+       function testPlain () {
+               global $wgContLang;
+
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=file:" . $fname ) );
+               $dumper->startId = $this->logId1;
+               $dumper->endId = $this->logId3 + 1;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::LOGS, WikiExporter::TEXT );
+
+               // Analyzing the dumped data
+               $this->assertDumpStart( $fname );
+
+               $this->assertLogItem( $this->logId1, "BackupDumperLogUserA",
+                       $this->userId1, null, "type", "subtype", "PageA" );
+
+               $this->assertNotNull( $wgContLang, "Content language object validation" );
+               $namespace = $wgContLang->getNsText( NS_TALK );
+               $this->assertInternalType( 'string', $namespace );
+               $this->assertGreaterThan( 0, strlen( $namespace ) );
+               $this->assertLogItem( $this->logId2, "BackupDumperLogUserB",
+                       $this->userId2, "SomeComment", "supress", "delete",
+                       $namespace . ":PageB" );
+
+               $this->assertLogItem( $this->logId3, "BackupDumperLogUserB",
+                       $this->userId2, "SomeOtherComment", "move", "delete",
+                       "PageA", array( 'key1' => 1, 3 => 'value3' ) );
+
+               $this->assertDumpEnd();
+       }
+
+       function testXmlDumpsBackupUseCaseLogging() {
+               global $wgContLang;
+
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=gzip:" . $fname,
+                               "--reporting=2" ) );
+               $dumper->startId = $this->logId1;
+               $dumper->endId = $this->logId3 + 1;
+               $dumper->setDb( $this->db );
+
+               // xmldumps-backup demands reporting, although this is currently not
+               // implemented in BackupDumper, when dumping logging data. We
+               // nevertheless capture the output of the dump process already now,
+               // to be able to alert (once dumping produces reports) that this test
+               // needs updates.
+               $dumper->stderr = fopen( 'php://output', 'a' );
+               if ( $dumper->stderr === FALSE ) {
+                       $this->fail( "Could not open stream for stderr" );
+               }
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::LOGS, WikiExporter::TEXT );
+
+               $this->assertTrue( fclose( $dumper->stderr ), "Closing stderr handle" );
+
+               // Analyzing the dumped data
+               $this->gunzip( $fname );
+
+               $this->assertDumpStart( $fname );
+
+               $this->assertLogItem( $this->logId1, "BackupDumperLogUserA",
+                       $this->userId1, null, "type", "subtype", "PageA" );
+
+               $this->assertNotNull( $wgContLang, "Content language object validation" );
+               $namespace = $wgContLang->getNsText( NS_TALK );
+               $this->assertInternalType( 'string', $namespace );
+               $this->assertGreaterThan( 0, strlen( $namespace ) );
+               $this->assertLogItem( $this->logId2, "BackupDumperLogUserB",
+                       $this->userId2, "SomeComment", "supress", "delete",
+                       $namespace . ":PageB" );
+
+               $this->assertLogItem( $this->logId3, "BackupDumperLogUserB",
+                       $this->userId2, "SomeOtherComment", "move", "delete",
+                       "PageA", array( 'key1' => 1, 3 => 'value3' ) );
+
+               $this->assertDumpEnd();
+
+               // Currently, no reporting is implemented. Alert via failure, once
+               // this changes.
+               // If reporting for log dumps has been implemented, please update
+               // the following statement to catch good output
+               $this->expectOutputString( '' );
+       }
+
+}
diff --git a/tests/phpunit/maintenance/backup_PageTest.php b/tests/phpunit/maintenance/backup_PageTest.php
new file mode 100644 (file)
index 0000000..205700e
--- /dev/null
@@ -0,0 +1,389 @@
+<?php
+/**
+ * Tests for page dumps of BackupDumper
+ *
+ * @group Database
+ * @group Dump
+ */
+class BackupDumperPageTest extends DumpTestCase {
+
+       // We'll add several pages, revision and texts. The following variables hold the
+       // corresponding ids.
+       private $pageId1, $pageId2, $pageId3, $pageId4, $pageId5;
+       private $revId1_1, $textId1_1;
+       private $revId2_1, $textId2_1, $revId2_2, $textId2_2;
+       private $revId2_3, $textId2_3, $revId2_4, $textId2_4;
+       private $revId3_1, $textId3_1, $revId3_2, $textId3_2;
+       private $revId4_1, $textId4_1;
+
+       function addDBData() {
+               $this->tablesUsed[] = 'page';
+               $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'text';
+
+               try {
+                       $title = Title::newFromText( 'BackupDumperTestP1' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId1_1, $this->textId1_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP1Text1", "BackupDumperTestP1Summary1" );
+                       $this->pageId1 = $page->getId();
+
+                       $title = Title::newFromText( 'BackupDumperTestP2' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId2_1, $this->textId2_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text1", "BackupDumperTestP2Summary1" );
+                       list( $this->revId2_2, $this->textId2_2 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text2", "BackupDumperTestP2Summary2" );
+                       list( $this->revId2_3, $this->textId2_3 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text3", "BackupDumperTestP2Summary3" );
+                       list( $this->revId2_4, $this->textId2_4 ) = $this->addRevision( $page,
+                               "BackupDumperTestP2Text4 some additional Text  ",
+                               "BackupDumperTestP2Summary4 extra " );
+                       $this->pageId2 = $page->getId();
+
+                       $title = Title::newFromText( 'BackupDumperTestP3' );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId3_1, $this->textId3_1 ) = $this->addRevision( $page,
+                               "BackupDumperTestP3Text1", "BackupDumperTestP2Summary1" );
+                       list( $this->revId3_2, $this->textId3_2 ) = $this->addRevision( $page,
+                               "BackupDumperTestP3Text2", "BackupDumperTestP2Summary2" );
+                       $this->pageId3 = $page->getId();
+                       $page->doDeleteArticle( "Testing ;)" );
+
+                       $title = Title::newFromText( 'BackupDumperTestP1', NS_TALK );
+                       $page = WikiPage::factory( $title );
+                       list( $this->revId4_1, $this->textId4_1 ) = $this->addRevision( $page,
+                               "Talk about BackupDumperTestP1 Text1",
+                               "Talk BackupDumperTestP1 Summary1" );
+                       $this->pageId4 = $page->getId();
+               } catch ( Exception $e ) {
+                       // We'd love to pass $e directly. However, ... see
+                       // documentation of exceptionFromAddDBData in
+                       // DumpTestCase
+                       $this->exceptionFromAddDBData = $e;
+               }
+
+       }
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Since we will restrict dumping by page ranges (to allow
+               // working tests, even if the db gets prepopulated by a base
+               // class), we have to assert, that the page id are consecutively
+               // increasing
+               $this->assertEquals(
+                       array( $this->pageId2, $this->pageId3, $this->pageId4 ),
+                       array( $this->pageId1 + 1, $this->pageId2 + 1, $this->pageId3 + 1 ),
+                       "Page ids increasing without holes" );
+
+       }
+
+       function testFullTextPlain () {
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=file:" . $fname ) );
+               $dumper->startId = $this->pageId1;
+               $dumper->endId = $this->pageId4 + 1;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
+
+               // Checking the dumped data
+               $this->assertDumpStart( $fname );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87",
+                       "BackupDumperTestP1Text1" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                       $this->textId2_1, 23, "jprywrymfhysqllua29tj3sc7z39dl2",
+                       "BackupDumperTestP2Text1" );
+               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                       $this->textId2_2, 23, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
+                       "BackupDumperTestP2Text2" );
+               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                       $this->textId2_3, 23, "jfunqmh1ssfb8rs43r19w98k28gg56r",
+                       "BackupDumperTestP2Text3" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv",
+                       "BackupDumperTestP2Text4 some additional Text" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe",
+                       "Talk about BackupDumperTestP1 Text1" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+       }
+
+       function testFullStubPlain () {
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=file:" . $fname ) );
+               $dumper->startId = $this->pageId1;
+               $dumper->endId = $this->pageId4 + 1;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::FULL, WikiExporter::STUB );
+
+               // Checking the dumped data
+               $this->assertDumpStart( $fname );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                       $this->textId2_1, 23, "jprywrymfhysqllua29tj3sc7z39dl2" );
+               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                       $this->textId2_2, 23, "b7vj5ks32po5m1z1t1br4o7scdwwy95" );
+               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                       $this->textId2_3, 23, "jfunqmh1ssfb8rs43r19w98k28gg56r" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+       }
+
+       function testCurrentStubPlain () {
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=file:" . $fname ) );
+               $dumper->startId = $this->pageId1;
+               $dumper->endId = $this->pageId4 + 1;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::CURRENT, WikiExporter::STUB );
+
+               // Checking the dumped data
+               $this->assertDumpStart( $fname );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+       }
+
+       function testCurrentStubGzip () {
+               // Preparing the dump
+               $fname = $this->getNewTempFile();
+               $dumper = new BackupDumper( array ( "--output=gzip:" . $fname ) );
+               $dumper->startId = $this->pageId1;
+               $dumper->endId = $this->pageId4 + 1;
+               $dumper->reporting = false;
+               $dumper->setDb( $this->db );
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::CURRENT, WikiExporter::STUB );
+
+               // Checking the dumped data
+               $this->gunzip( $fname );
+               $this->assertDumpStart( $fname );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+       }
+
+
+
+       function testXmlDumpsBackupUseCase () {
+               // xmldumps-backup typically performs a single dump that that writes
+               // out three files
+               // * gzipped stubs of everything (meta-history)
+               // * gzipped stubs of latest revisions of all pages (meta-current)
+               // * gzipped stubs of latest revisions of all pages of namespage 0
+               //   (articles)
+               //
+               // We reproduce such a setup with our mini fixture, although we omit
+               // chunks, and all the other gimmicks of xmldumps-backup.
+               //
+               $fnameMetaHistory = $this->getNewTempFile();
+               $fnameMetaCurrent = $this->getNewTempFile();
+               $fnameArticles = $this->getNewTempFile();
+
+               $dumper = new BackupDumper( array ( "--output=gzip:" . $fnameMetaHistory,
+                               "--output=gzip:" . $fnameMetaCurrent, "--filter=latest",
+                               "--output=gzip:" . $fnameArticles, "--filter=latest",
+                               "--filter=notalk", "--filter=namespace:!NS_USER",
+                               "--reporting=1000" ) );
+               $dumper->startId = $this->pageId1;
+               $dumper->endId = $this->pageId4 + 1;
+               $dumper->setDb( $this->db );
+
+               // xmldumps-backup uses reporting. We will not check the exact reported
+               // message, as they are dependent on the processing power of the used
+               // computer. We only check that reporting does not crash the dumping
+               // and that something is reported
+               $dumper->stderr = fopen( 'php://output', 'a' );
+               if ( $dumper->stderr === FALSE ) {
+                       $this->fail( "Could not open stream for stderr" );
+               }
+
+               // Performing the dump
+               $dumper->dump( WikiExporter::FULL, WikiExporter::STUB );
+
+               $this->assertTrue( fclose( $dumper->stderr ), "Closing stderr handle" );
+
+               // Checking meta-history -------------------------------------------------
+
+               $this->gunzip( $fnameMetaHistory );
+               $this->assertDumpStart( $fnameMetaHistory );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
+                       $this->textId2_1, 23, "jprywrymfhysqllua29tj3sc7z39dl2" );
+               $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
+                       $this->textId2_2, 23, "b7vj5ks32po5m1z1t1br4o7scdwwy95" );
+               $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
+                       $this->textId2_3, 23, "jfunqmh1ssfb8rs43r19w98k28gg56r" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+
+               // Checking meta-current -------------------------------------------------
+
+               $this->gunzip( $fnameMetaCurrent );
+               $this->assertDumpStart( $fnameMetaCurrent );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               $this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
+               $this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
+                       $this->textId4_1, 35, "nktofwzd0tl192k3zfepmlzxoax1lpe" );
+               $this->assertPageEnd();
+
+               $this->assertDumpEnd();
+
+               // Checking articles -------------------------------------------------
+
+               $this->gunzip( $fnameArticles );
+               $this->assertDumpStart( $fnameArticles );
+
+               // Page 1
+               $this->assertPageStart( $this->pageId1, NS_MAIN, "BackupDumperTestP1" );
+               $this->assertRevision( $this->revId1_1, "BackupDumperTestP1Summary1",
+                       $this->textId1_1, 23, "0bolhl6ol7i6x0e7yq91gxgaan39j87" );
+               $this->assertPageEnd();
+
+               // Page 2
+               $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
+               $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
+                       $this->textId2_4, 44, "6o1ciaxa6pybnqprmungwofc4lv00wv" );
+               $this->assertPageEnd();
+
+               // Page 3
+               // -> Page is marked deleted. Hence not visible
+
+               // Page 4
+               // -> Page is not in NS_MAIN. Hence not visible
+
+               $this->assertDumpEnd();
+
+               $this->expectETAOutput();
+       }
+
+
+
+}
diff --git a/tests/phpunit/maintenance/fetchTextTest.php b/tests/phpunit/maintenance/fetchTextTest.php
new file mode 100644 (file)
index 0000000..42a247c
--- /dev/null
@@ -0,0 +1,244 @@
+<?php
+global $IP;
+require_once( "$IP/maintenance/fetchText.php" );
+
+
+/**
+ * Mock for the input/output of FetchText
+ *
+ * FetchText internally tries to access stdin and stdout. We mock those aspects
+ * for testing.
+ */
+class SemiMockedFetchText extends FetchText {
+
+       /**
+        * @var String|null Text to pass as stdin
+        */
+       private $mockStdinText = null;
+
+       /**
+        * @var bool Whether or not a text for stdin has been provided
+        */
+       private $mockSetUp = False;
+
+       /**
+        * @var Array Invocation counters for the mocked aspects
+        */
+       private $mockInvocations = array( 'getStdin' => 0 );
+
+
+
+       /**
+        * Data for the fake stdin
+        *
+        * @param $stdin String The string to be used instead of stdin
+        */
+       function mockStdin( $stdin )
+       {
+               $this->mockStdinText = $stdin;
+               $this->mockSetUp = True;
+       }
+
+       /**
+        * Gets invocation counters for mocked methods.
+        *
+        * @return Array An array, whose keys are function names. The corresponding values
+        * denote the number of times the function has been invoked.
+        */
+       function mockGetInvocations()
+       {
+               return $this->mockInvocations;
+       }
+
+       // -----------------------------------------------------------------
+       // Mocked functions from FetchText follow.
+
+       function getStdin( $len = null )
+       {
+               $this->mockInvocations['getStdin']++;
+               if ( $len !== null ) {
+                       throw new PHPUnit_Framework_ExpectationFailedException(
+                               "Tried to get stdin with non null parameter" );
+               }
+
+               if ( ! $this->mockSetUp ) {
+                       throw new PHPUnit_Framework_ExpectationFailedException(
+                               "Tried to get stdin before setting up rerouting" );
+               }
+
+               return fopen( 'data://text/plain,' . $this->mockStdinText, 'r' );
+       }
+
+}
+
+/**
+ * TestCase for FetchText
+ *
+ * @group Database
+ * @group Dump
+ */
+class FetchTextTest extends MediaWikiTestCase {
+
+       // We add 5 Revisions for this test. Their corresponding text id's
+       // are stored in the following 5 variables.
+       private $textId1;
+       private $textId2;
+       private $textId3;
+       private $textId4;
+       private $textId5;
+
+
+       /**
+        * @var Exception|null As the current MediaWikiTestCase::run is not
+        * robust enough to recover from thrown exceptions directly, we cannot
+        * throw frow within addDBData, although it would be appropriate. Hence,
+        * we catch the exception and store it until we are in setUp and may
+        * finally rethrow the exception without crashing the test suite.
+        */
+       private $exceptionFromAddDBData;
+
+       /**
+        * @var FetchText the (mocked) FetchText that is to test
+        */
+       private $fetchText;
+
+       /**
+        * Adds a revision to a page, while returning the resuting text's id
+        *
+        * @param $page WikiPage The page to add the revision to
+        * @param $text String The revisions text
+        * @param $text String The revisions summare
+        *
+        * @throws MWExcepion
+        */
+       private function addRevision( $page, $text, $summary ) {
+               $status = $page->doEdit( $text, $summary );
+               if ( $status->isGood() ) {
+                       $value = $status->getValue();
+                       $revision = $value['revision'];
+                       $id = $revision->getTextId();
+                       if ( $id > 0 ) {
+                               return $id;
+                       }
+               }
+               throw new MWException( "Could not determine text id" );
+       }
+
+
+       function addDBData() {
+               $this->tablesUsed[] = 'page';
+               $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'text';
+
+               try {
+                       $title = Title::newFromText( 'FetchTextTestPage1' );
+                       $page = WikiPage::factory( $title );
+                       $this->textId1 = $this->addRevision( $page, "FetchTextTestPage1Text1", "FetchTextTestPage1Summary1" );
+
+                       $title = Title::newFromText( 'FetchTextTestPage2' );
+                       $page = WikiPage::factory( $title );
+                       $this->textId2 = $this->addRevision( $page, "FetchTextTestPage2Text1", "FetchTextTestPage2Summary1" );
+                       $this->textId3 = $this->addRevision( $page, "FetchTextTestPage2Text2", "FetchTextTestPage2Summary2" );
+                       $this->textId4 = $this->addRevision( $page, "FetchTextTestPage2Text3", "FetchTextTestPage2Summary3" );
+                       $this->textId5 = $this->addRevision( $page, "FetchTextTestPage2Text4 some additional Text  ", "FetchTextTestPage2Summary4 extra " );
+               } catch ( Exception $e ) {
+                       // We'd love to pass $e directly. However, ... see
+                       // documentation of exceptionFromAddDBData
+                       $this->exceptionFromAddDBData = $e;
+               }
+       }
+
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Check if any Exception is stored for rethrowing from addDBData
+               if ( $this->exceptionFromAddDBData !== null ) {
+                       throw $this->exceptionFromAddDBData;
+               }
+
+               $this->fetchText = new SemiMockedFetchText();
+       }
+
+
+       /**
+        * Helper to relate FetchText's input and output
+        */
+       private function assertFilter( $input, $expectedOutput ) {
+               $this->fetchText->mockStdin( $input );
+               $this->fetchText->execute();
+               $invocations = $this->fetchText->mockGetInvocations();
+               $this->assertEquals( 1, $invocations['getStdin'],
+                       "getStdin invocation counter" );
+               $this->expectOutputString( $expectedOutput );
+       }
+
+
+
+       // Instead of the following functions, a data provider would be great.
+       // However, as data providers are evaluated /before/ addDBData, a data
+       // provider would not know the required ids.
+
+       function testExistingSimple() {
+               $this->assertFilter( $this->textId2,
+                       $this->textId2 . "\n23\nFetchTextTestPage2Text1" );
+       }
+
+       function testExistingSimpleWithNewline() {
+               $this->assertFilter( $this->textId2 . "\n",
+                       $this->textId2 . "\n23\nFetchTextTestPage2Text1" );
+       }
+
+       function testExistingSeveral() {
+               $this->assertFilter( "$this->textId1\n$this->textId5\n"
+                       . "$this->textId3\n$this->textId3",
+                       implode( "", array(
+                                       $this->textId1 . "\n23\nFetchTextTestPage1Text1",
+                                       $this->textId5 . "\n44\nFetchTextTestPage2Text4 "
+                                       . "some additional Text",
+                                       $this->textId3 . "\n23\nFetchTextTestPage2Text2",
+                                       $this->textId3 . "\n23\nFetchTextTestPage2Text2"
+                               ) ) );
+       }
+
+       function testEmpty() {
+               $this->assertFilter( "", null );
+       }
+
+       function testNonExisting() {
+               $this->assertFilter( $this->textId5 + 10, ( $this->textId5 + 10 ) . "\n-1\n" );
+       }
+
+       function testNegativeInteger() {
+               $this->assertFilter( "-42", "-42\n-1\n" );
+       }
+
+       function testFloatingPointNumberExisting() {
+               // float -> int -> revision
+               $this->assertFilter( $this->textId3 + 0.14159,
+                       $this->textId3 . "\n23\nFetchTextTestPage2Text2" );
+       }
+
+       function testFloatingPointNumberNonExisting() {
+               $this->assertFilter( $this->textId5 + 3.14159,
+                       ( $this->textId5 + 3 ) . "\n-1\n" );
+       }
+
+       function testCharacters() {
+               $this->assertFilter( "abc", "0\n-1\n" );
+       }
+
+       function testMix() {
+               $this->assertFilter( "ab\n" . $this->textId4 . ".5cd\n\nefg\n" . $this->textId2
+                       . "\n" . $this->textId3,
+                       implode( "", array(
+                                       "0\n-1\n",
+                                       $this->textId4 . "\n23\nFetchTextTestPage2Text3",
+                                       "0\n-1\n",
+                                       "0\n-1\n",
+                                       $this->textId2 . "\n23\nFetchTextTestPage2Text1",
+                                       $this->textId3 . "\n23\nFetchTextTestPage2Text2"
+                               ) ) );
+       }
+
+}
diff --git a/tests/phpunit/maintenance/getSlaveServerTest.php b/tests/phpunit/maintenance/getSlaveServerTest.php
new file mode 100644 (file)
index 0000000..29e7fe6
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+global $IP;
+require_once( "$IP/maintenance/getSlaveServer.php" );
+
+/**
+ * Tests for getSlaveServer
+ *
+ * @group Database
+ */
+class GetSlaveServerTest extends MediaWikiTestCase {
+
+       /**
+        * Yields a regular expression that matches a good DB server name
+        *
+        * It matches IPs or hostnames, both optionally followed by a
+        * port specification
+        *
+        * @return String the regular expression
+        */
+       private function getServerRE() {
+               if ( $this->db->getType() === 'sqlite' ) {
+                       // for SQLite, only the empty string is a good server name
+                       return '';
+               }
+
+               $octet = '([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])';
+               $ip = "(($octet\.){3}$octet)";
+
+               $label = '([a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)';
+               $hostname = "($label(\.$label)*)";
+
+               return "($ip|$hostname)(:[0-9]{1,5})?";
+       }
+
+       function testPlain() {
+               $gss = new GetSlaveServer();
+               $gss->execute();
+
+               $this->expectOutputRegex( "/^" . self::getServerRE() . "\n$/D" );
+       }
+
+       function testXmlDumpsBackupUseCase() {
+               global $wgDBprefix;
+
+               global $argv;
+               $argv = array( null, "--globals" );
+
+               $gss = new GetSlaveServer();
+               $gss->loadParamsAndArgs();
+               $gss->execute();
+               $gss->globals();
+
+               // The main answer
+               $output = $this->getActualOutput();
+               $firstLineEndPos = strpos( $output,"\n");
+               if ( $firstLineEndPos === FALSE ) {
+                       $this->fail( "Could not find end of first line of output" );
+               }
+               $firstLine = substr( $output, 0 , $firstLineEndPos );
+               $this->assertRegExp( "/^" . self::getServerRE() . "$/D",
+                       $firstLine, "DB Server" );
+
+               // xmldumps-backup relies on the wgDBprefix in the output.
+               $this->expectOutputRegex( "/^[[:space:]]*\[wgDBprefix\][[:space:]]*=> "
+                       . $wgDBprefix . "$/m" );
+       }
+
+
+}
index e3f780b..61a20f1 100644 (file)
@@ -94,8 +94,8 @@ require( RUN_MAINTENANCE_IF_MAIN );
 require_once( 'PHPUnit/Runner/Version.php' );
 
 if( PHPUnit_Runner_Version::id() !== '@package_version@'
-   && version_compare( PHPUnit_Runner_Version::id(), '3.5.0', '<' ) ) {
-       die( 'PHPUnit 3.5 or later required, you have ' . PHPUnit_Runner_Version::id() . ".\n" );
+   && version_compare( PHPUnit_Runner_Version::id(), '3.6.7', '<' ) ) {
+       die( 'PHPUnit 3.6.7 or later required, you have ' . PHPUnit_Runner_Version::id() . ".\n" );
 }
 require_once( 'PHPUnit/Autoload.php' );
 
index a1b47ca..093c71f 100644 (file)
@@ -42,10 +42,14 @@ $params = array_map( 'cssfilter', $_GET );
 $selector = isset( $params['selector'] ) ? $params['selector'] : '.mw-test-example';
 $property = isset( $params['prop'] ) ? $params['prop'] : 'float';
 $value = isset( $params['val'] ) ? $params['val'] : 'right';
+$wait = isset( $params['wait'] ) ? (int)$params['wait'] : 0; // seconds
+
+sleep( $wait );
 
 $css =  "
 /**
- * Generated: " . gmdate( 'r' ) .  "
+ * Generated " . gmdate( 'r' ) .  ".
+ * Waited {$wait}s.
  */
 
 $selector {
diff --git a/tests/qunit/data/testloader.php b/tests/qunit/data/testloader.php
new file mode 100644 (file)
index 0000000..7f4c48d
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * ResourceLoader stub working with pre-defined test 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
+ * @package MediaWiki
+ * @author Lupo
+ * @since 1.20
+ */
+header( 'Content-Type: text/javascript; charset=utf-8' );\r
+
+require_once "../../../includes/Xml.php";
+
+$modules = array (
+       'test.use_missing' => array (
+               'src' => 'mw.loader.implement("test.use_missing", function () {start(); ok(false, "Module test.use_missing should not run.");}, {}, {});',
+               'deps' => array ( 'test.missing' )
+       ),
+       'test.use_missing2' => array (
+               'src' => 'mw.loader.implement("test.use_missing2", function () {start(); ok(false, "Module test.use_missing2 should not run.");}, {}, {});',
+               'deps' => array ( 'test.missing2' )
+       )
+);
+
+// Copied from ResourceLoaderContext
+function expandModuleNames( $modules ) {\r
+       $retval = array();\r
+       // For backwards compatibility with an earlier hack, replace ! with .\r
+       $modules = str_replace( '!', '.', $modules );\r
+       $exploded = explode( '|', $modules );\r
+       foreach ( $exploded as $group ) {\r
+               if ( strpos( $group, ',' ) === false ) {\r
+                       // This is not a set of modules in foo.bar,baz notation\r
+                       // but a single module\r
+                       $retval[] = $group;\r
+               } else {\r
+                       // This is a set of modules in foo.bar,baz notation\r
+                       $pos = strrpos( $group, '.' );\r
+                       if ( $pos === false ) {\r
+                               // Prefixless modules, i.e. without dots\r
+                               $retval = explode( ',', $group );\r
+                       } else {\r
+                               // We have a prefix and a bunch of suffixes\r
+                               $prefix = substr( $group, 0, $pos ); // 'foo'\r
+                               $suffixes = explode( ',', substr( $group, $pos + 1 ) ); // array( 'bar', 'baz' )\r
+                               foreach ( $suffixes as $suffix ) {\r
+                                       $retval[] = "$prefix.$suffix";\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       return $retval;\r
+}
+
+function addModule ( $moduleName, &$gotten ) {
+       global $modules;
+
+       $result = "";
+       if ( isset( $gotten[$moduleName] ) ) {
+               return $result;
+       }
+       $gotten[$moduleName] = true;
+       if ( isset( $modules[$moduleName] ) ) {
+               $deps = $modules[$moduleName]['deps'];
+               foreach ( $deps as $depName ) {
+                       $result .= addModule( $depName, $gotten ) . "\n";
+               }
+               $result .= $modules[$moduleName]['src'] . "\n";
+       } else {
+               $result .= 'mw.loader.state( ' . Xml::encodeJsVar( $moduleName ) . ', "missing" );' . "\n";
+       }
+       return $result . "\n";
+}
+
+$result = "";
+
+if ( isset( $_GET['modules'] ) ) {
+       $toGet = expandModuleNames( $_GET['modules'] );
+       $gotten = array();
+       foreach ( $toGet as $moduleName ) {
+               $result .= addModule( $moduleName, $gotten );
+       }
+}
+
+echo $result;
index f4baf95..f3176ab 100644 (file)
@@ -84,38 +84,17 @@ if ( QUnit.urlParams.completenesstest ) {
 QUnit.config.urlConfig.push( 'mwlogenv' );
 
 /**
- * Reset mw.config to a fresh copy of the live config for each test();
- * @param override {Object} [optional]
- * @example:
- * <code>
- * module( .., newMwEnvironment() );
- *
- * test( .., function () {
- *     mw.config.set( 'foo', 'bar' ); // just for this test
- * } );
- *
- * test( .., function () {
- *     mw.config.get( 'foo' ); // doesn't exist
- * } );
- *
- *
- * module( .., newMwEnvironment({ quux: 'corge' }) );
- *
- * test( .., function () {
- *     mw.config.get( 'quux' ); // "corge"
- *     mw.config.set( 'quux', "grault" );
- * } );
- *
- * test( .., function () {
- *     mw.config.get( 'quux' ); // "corge"
- * } );
+ * Reset mw.config and others to a fresh copy of the live config for each test(),
+ * and restore it back to the live one afterwards.
+ * @param localEnv {Object} [optional]
+ * @example (see test suite at the bottom of this file)
  * </code>
  */
 QUnit.newMwEnvironment = ( function () {
-       var log, liveConfig, liveMsgs;
+       var log, liveConfig, liveMessages;
 
        liveConfig = mw.config.values;
-       liveMsgs = mw.messages.values;
+       liveMessages = mw.messages.values;
 
        function freshConfigCopy( custom ) {
                // "deep=true" is important here.
@@ -123,34 +102,46 @@ QUnit.newMwEnvironment = ( function () {
                // e.g. mw.config.set( 'wgFileExtensions', [] ) would not effect liveConfig,
                // but mw.config.get( 'wgFileExtensions' ).push( 'png' ) would as the array
                // was passed by reference in $.extend's loop.
-               return $.extend({}, liveConfig, custom, /*deep=*/true );
+               return $.extend( {}, liveConfig, custom, /*deep=*/true );
        }
 
-       function freshMsgsCopy( custom ) {
-               return $.extend({}, liveMsgs, custom, /*deep=*/true );
+       function freshMessagesCopy( custom ) {
+               return $.extend( {}, liveMessages, custom, /*deep=*/true );
        }
 
        log = QUnit.urlParams.mwlogenv ? mw.log : function () {};
 
-       return function ( overrideConfig, overrideMsgs ) {
-               overrideConfig = overrideConfig || {};
-               overrideMsgs = overrideMsgs || {};
+       return function ( localEnv ) {
+               localEnv = $.extend( {
+                       // QUnit
+                       setup: $.noop,
+                       teardown: $.noop,
+                       // MediaWiki
+                       config: {},
+                       messages: {}
+               }, localEnv );
 
                return {
                        setup: function () {
                                log( 'MwEnvironment> SETUP    for "' + QUnit.config.current.module
                                        + ': ' + QUnit.config.current.testName + '"' );
+
                                // Greetings, mock environment!
-                               mw.config.values = freshConfigCopy( overrideConfig );
-                               mw.messages.values = freshMsgsCopy( overrideMsgs );
+                               mw.config.values = freshConfigCopy( localEnv.config );
+                               mw.messages.values = freshMessagesCopy( localEnv.messages );
+
+                               localEnv.setup()
                        },
 
                        teardown: function () {
                                log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
                                        + ': ' + QUnit.config.current.testName + '"' );
+
+                               localEnv.teardown();
+
                                // Farewell, mock environment!
                                mw.config.values = liveConfig;
-                               mw.messages.values = liveMsgs;
+                               mw.messages.values = liveMessages;
                        }
                };
        };
@@ -200,4 +191,59 @@ addons = {
 $.extend( QUnit, addons );
 $.extend( window, addons );
 
+/**
+ * Small test suite to confirm proper functionality of the utilities and
+ * initializations in this file.
+ */
+var envExecCount = 0;
+module( 'mediawiki.tests.qunit.testrunner', QUnit.newMwEnvironment({
+       setup: function () {
+               envExecCount += 1;
+               this.mwHtmlLive = mw.html;
+               mw.html = {
+                       escape: function () {
+                               return 'mocked-' + envExecCount;
+                       }
+               };
+       },
+       teardown: function () {
+               mw.html = this.mwHtmlLive;
+       },
+       config: {
+               testVar: 'foo'
+       },
+       messages: {
+               testMsg: 'Foo.'
+       }
+}) );
+
+test( 'Setup', function () {
+       expect( 3 );
+
+       equal( mw.html.escape( 'foo' ), 'mocked-1', 'extra setup() callback was ran.' );
+       equal( mw.config.get( 'testVar' ), 'foo', 'config object applied' );
+       equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object applied' );
+
+       mw.config.set( 'testVar', 'bar' );
+       mw.messages.set( 'testMsg', 'Bar.' );
+});
+
+test( 'Teardown', function () {
+       expect( 3 );
+
+       equal( mw.html.escape( 'foo' ), 'mocked-2', 'extra setup() callback was re-ran.' );
+       equal( mw.config.get( 'testVar' ), 'foo', 'config object restored and re-applied after test()' );
+       equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
+});
+
+module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
+
+test( 'Teardown', function () {
+       expect( 3 );
+
+       equal( mw.html.escape( '<' ), '&lt;', 'extra teardown() callback was ran.' );
+       equal( mw.config.get( 'testVar' ), null, 'config object restored to live in next module()' );
+       equal( mw.messages.get( 'testMsg' ), null, 'messages object restored to live in next module()' );
+});
+
 })( jQuery, mediaWiki, QUnit );
index 95284c7..f028dbc 100644 (file)
@@ -7,7 +7,7 @@ var config = {
        wgContentLanguage: 'en'
 };
 
-module( 'jquery.tablesorter', QUnit.newMwEnvironment( config ) );
+module( 'jquery.tablesorter', QUnit.newMwEnvironment({ config: config }) );
 
 test( '-- Initial check', function() {
        expect(1);
index e04111f..7ff0fb8 100644 (file)
@@ -55,7 +55,7 @@ var config = {
        "wgCaseSensitiveNamespaces": []
 };
 
-module( 'mediawiki.Title', QUnit.newMwEnvironment( config ) );
+module( 'mediawiki.Title', QUnit.newMwEnvironment({ config: config }) );
 
 test( '-- Initial check', function () {
        expect(1);
index 552e69e..b834aeb 100644 (file)
@@ -3,10 +3,11 @@ module( 'mediawiki.Uri', QUnit.newMwEnvironment() );
 test( '-- Initial check', function () {
        expect( 2 );
 
-       // Ensure we have a generic URI parser if not running in a browser
-       if ( !mw.Uri ) {
-               mw.Uri = mw.UriRelative( 'http://example.com/' );
-       }
+       // Ensure we have a generic mw.Uri constructor. By default mediawiki.uri,
+       // will use the currrent window ocation as base. But for testing we need
+       // to have a generic one, so that it doens't return false negatives if
+       // we run the test suite from an https server.
+       mw.Uri = mw.UriRelative( 'http://example.org/w/index.php' );
 
        ok( mw.UriRelative, 'mw.UriRelative defined' );
        ok( mw.Uri, 'mw.Uri defined' );
index e66cac2..2f11521 100644 (file)
@@ -15,15 +15,16 @@ test( '-- Initial check', function() {
 });
 
 test( 'mw.Map', function() {
+       var arry, conf, funky, globalConf, nummy, someValues;
        expect(17);
 
        ok( mw.Map, 'mw.Map defined' );
 
-       var     conf = new mw.Map(),
-               // Dummy variables
-               funky = function() {},
-               arry = [],
-               nummy = 7;
+       conf = new mw.Map();
+       // Dummy variables
+       funky = function () {};
+       arry = [];
+       nummy = 7;
 
        // Tests for input validation
        strictEqual( conf.get( 'inexistantKey' ), null, 'Map.get returns null if selection was a string and the key was not found' );
@@ -36,7 +37,7 @@ test( 'mw.Map', function() {
        strictEqual( conf.get( funky ), null, 'Map.get ruturns null if selection was invalid (Function)' );
 
        // Multiple values at once
-       var someValues = {
+       someValues = {
                'foo': 'bar',
                'lorem': 'ipsum',
                'MediaWiki': true
@@ -62,7 +63,7 @@ test( 'mw.Map', function() {
 
        ok( false === 'globalMapChecker' in window, 'new mw.Map did not store its values in the global window object by default' );
 
-       var globalConf = new mw.Map( true );
+       globalConf = new mw.Map( true );
        globalConf.set( 'anotherGlobalMapChecker', 'Hello' );
 
        ok( 'anotherGlobalMapChecker' in window, 'new mw.Map( true ) did store its values in the global window object' );
@@ -80,13 +81,14 @@ test( 'mw.config', function() {
 });
 
 test( 'mw.message & mw.messages', function() {
+       var goodbye, hello, pluralMessage;
        expect(20);
 
        ok( mw.messages, 'messages defined' );
        ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' );
        ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
 
-       var hello = mw.message( 'hello' );
+       hello = mw.message( 'hello' );
 
        equal( hello.format, 'plain', 'Message property "format" defaults to "plain"' );
        strictEqual( hello.map, mw.messages, 'Message property "map" defaults to the global instance in mw.messages' );
@@ -110,7 +112,7 @@ test( 'mw.message & mw.messages', function() {
 
        strictEqual( hello.exists(), true, 'Message.exists returns true for existing messages' );
 
-       var goodbye = mw.message( 'goodbye' );
+       goodbye = mw.message( 'goodbye' );
        strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
 
        equal( goodbye.plain(), '<goodbye>', 'Message.toString returns plain <key> if format is "plain" and key does not exist' );
@@ -118,7 +120,7 @@ test( 'mw.message & mw.messages', function() {
        equal( goodbye.escaped(), '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if format is "escaped" and key does not exist' );
 
        ok( mw.messages.set( 'pluraltestmsg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
-       var pluralMessage = mw.message( 'pluraltestmsg' , 6 );
+       pluralMessage = mw.message( 'pluraltestmsg' , 6 );
        equal( pluralMessage.plain(), 'There are 6 results', 'plural get resolved when format is plain' );
        equal( pluralMessage.parse(), 'There are 6 results', 'plural get resolved when format is parse' );
 
@@ -144,9 +146,8 @@ test( 'mw.msg', function() {
 });
 
 test( 'mw.loader', function() {
-       expect(2);
-
        var isAwesomeDone;
+       expect(2);
 
        // Async ahead
        stop();
@@ -173,46 +174,83 @@ test( 'mw.loader', function() {
 });
 
 test( 'mw.loader.implement', function () {
-       expect(5 - 2);
-
-       var isJsExecuted, $element;
+       var isJsExecuted, $element, styleTestUrl;
+       expect(5);
 
        // Async ahead
        stop();
 
+       styleTestUrl = QUnit.fixurl(
+               mw.config.get( 'wgScriptPath' )
+               + '/tests/qunit/data/styleTest.css.php?'
+               + $.param({
+                       selector: '.mw-test-loaderimplement',
+                       prop: 'float',
+                       val: 'right'
+               })
+       );
+
        mw.loader.implement(
                'test.implement',
                function () {
-                       start();
+                       var styleTestTimeout, styleTestStart, styleTestSince;
 
                        strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
                        isJsExecuted = true;
 
                        equal( mw.loader.getState( 'test.implement' ), 'loaded', 'module state is "loaded" while implement() is executing javascript' );
-                       
+
                        $element = $( '<div class="mw-test-loaderimplement">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
-                       // @broken: equal( $element.css( 'text-align' ),'center', 'CSS stylesheet was applied in time. ("text-align: center")' );
+                       equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
 
-                       // Marked broken due to a bug in qunit/index.html, via Special:JavaScriptTest/qunit it works fine
+                       // 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.
 
-                       // CSS @import is easily broken when concatenating stylesheets (bug 34669)
-                       // @broken: equal( $element.css( 'float' ), 'right', 'CSS stylesheet was applied in time via @import (bug 34669). ("float: right")' );
+                       styleTestTimeout = QUnit.config.testTimeout || 5000; // milliseconds
 
-                       equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded in time' );
-               
+                       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 ) {
+                                       equal( $element.css( 'float' ), 'right',
+                                               'CSS stylesheet via @import was applied (after ' + styleTestSince + 'ms) (bug 34669). ("float: right")'
+                                       );
+
+                                       equal( $element.css( 'text-align' ),'center',
+                                               'CSS styles after the @import are working ("text-align: center")'
+                                       );
+
+                                       // Async done
+                                       start();
+
+                                       return;
+                               }
+                               // Otherwise, keep polling
+                               setTimeout( styleTestLoop, 100 );
+                       }
+
+                       // Start the loop
+                       styleTestStart = new Date().getTime();
+                       styleTestLoop();
                },
                {
                        "all": "@import url('"
-                               + QUnit.fixurl( mw.config.get( 'wgScriptPath' )
-                               + '/tests/qunit/data/styleTest.css.php?'
-                               + $.param({
-                                       selector: '.mw-test-loaderimplement',
-                                       prop: 'float',
-                                       val: 'right'
-                               }) )
+                               + styleTestUrl
                                + "');\n"
-                               + '.mw-test-loaderimplement  { text-align: center; }'
+                               + '.mw-test-loaderimplement { text-align: center; }'
                },
                {
                        "test-foobar": "Hello Foobar, $1!"
@@ -223,6 +261,129 @@ test( 'mw.loader.implement', function () {
 
 });
 
+test( 'mw.loader erroneous indirect dependency', function() {
+       expect( 3 );
+       mw.loader.register( [
+               ['test.module1', '0'],
+               ['test.module2', '0', ['test.module1']],
+               ['test.module3', '0', ['test.module2']]
+       ] );
+       mw.loader.implement( 'test.module1', function() { throw new Error( 'expected' ); }, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
+       strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
+       strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
+} );
+
+test( 'mw.loader out-of-order implementation', function() {
+       expect( 9 );
+       mw.loader.register( [
+               ['test.module4', '0'],
+               ['test.module5', '0', ['test.module4']],
+               ['test.module6', '0', ['test.module5']]
+       ] );
+       mw.loader.implement( 'test.module4', function() {}, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
+       strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'Expected "registered" state for test.module6' );
+       mw.loader.implement( 'test.module6', function() {}, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
+       strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'Expected "loaded" state for test.module6' );
+       mw.loader.implement( 'test.module5', function() {}, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
+       strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'Expected "ready" state for test.module5' );
+       strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
+} );
+
+test( 'mw.loader missing dependency', function() {
+       expect( 13 );
+       mw.loader.register( [
+               ['test.module7', '0'],
+               ['test.module8', '0', ['test.module7']],
+               ['test.module9', '0', ['test.module8']]
+       ] );
+       mw.loader.implement( 'test.module8', function() {}, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
+       strictEqual( mw.loader.getState( 'test.module8' ), 'loaded', 'Expected "loaded" state for test.module8' );
+       strictEqual( mw.loader.getState( 'test.module9' ), 'registered', 'Expected "registered" state for test.module9' );
+       mw.loader.state( 'test.module7', 'missing' );
+       strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
+       strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
+       strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
+       mw.loader.implement( 'test.module9', function() {}, {}, {} );
+       strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
+       strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
+       strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
+       mw.loader.using(
+               ['test.module7'],
+               function() {
+                       ok( false, "Success fired despite missing dependency" );
+                       ok( true , "QUnit expected() count dummy" );
+               },
+               function( e, dependencies ) {
+                       strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+                       deepEqual( dependencies, ['test.module7'], 'Error callback called with module test.module7' );
+               }
+       );
+       mw.loader.using(
+               ['test.module9'],
+               function() {
+                       ok( false, "Success fired despite missing dependency" );
+                       ok( true , "QUnit expected() count dummy" );
+               },
+               function( e, dependencies ) {
+                       strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+                       dependencies.sort();
+                       deepEqual(
+                               dependencies,
+                               ['test.module7', 'test.module8', 'test.module9'],
+                               'Error callback called with all three modules as dependencies'
+                       );
+               }
+       );
+} );
+
+test( 'mw.loader real missing dependency', function() {
+       expect( 6 );
+
+       mw.loader.addSource(
+               'test',
+               {'loadScript' : QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/testloader.php' )}
+       );
+       mw.loader.register( [
+               ['test.missing', '0', [], null, 'test'], ['test.missing2', '0', [], null, 'test'],
+               ['test.use_missing', '0', ['test.missing'], null, 'test'],
+               ['test.use_missing2', '0', ['test.missing2'], null, 'test']
+       ] );
+
+       stop();
+       // Asynch ahead
+
+       mw.loader.load( ['test.use_missing'] );
+
+       function verifyModuleStates() {
+               strictEqual( mw.loader.getState( 'test.missing' ), 'missing', 'Module "test.missing" must have state "missing"' );
+               strictEqual( mw.loader.getState( 'test.missing2' ), 'missing', 'Module "test.missing2" must have state "missing"' );
+               strictEqual( mw.loader.getState( 'test.use_missing' ), 'error', 'Module "test.use_missing" must have state "error"' );
+               strictEqual( mw.loader.getState( 'test.use_missing2' ), 'error', 'Module "test.use_missing2" must have state "error"' );
+       }
+
+       mw.loader.using( ['test.use_missing2'],
+               function() {
+                       start();
+                       ok( false, "Success called wrongly." );
+                       ok( true , "QUnit expected() count dummy" );
+                       verifyModuleStates();
+               },
+               function( e, dependencies ) {
+                       start();
+                       ok( true, "Error handler called correctly." );
+                       deepEqual( dependencies, ['test.missing2'], "Dependencies correct." );
+                       verifyModuleStates();
+               }
+       );
+} );
+
 test( 'mw.loader bug29107' , function () {
        expect(2);
 
index b148715..04cf8d8 100644 (file)
@@ -24,12 +24,7 @@ class SeleniumConfig {
                        throw new MWException( "Unable to read local Selenium Settings from " . $seleniumConfigFile . "\n" );
                }
 
-               if ( !defined( 'PHP_VERSION_ID' ) ||
-                       ( PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 3 ) ) {
-                       $configArray = self::parse_5_2_ini_file( $seleniumConfigFile );
-               } else {
-                       $configArray = parse_ini_file( $seleniumConfigFile, true );
-               }
+               $configArray = parse_ini_file( $seleniumConfigFile, true );
                if ( $configArray === false ) {
                        throw new MWException( "Error parsing " . $seleniumConfigFile . "\n" );
                }
@@ -61,35 +56,6 @@ class SeleniumConfig {
                return true;
        }
 
-       /**
-        * PHP 5.2 parse_ini_file() doesn't have support for array keys.
-        * This function parses simple ini files with such syntax using just
-        * 5.2 functions.
-        */
-       private static function parse_5_2_ini_file( $ConfigFile ) {
-               $file = fopen( $ConfigFile, "rt" );
-               if ( !$file ) {
-                       return false;
-               }
-               $header = '';
-
-               $configArray = array();
-
-               while ( ( $line = fgets( $file ) ) !== false ) {
-                       $line = strtok( $line, "\r\n" );
-
-                       if ( !$line || $line[0] == ';' ) continue;
-
-                       if ( $line[0] == '[' && substr( $line, -1 ) == ']' ) {
-                               $header = substr( $line, 1, -1 );
-                               $configArray[$header] = array();
-                       } else {
-                               $configArray[$header] = array_merge_recursive( $configArray[$header], self::parse_ini_line( $line ) );
-                       }
-               }
-               return $configArray;
-       }
-
        private static function parse_ini_line( $iniLine ) {
                static $specialValues = array( 'false' => false, 'true' => true, 'null' => null );
                list( $key, $value ) = explode( '=', $iniLine, 2 );